获取 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 返回“必须使用活动访问令牌来查询有关当前用户的信息。”