我希望我的iOS和Android应用程序通过本地Facebook应用程序而不是web视图提供Facebook登录。从字面上看,我发现的所有文档似乎都在谈论仅客户端身份验证,也就是说,客户端与Facebook对话,然后从交易中收到access_token
。
我需要能够使用我的服务器对用户进行身份验证。这意味着我需要我的服务器在中间,从Facebook接收重定向,然后验证用户。
如果我想使用web视图,那就非常简单了。然而,我找不到任何详细说明如何使用Facebook原生应用程序做到这一点的文档。有吗?还是我错过了一些愚蠢/简单的东西?
在构建Stormpath的iOS SDK时,我花了一些时间研究Facebook SDK是如何在iOS上做到这一点的(我们重新实现了Facebook的登录流,以避免需要另一个依赖项),我相信我知道为什么Facebook和谷歌开始使用web视图而不是他们的本地应用程序。
在iOS9中,SFSafariWebView
发布了,这真的很棒,因为与WKWebView
或UIWebView
不同,SFSafariWebView
可以访问用户的所有cookie。这意味着当在网络视图中打开Facebook登录屏幕的链接时,您的用户已经登录
因为他们永远不会被引导出你的应用程序,所以使用网络视图实际上比使用Facebook应用程序来验证你的用户更快、更好的用户体验。
然而,由于Facebook iOS SDK是开源的,您可以在FBSDKLoginManager.m中查看performNativeLogInWithParameters:handler:
,了解他们是如何实现它的,并修改内部结构,使其强制本地应用程序登录。