获取 xmpp_login 访问令牌在 Facebook iOS SDK 中不起作用

Posted

技术标签:

【中文标题】获取 xmpp_login 访问令牌在 Facebook iOS SDK 中不起作用【英文标题】:Getting xmpp_login Access Token Not Working in Facebook iOS SDK 【发布时间】:2014-08-21 14:07:14 【问题描述】:

我正在尝试获取有效的 accessToken 以通过 XMPP 从我的 ios 应用发送消息。

我正在使用这个库 (https://github.com/KanybekMomukeyev/FacebookChat),一切似乎都运行良好,但它使用的是旧的 xmpp 库和旧的 Facebook sdk。

在我的应用程序中,我使用的是最新的 Facebook SDK,为了获得 xmpp_login 权限,我正在执行以下操作:

[FBSession openActiveSessionWithReadPermissions:@[@"xmpp_login"] allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState status, NSError *error) 
    ...
];

我没有收到任何错误,但是当我尝试将生成的 accessToken 与 xmpp 库一起使用时,我继续得到 No Authenticated error

四处挖掘,我最终检查了 facebook 用于在新 SDK(我的应用程序)和旧 SDK(Facebook 聊天)中请求令牌的 url。

我的:

https://m.facebook.com/v2.0/dialog/oauth?sdk_version=3.15.0&response_type=token&return_scopes=true&legacy_override=v2.0&e2e="init":1404191289978&scope=xmpp_login&client_id=274849106003593&state="is_open_session":true,"is_active_session":true,"com.facebook.sdk_client_state":true,"3_method":"browser_auth","0_auth_logger_id":"72796574-5B5C-4EF3-9B0B-F9AC376E2DC4"&redirect_uri=fb274849106003593://authorize&sdk=ios&display=touch

他们:

https://m.facebook.com/dialog/oauth?type=user_agent&display=touch&redirect_uri=fb274849106003593://authorize&sdk=ios&scope=xmpp_login&client_id=274849106003593

我不太确定为什么一个有效而另一个无效,在这两种情况下我都会获得 accessTokens,但如果我使用第一个 URL 请求 XMPP 不会进行身份验证。

有谁知道为什么会发生这种情况或权限中还需要包含什么?

PS:顺便说一句,如果您尝试第二种(旧方式)URL,任何后续请求都将有效,直到令牌过期。

【问题讨论】:

【参考方案1】:

根据 Facebook (https://developers.facebook.com/docs/apps/changelog),他们的 API v2.0 删除了对 xmpp_login 权限的访问,这就是它不起作用的原因。

一种快速的解决方法是强制较新的 SDK 使用 API 的 v1.0。

[FBSettings enablePlatformCompatibility:YES];

API v1.0 将在 2015 年 4 月 15 日之前提供,Facebook 声明如下:

Apps that were inactive or have a creation date on or after April 30th, 2014 will not be able to make calls to v1.0 of the API. They must use v2.0.

所以 xmpp 不再是一个可行的解决方案了。

【讨论】:

以上是关于获取 xmpp_login 访问令牌在 Facebook iOS SDK 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

无法在 Xcode Swift Facebook 登录 SDK 中获取访问令牌

OOAuthException:必须使用活动访问令牌来查询有关当前用户的信息

Facebook Android SDK 4.0:newGraphPathRequest 返回“必须使用活动访问令牌来查询有关当前用户的信息。”

如何在 C# 中从 Facebook SDK 获取当前用户访问令牌?不是应用访问令牌

Google Analytics:从刷新令牌中获取访问令牌

在 JavaScript 中存储刷新令牌,获取新的访问令牌