2013-05-28 49 views
4

因此,我已经搜索了很多这个主题,可能会过度复杂化,但会喜欢一些清晰的内容。所以这是问题。在iOS应用程序和Web应用程序中链接Facebook图表

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

用例 - 用户在Web应用程序中注册并将他们的FB账户与我们连接。然后,他们下载iOS应用程序,并希望使用FB登录登录iOS应用程序或在其时间线上共享对象。反之亦然。

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

任何链接或建议将不胜感激!谢谢!

+0

关于将Facebook与ios应用程序集成还有其他问题吗? –

回答

5

在Facebook认证的webapp用户第一次启动本机应用程序的情况下,您不会知道他们是谁。所以他们需要被提示“登录facebook”按钮。当他们点击该按钮时,facebook-ios-sdk会找出登录用户是谁,然后检查该用户是否已经授予您的应用程序访问权限。如果Web应用程序和原生应用程序都指向同一个Facebook应用程序,那么facebook-ios-sdk将仅存储已验证的访问令牌,并且您将可以访问您的Web应用程序在本机应用程序上执行的所有操作。

这里的关键在于您的网络应用程序和原生应用程序必须指向相同的Facebook应用程序(即developers.facebook.com中的相同应用程序ID)。如果没有,则当用户点击“login with facebook”按钮时,本机应用用户将被重新提示授予权限。此外,用户必须登录到网络应用程序(基于浏览器中的Cookie)和手机本身的同一个Facebook帐户。 facebook-ios-sdk使用几种不同的方式在手机上查找活跃的Facebook帐户。它会尝试使用iOS 5+系统的Facebook帐户,跨应用程序调用Facebook自己的本机应用程序,浏览器cookie用于在您的应用程序中运行的Web视图实例,或者将您退出Safari浏览器并在Safari浏览器中使用浏览器cookie。首先回来的人说,他们有一个活跃的Facebook账户需要找到与该网站应用相同的Facebook账户。在大多数情况下,他们会匹配,因为大多数用户只有一个Facebook帐户,并且使用相同的帐户登录到任何地方,但他们当然可以不同。在Facebook应用facebook用户与facebook-ios-sdk检测到的原生应用active facebook用户不一样的情况下,那么“login with facebook”按钮将简单地提示本地应用active facebook用户登录并授予权限。

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

如果您有一个Facebook认证的本地应用用户转到网络应用,您也不会知道(在第一次请求时)该用户是谁。您可以向他们展示facebook js sdk登录,并且,同样的facebook用户登录后,您可以将此当前的Web应用用户与之前在本机应用中的用户相关联。

特别解决您的问题,当您第一次访问应用程序时,您确实无法知道迁移用户是在Web应用程序还是本机应用程序中。这就是“登录facebook”的地方。假设用户在浏览器和手机上登录到同一个账户(由facebook-ios-sdk确定),那么登录到你的应用程序的过程是无缝。他们不会被提示第二次授予权限(除非您的权限设置在Web应用程序和本机应用程序之间不同),并且您将立即获得用户的访问令牌。服务器的角色是通过使用授予的访问令牌来协调这两个用户。通过访问令牌,服务器可以简单地调用图形api并获取用户的Facebook用户标识。使用该Facebook用户ID,您可以匹配应用上用户的“真实”身份(即,您现在知道网络应用用户和本机应用用户是同一个用户)。一旦知道用户是谁,无论他是使用您的网络应用程序还是使用本地应用程序,您都可以根据其身份为该用户提供个性化体验。

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

+1

这是一篇非常长,周到,写得很好的答案。不错的工作! – ekinnear

+0

非常感谢T先生的惊人回答!抱歉,接受它的延迟。陷入了一大堆工作中。再次感谢! – Amit

相关问题