近日開發活動網站的 Facebook 應用程式時,在發送應用程式好友邀請(fb:request-form & fb:multi-friend-selector)時,使用者接收到邀請,點擊按鈕後,只會看到「邀請已過期」,並不會被導向到活動網站。

同事研究後發現,有兩個問題點會導致這樣的結果:
1. fb:request-form 的 action 導向到不同的網域。
2. fb:request-form 中的 content 屬性,少加了 fb:req-choice 按鈕標籤

此外,可以用來判斷此邀請是否會變成「邀請已過期」,似乎從發送邀請時的預覽框就能得知:

下面這張圖是正常的邀請,其中紅框部分會寫「接受」,若為不正確(也就是會變成已過期)的情況,此紅框會寫「前往 XXXX」(Go to XXXX)。

以下附上 JavaScript 的 Code, 主要是產生應用程式好友邀請的表單:

var oldSize = FB.UIServer.Methods\["fbml.dialog"\].size;  
FB.UIServer.Methods\["fbml.dialog"\].size = {width:750, height:600};  
FB.ui(  
{  
method:’fbml.dialog’,  
width: ‘750px’,  
height: ‘600px’,  
display: ‘dialog’,//popup  
fbml: (  
"<fb:fbml><fb:request-form action=’"+action+"’ method=’POST’ invite=’true’ type=’"+type+"’ content=’"+content+"<fb:req-choice url=\\""+action+"\\" label=\\""+"測試"+"\\" />’>"  
+"<fb:multi-friend-selector showborder=’false’ actiontext=’"+actiontext+"’>"  
+"</fb:request-form></fb:fbml>"  
),  
},  
function(response){

}  
);  
FB.UIServer.Methods\["fbml.dialog"\].size = oldSize;

滿奇怪的一點是,就算加上了 fb:req-choice 按鈕標籤,實際上邀請中並不會 render 出這個按鈕,但不加上它卻又會導致邀請已過期的問題 … 。

Facebook 官方開發文件中似乎也未對此事有什麼說明呢…