带有 Facebook 单点登录的 iOS 应用程序中的“点赞”按钮

Posted

技术标签:

【中文标题】带有 Facebook 单点登录的 iOS 应用程序中的“点赞”按钮【英文标题】:Like button in iOS app with Facebook Single-Sign-On 【发布时间】:2011-03-17 14:55:30 【问题描述】:

有什么方法可以将 FB 单点登录登录流程与 UIWebView 中的点赞按钮结合使用?

我有一个使用 UIWebView 显示网页的应用程序,并且在该页面中有一个类似 FB 的按钮。我已经按帖子中的建议使用了“赞”按钮

Like button in ios application

但是登录对话框看起来不太好,如果我可以改用 SSO 流程,那就太棒了。但我还没有让这个工作。有谁试过这个?

【问题讨论】:

你想好如何解决这个问题了吗? 【参考方案1】:

我实际上将 Facebook 源代码修改为始终使用 safari 进行身份验证,而不是单点登录。这允许我在 UIWebViews 中创建我的喜欢按钮(或喜欢框)。

【讨论】:

不错。您能告诉我们您在哪里/如何修改 FB SDK 吗? 你可以在 github 上 fork 源代码:github.com/Thuzi/iOS-Facebook-Authentication。它有类似按钮的示例。【参考方案2】:

Facebook API 实际上首先检查您的 ios 设备是否支持多任务处理。如果不是,它正在使用弹出对话框。如果设备确实支持,那么它会尝试使用 Facebook 应用程序(当然,如果它安装在设备上),然后是 safari,然后才会回退到弹出对话框。请注意使用相同的 Facebook 对象,否则您需要为每个操作登录...

【讨论】:

【参考方案3】:

不可能使用 Web 组件(如 UIWebView 或外部 Safari)和本机代码(如您所指的 UIButton)以类似 SSO 的方式在它们之间进行交互。

1) FB 存储一个登录 cookie 用于授权。

2) 每个 Web 组件,例如UIWebView 或外部 Safari 使用自己的沙盒 cookie 存储。我发现(并且我坚信)没有办法实现它们之间的相互通信。

3) 本机代码使用每个应用程序沙箱存储的 AccessToken,以便在外部 FB API 调用(如授权、图形调用等)中使用

4) 如果你找到其他方法,请告诉我;)

【讨论】:

【参考方案4】:

你可以拦截你喜欢按钮的动作。

只需将您的点赞按钮设置为带有http://mydomain.com/doLikeStuff 的链接

在 UIWebView 中,签入 webView:shouldStartLoadWithRequest:navigationType:

对于 /doLikeStuff 链接,返回 NO(因此 Web 视图实际上不执行任何操作)并实现您的自定义流程。

【讨论】:

【参考方案5】:

似乎有关于不能这样做的协议。但是,这篇文章表明您可以: Using 'Like' with the Facebook Graph API on iOS

为了支持它,这里是 FB Graph API 文档的摘录:

您可以评论或喜欢任何具有 /cmets 或 /likes 的对象 通过发布到https://graph.facebook.com/OBJECT_ID/comments 进行连接 和https://graph.facebook.com/OBJECT_ID/likes,分别为:

(来源:http://developers.facebook.com/docs/reference/api/)

【讨论】:

非常抱歉,这篇文章解释说你可以喜欢几乎所有东西,除了 facebook 上的页面:***.com/questions/5837010/… 在发布多个问题的复制和粘贴样板/逐字答案时要小心,这些往往会被社区标记为“垃圾邮件”。如果您这样做,则通常意味着问题是重复的,因此请将它们标记为这样。

以上是关于带有 Facebook 单点登录的 iOS 应用程序中的“点赞”按钮的主要内容,如果未能解决你的问题,请参考以下文章

在 Facebook IOS SDK 中禁用单点登录 (SSO)

iOS 问题中的 Facebook 单点登录

如何使用 facebook ios sdk for iphone 实现单点登录 (SSO)

带有 Facebook 登录的 IOS 应用程序卡在登录页面

Facebook 登录不会返回到带有 Xcode 7 iOS 9 的应用程序

使用单点登录对用户进行身份验证时,Facebook iOS Safari“无法打开页面错误”