Sharekit for Facebook(图谱API版)注销方法未完全注销或取消授权用户

时间:2011-10-11 22:53:38

标签: iphone facebook facebook-graph-api logout sharekit

我正在使用Sharekit与Facebook Graph API共享Facebook。我试图找到最新的,最新的代码(github上的troppoli似乎是最新的)。

使用sharekit注销Twitter工作正常:[SHK logoutOfService:@“SHKTwitter”];但Facebook的同一行[SHK logoutOfService:@“SHKFacebook”]会产生不同的结果。

当我重新登录时,登录屏幕不会显示。取而代之的是一个带有文字的屏幕:“你已经授权......按好然后继续。”然后在屏幕底部“登录为...”和“退出”。但据说用户已经退出。

更糟糕的是,如果按“好”按钮继续,我会收到错误:“操作无法完成。(NSURLErrorDomain错误-999。)

我想我可能需要调整ShareKit来完成这项工作,但我讨厌这样做。还有其他人遇到过这个吗?

2 个答案:

答案 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以编程方式撤消应用的权限   调用

希望这会有所帮助,如果您发现任何不同之处,请告诉我。