0

我正在尝试将 facebook 聊天集成到我们的移动 Flash/AIR 应用程序中,并且正在将XIFF用于 XMPP 内容。当然,我必须为使用 access_token 而不是 sig 和 secret 的较新 Facebook API 修改一些文件。

对于那些熟悉 xiff/smack API 的人,我是这样建立连接的:

XFacebookPlatform.setFacebookSessionValues(AppData.FACEBOOK_APP_ID, AppData.getInstance().getFBSession().accessToken);
XMPPConnection.registerSASLMechanism("X-FACEBOOK-PLATFORM", XFacebookPlatform);

var con :XMPPConnection = new XMPPConnection();
con.server = "chat.facebook.com";
con.useAnonymousLogin = true;
con.connect(XMPPConnection.STREAM_TYPE_STANDARD);

.

基本上,我已经到了用 IMO 应该是正确格式来回答挑战的地步:

var responseMap:Dictionary = new Dictionary();
responseMap.api_key = fb_api_key;
        responseMap.call_id = 0;
        responseMap.method = incomingChallengeMap.method;
        responseMap.nonce = incomingChallengeMap.nonce;
        responseMap.access_token = user_access_token;
        responseMap.v = "1.0";

        var challengeResponse:String = "api_key=" + responseMap.api_key;
        challengeResponse += "&call_id=" + responseMap.call_id;
        challengeResponse += "&method=" + responseMap.method;
        challengeResponse += "&nonce=" + responseMap.nonce;
        challengeResponse += "&access_token=" + responseMap.access_token;
        challengeResponse += "&v=" + responseMap.v;
        challengeResponse = Base64.encode( challengeResponse );

.

响应已发送,但作为答案,我收到以下信息:

<failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
<not-authorized xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/>

这听起来像我没有授予“xmpp_login”,但我做到了。我通过Graph API explorer检查了它,并且对于它显示的相同 access_token :

{
 "data": [
   {
     "installed": 1,
     "xmpp_login": 1,
     "user_online_presence": 1,
     "friends_online_presence": 1
   }
 ]
}

我想这应该绰绰有余了。

但我仍然得到“未经授权”的失败。任何想法这里出了什么问题?

4

1 回答 1

1

有趣的是,问题出在这一行:

var con :XMPPConnection = new XMPPConnection();

必须用这一行替换:

var con :XMPPTLSConnection = new XMPPTLSConnection();

而已。facebook 聊天仅使用 TLS 连接进行身份验证。

.

虽然这确实有道理,但错误消息

<failure xmlns="urn:ietf:params:xml:ns:xmpp-sasl">
<not-authorized xmlns="urn:ietf:params:xml:ns:xmpp-sasl"/>

在这里非常具有误导性,因为它暗示有权利的事情是错误的。

于 2012-06-07T17:30:57.977 回答