我正在使用Sharekit与Facebook Graph API共享Facebook。我试图找到最新的,最新的代码(github上的troppoli似乎是最新的)。
使用sharekit注销Twitter工作正常:[SHK logoutOfService:@“SHKTwitter”];但Facebook的同一行[SHK logoutOfService:@“SHKFacebook”]会产生不同的结果。
当我重新登录时,登录屏幕不会显示。取而代之的是一个带有文字的屏幕:“你已经授权......按好然后继续。”然后在屏幕底部“登录为...”和“退出”。但据说用户已经退出。
更糟糕的是,如果按“好”按钮继续,我会收到错误:“操作无法完成。(NSURLErrorDomain错误-999。)
我想我可能需要调整ShareKit来完成这项工作,但我讨厌这样做。还有其他人遇到过这个吗?
答案 0 :(得分:2)
您需要确保正确设置info.plist中的URL方案。在您的info.plist中,确保为Facebook设置了CFBundleURLType:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLName</key>
<string></string>
<key>CFBundleURLSchemes</key>
<array>
<string>fb{app_id}</string>
</array>
</dict>
</array>
将{app_id}替换为您的Facebook应用ID。
您还需要在应用委托中添加处理程序,以便在用户通过Mobile Safari进行身份验证后响应回调:
-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
return [SHKFacebook handleOpenURL:url];
}
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation{
return [SHKFacebook handleOpenURL:url];
}
这些更改为我解决了这个问题。
答案 1 :(得分:1)
我很确定这与新的Facebook单点登录(SSO)有关。如果用户安装了Facebook 3.2.3或更高版本,或者Safari在设备(或模拟器)上,则授权现在在应用程序的外部进行。我发现它会发布更多。
编辑:除了NSURL错误之外,似乎这是新Facebook SSO的预期行为。用户应该在“退出”应用程序后保持伪登录/注销状态,以防他们登录到其他应用程序等等 - 现在全部连接。要真正退出Facebook(比如说,以其他人身份登录等),用户似乎需要点击授权网页视图上的注销链接,该链接显示他们在您的应用中“登出”Facebook的时间。我可能错了,但我很确定这一点。
除了上述内容之外,我确实找到了摆脱NSURL错误的方法,这使事情变得更好,更可口。请参阅How Do I Fix NSURLErrorDomain Error -999 in iPhone。
有关新Facebook SSO的更多信息:
摘自Facebook iOS Tutorial(特别参见最后一段):
第3步:实施单点登录(SSO)
iOS SDK最引人注目的功能之一是单点登录 (SSO)。 SSO允许用户使用Facebook登录您的应用 身份。如果他们已经登录Facebook iOS应用程序 他们的设备甚至不必输入用户名和密码。 此外,因为他们正在使用Facebook与您的应用签名 身份,您可以获得用户访问权限的权限 个人资料信息和社交图谱。
SSO主要通过将用户重定向到她的Facebook应用程序来工作 设备。由于用户已经登录Facebook,他们不会 需要输入用户名和密码才能识别自己。他们 将看到具有您的应用所要求的权限的身份验证对话框 如果他们允许,那么他们将被重定向到您的应用程序 适当的access_token。
开发人员应该意识到Facebook SSO的行为会略有不同 根据用户设备上安装的内容而有所不同。这是 在某些配置中会发生什么:
如果应用程序在支持多任务处理的iOS版本中运行, 如果该设备具有3.2.3或更高版本的Facebook应用程序 安装后,SDK会尝试在其中打开授权对话框 Facebook应用程序。用户授予或拒绝授权后, Facebook应用程序重定向回调用应用程序,通过 授权令牌,到期以及Facebook的任何其他参数 OAuth服务器可能会返回。
如果设备在支持的iOS版本中运行 多任务,但它没有版本3.2.3或。的Facebook应用程序 更大的安装,SDK将打开授权对话框 苹果浏览器。用户授予或撤销授权后,Safari 重定向回调用应用程序。类似于Facebook应用程序 授权,这允许多个应用程序共享同一个Facebook 用户access_token通过Safari cookie。
如果该应用运行的是不支持的iOS版本 多任务处理,SDK使用弹出内联的旧机制 UIWebView,提示用户登录并授予访问权限。该 FBSessionDelegate是您的应用应该的回调接口 实现:代理的方法将在应用程序时调用 成功登录或注销。阅读iOS SDK文档 关于这个代表的更多细节。
...
当用户想要停止使用Facebook与您的应用集成时, 你可以调用logout方法来清除app状态并制作一个 服务器请求使当前access_token无效。
[facebook logout:self];您可以实现fbDidLogout方法 FBSessionDelegate协议用于处理您的任何退出后操作 希望采取。
请注意,注销不会撤消您的应用程序的权限, 但只是清除你的应用程序的access_token。如果是用户那个 之前已退出您的应用返回,他们只会看到一个 通知他们正在登录您的应用,而不是通知 授予权限。修改或撤销应用程序 权限,用户可以访问“应用程序,游戏,和 网站“他们的Facebook隐私设置仪表板的标签。你可以 还使用Graph API以编程方式撤消应用的权限 调用
希望这会有所帮助,如果您发现任何不同之处,请告诉我。