在iOS应用和Web应用上链接Facebook Graph

时间:2013-05-28 20:18:22

标签: ios xcode facebook facebook-graph-api facebook-ios-sdk

所以我经常搜索这个话题,可能会让事情变得复杂,但是会对它有所了解。所以这就是问题所在。

我有一个使用Facebook Graph的网络应用程序(FB登录,朋友邀请,通过FB共享等)。我们刚为网站构建了一个iOS应用程序,现在也希望在iOS应用程序上实现上述所有FB操作。我查看了Facebook文档,并尝试使用它来获取Facebook登录信息,以便为已经在我们网站上注册的用户工作(并且还连接了他们的Facebook帐户),但它似乎没有上班。

用例 - 用户在网络应用上注册并将他们的FB帐户与我们连接。然后他们下载iOS应用程序,并希望使用FB登录登录iOS应用程序或在时间轴上共享对象。反之亦然也应适用。

问题 - 对于上述用例,ios App,Web Server和Facebook之间的工作流程应该是什么?基本上,令牌和秘密是如何通过的,所以三个人都知道我们在谈论同一个用户和同一个FB账户?

任何链接或建议都将受到高度赞赏!谢谢!

1 个答案:

答案 0 :(得分:5)

如果facebook authed webapp用户首次启动本机应用程序,您将不知道他们是谁。所以他们需要通过“登录facebook”按钮提示。当他们点击该按钮时,facebook-ios-sdk将确定登录用户是谁,然后检查该用户是否已授予您的应用程序访问权限。如果Web应用程序和本机应用程序都指向同一个Facebook应用程序,那么facebook-ios-sdk将只存储authed访问令牌,您将可以访问您的Web应用程序在本机应用程序上执行的所有操作。

这里的关键是您的网络应用和本机应用必须指向相同的Facebook应用(即在developers.facebook.com中的相同应用ID)。如果没有,则当他们点击“使用facebook登录”按钮时,将重新提示本机应用程序用户授予权限。此外,用户登录Web应用程序(基于浏览器中的cookie)和手机本身的相同Facebook帐户非常重要。 facebook-ios-sdk使用几种不同的方式在手机上查找活跃的Facebook帐户。它尝试iOS 5+系统的Facebook帐户,应用程序间的应用程序调用facebook自己的本机应用程序,在您的应用程序中运行的Web视图实例的浏览器cookie,或者将您反弹到safari并在Safari中使用浏览器cookie。哪一个人首先回来说他们有一个活跃的Facebook帐户需要找到与网络应用程序相同的Facebook帐户。在大多数情况下,它们会匹配,因为大多数用户只有一个Facebook帐户,并且使用相同的帐户登录到处,但它们肯定可能不同。如果网络应用程序Facebook用户与facebook-ios-sdk检测到的本机应用程序活动的Facebook用户不同,那么“使用facebook登录”按钮将仅提示本机应用程序活动的Facebook用户登录并授予权限。

将访问令牌授予本机应用程序后,您可以将其发送回服务器,找到关联的Facebook用户ID,现在可以将Web应用程序用户和本机应用程序用户链接为同一个人同时运行两个应用此外,您可以使用您从本机应用程序获得的最新访问令牌代表用户在服务器上进行的任何图形api调用。通过facebook-ios-sdk直接在本机应用程序中进行的任何共享/发布/ api调用都将以此用户身份完成,并由sdk处理(即,您不需要担心它...它应该只是无缝地工作,并将所有帖子集成到他们的时间线,就像网络应用程序的图表apis可以)。

如果你有一个facebook authed本机app用户访问网络应用程序,你也不会(在第一次请求时)知道这个用户是谁。您可以使用facebook js sdk登录来呈现它们,并且,一旦同一个Facebook用户登录,您可以将此当前Web应用程序用户与之前在本机应用程序上的用户相关联。

专门针对您的问题,您真的无法在首次访问应用时了解迁移用户在Web应用或本机应用中的位置。这就是“登录facebook”的地方。假设用户登录浏览器和手机上的同一帐户(由facebook-ios-sdk确定),那么登录你的应用程序的过程是无缝。系统不会再次提示他们授予权限(除非您的权限在Web应用程序和本机应用程序之间设置不同),并且您将立即获得用户的访问令牌。服务器的作用是使用授予的访问令牌来协调两个用户。使用访问令牌,服务器可以简单地调用图形api并获取用户的Facebook用户ID。使用该Facebook用户ID,您将能够匹配应用程序上用户的“真实”身份(即,您现在知道Web应用程序用户和本机应用程序用户是同一个)。一旦您知道该用户是谁,您就可以根据他的身份为该用户提供个性化体验,无论他是使用您的网络应用还是您的原生应用。

希望这会有所帮助。很高兴回答你可能有的更多问题。