Facebook 的 Sharekit(Graph API 版本)注销方法未完全注销或取消授权用户

Posted

技术标签:

【中文标题】Facebook 的 Sharekit(Graph API 版本)注销方法未完全注销或取消授权用户【英文标题】:Sharekit for Facebook (Graph API version) logout method not fully logging out or deauthorizing user 【发布时间】:2011-10-11 22:53:37 【问题描述】:

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

使用 sharekit 退出 Twitter 可以正常使用以下行:[SHK logoutOfService:@"SHKTwitter"];但是对于 Facebook,[SHK logoutOfService:@"SHKFacebook"] 的同一行会产生不同的结果。

当我重新登录时,登录屏幕不显示。取而代之的是一个带有文本的屏幕:“您已经授权......按确定继续。”然后在屏幕底部,“Logged in as ...”和“Log out”。但是用户应该已经注销了。

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

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

【问题讨论】:

【参考方案1】:

您需要确保在 info.plist 中正确设置了 URL 方案。在你的 info.plist 中,确保你已经为 Facebook 设置了 CFBundleURLTypes:

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string></string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>fbapp_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];

这些更改为我解决了这个问题。

【讨论】:

感谢马克的回复。我的第一个问题是 - 您目前是否使用 oAuth 2.0 和 Facebook Graph API?我在常规的 FBConnect 中完美地工作,只是因为更新(并使用 Sharekit 这样做)我有这个注销问题。我确实已经在应用程序委托中正确设置了处理程序。我还设置了 plist……但我还有一些其他问题要问你。我的应用程序不是 iPad 应用程序,而不是 CFBundleURLTypes/CFBundleURLName/CFBundleURLSchemes,我的 plist 有键:URL 类型/URL 标识符/URL 方案.... 我无法更改(据我所知),但我想我读到它在实际 plist 中仍然与 CF 名称相同。这听起来是真的吗?此外,我在不同的例子中看到了这一点,有和没有 URL 标识符/CFBundleURLName。我尝试了两者,仍然得到相同的结果。无论如何,我很想听听你对这个问题的更多想法。再次感谢。 标记了您的答案,因为它是很好的信息,希望能对某人有所帮助。在这一点上只是没有解决这个特定的问题。 @JPK,我正在使用 ShareKit 的这个分支,它集成了图形 API:github.com/troppoli/ShareKit。这是我找到的最好的分支,因为 ShareKit API 的主分支已经有一段时间没有更新了。如果您在代码中打开 PList,CFBundleURLTypes 只是底层的 XML 名称。切换到图形 API 后,我必须添加处理程序。 我也在使用 troppoli 的 Sharekit 版本。很高兴知道我选对了。那么,似乎我们正在做同样的事情?但是您可以完全退出 Facebook 吗?你只是在使用 [SHKFacebook logout] 或 [SHK logoutOfService:@"SHKFacebook"],还是还做其他事情?【参考方案2】:

我很确定这与新的 Facebook 单点登录 (SSO) 有关。如果用户安装了 Facebook 3.2.3 或更高版本,或者如果设备(或模拟器)上有 Safari,则授权现在在应用程序之外进行。找到后会发布更多内容。

编辑:除了 NSURL 错误之外,这似乎是新 Facebook SSO 的预期行为。用户应该在“注销”您的应用程序后保持伪登录/注销状态,以防他们登录到另一个应用程序等 - 现在一切都已连接。要真正注销 facebook(比如说,以其他人身份登录等),用户似乎需要单击授权 web 视图上的注销链接,该链接显示他们何时在您的应用程序中“注销”facebook。我可能是错的,但我很确定这一点。

除此之外,我确实找到了摆脱 NSURL 错误的方法,这让事情变得更好,更可口。见How Do I Fix NSURLErrorDomain Error -999 in iPhone。

有关新的 Facebook SSO 的更多信息:

摘自Facebook ios Tutorial(特别是最后一段):

第 3 步:实施单点登录 (SSO)

iOS SDK 最引人注目的功能之一是单点登录 (单点登录)。 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 通过 Safari cookie 获取用户 access_token。

如果应用运行的 iOS 版本不支持 多任务,SDK使用旧的弹出内联机制 UIWebView,提示用户登录并授予访问权限。这 FBSessionDelegate 是一个回调接口,你的应用应该 实现:应用程序时将调用委托的方法 成功登录或注销。阅读 iOS SDK 文档 有关此委托的更多详细信息。

...

当用户想要停止使用 Facebook 与您的应用集成时, 您可以调用注销方法来清除应用程序状态并进行 服务器请求使当前 access_token 无效。

[Facebook 注销:自我];您可以实现 fbDidLogout 方法 FBSessionDelegate 协议来处理您的任何注销后操作 想拿。

请注意,注销不会撤销您的应用程序的权限, 但只会清除您应用程序的 access_token。如果一个用户 之前已退出您的应用返回,他们只会看到一个 通知他们正在登录您的应用程序,而不是通知 授予权限。修改或撤销应用程序的 权限,用户可以访问“应用程序、游戏和 网站”他们 Facebook 隐私设置仪表板的选项卡。您可以 还可以使用 Graph API 以编程方式撤销应用程序的权限 打电话。

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

【讨论】:

以上是关于Facebook 的 Sharekit(Graph API 版本)注销方法未完全注销或取消授权用户的主要内容,如果未能解决你的问题,请参考以下文章

Sharekit - 将 url 链接发送到 facebook

使用 sharekit 在 facebook 上分享的问题

iOS - ShareKit 和 Facebook [关闭]

使用 ShareKit 将 UILabel 传递给 Facebook

ShareKit 无法将消息或图像分享到 Facebook

ShareKit2.0 打开 Facebook 手机,但无法重定向。 Safari 说页面无效