[Facebook] 邀請已過期(expired) 的錯誤與解法

Standard

近日開發活動網站的 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, 主要是產生應用程式好友邀請的表單:
[code language=”javascript”]
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;
[/code]

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

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

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *