如果 facebook authed webapp 用户首次启动本机应用程序,您将不知道他们是谁。因此需要使用“使用 facebook 登录”按钮来提示他们。当他们点击该按钮时,facebook-ios-sdk 将确定登录用户是谁,然后检查该用户是否已授予您的应用程序访问权限。如果 web 应用程序和本机应用程序都指向同一个 facebook 应用程序,那么 facebook-ios-sdk 将简单地存储经过身份验证的访问令牌,并且您将可以访问您的 web 应用程序在本机应用程序上所做的一切。
这里的关键是您的网络应用程序和本机应用程序必须指向同一个 Facebook 应用程序(即,developers.facebook.com 中的相同应用程序 ID)。如果没有,则当本地应用程序用户单击“使用 facebook 登录”按钮时,将再次提示他们授予权限。此外,用户在网络应用程序(基于浏览器中的 cookie)和手机本身上登录到同一个 Facebook 帐户也很重要。facebook-ios-sdk 使用几种不同的方式在手机上查找活动的 facebook 帐户。它会尝试 iOS 5+ 系统 facebook 帐户、对 facebook 自己的本机应用程序的应用程序间调用、在您的应用程序中运行的 web 视图实例的浏览器 cookie,或者将您退回到 safari 并在 safari 中使用浏览器 cookie。哪一个人首先回来说他们有一个活跃的 facebook 帐户需要找到与 web 应用程序上的相同的 facebook 帐户。在大多数情况下,它们会匹配,因为大多数用户只有一个 Facebook 帐户,并且在任何地方都使用相同的帐户登录,但它们当然可以不同。如果 web 应用程序 facebook 用户与 facebook-ios-sdk 检测到的本机应用程序活动 facebook 用户不同,则“使用 facebook 登录”按钮将简单地提示本机应用程序活动 facebook 用户登录并授予权限。
一旦访问令牌被授予本机应用程序,您可以将其发送回服务器,找到关联的 facebook 用户 ID,现在 Web 应用程序用户和本机应用程序用户可以链接为操作这两个应用程序的同一个人. 此外,您想在服务器上进行的任何图形 api 调用都可以使用您刚刚从本机应用程序获得的最新访问令牌代表用户进行。通过 facebook-ios-sdk 直接在本机应用程序中进行的任何共享/发布/api 调用都将作为该用户完成,并将由 sdk 处理(即,您无需担心......它应该就像网络应用程序的图形 API 一样,无缝地工作并将所有帖子集成到他们的时间线中)。
如果您有一个 facebook authed 本机应用程序用户访问网络应用程序,您也不会(在第一次请求时)知道该用户是谁。您可以向他们展示一个 facebook js sdk 登录名,并且再次,一旦同一个 facebook 用户登录,您可以将这个当前的 Web 应用程序用户与之前在本机应用程序上的用户相关联。
专门解决您的问题,当迁移用户第一次访问应用程序时,您真的无法知道他们在 Web 应用程序或本机应用程序上是谁。这就是“使用 facebook 登录”的用武之地。假设用户在浏览器和手机上登录到同一个帐户(由 facebook-ios-sdk 确定),那么登录到您的应用程序的过程是无缝的。他们不会被提示第二次授予权限(除非您的权限设置在 Web 应用程序和本机应用程序之间不同),并且您将立即获得用户的访问令牌。服务器的作用是通过使用授予的访问令牌来协调两个用户。使用访问令牌,服务器可以对图形 api 进行简单调用并获取用户的 facebook 用户 ID。使用该 facebook 用户 ID,您将能够在您的应用程序上匹配用户的“真实”身份(即,您现在知道 Web 应用程序用户和本机应用程序用户是同一个)。一旦您知道用户是谁,您就可以根据他的身份为该用户提供个性化的体验,无论他使用的是您的网络应用程序还是您的本机应用程序。
希望这可以帮助。很高兴回答您可能遇到的更多问题。