所以我经常搜索这个主题,可能会让事情变得复杂,但是会对它有所了解.所以这就是问题所在.
我有一个使用Facebook Graph的网络应用程序(FB登录,朋友邀请,通过FB共享等).我们刚为网站构建了一个iOS应用程序,现在也希望在iOS应用程序上实现上述所有FB操作.我查看了Facebook文档并试图使用它来获取已经在我们的网站上注册的用户的Facebook登录(并且还连接了他们的Facebook帐户),但它似乎不起作用.
用例 - 用户在Web应用程序上注册并将他们的FB帐户与我们连接.然后他们下载iOS应用程序,并希望使用FB登录登录iOS应用程序或在时间轴上共享对象.反之亦然的情况也应适用.
问题 - 对于上述用例,ios App,Web Server和Facebook之间的工作流程应该是什么?基本上,令牌和秘密如何通过,所以三个人都知道我们在谈论同一个用户和同一个FB帐户?
任何链接或建议将受到高度赞赏!谢谢!
在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的IOS-SDK作为检测到的网络应用程序的Facebook用户是不一样的本机应用活性的Facebook用户,那么"登录facebook"按钮,将简单地提示本机应用活性的Facebook用户登录并授予权限.
一旦访问令牌被授予本机应用程序,您就可以将其发送回服务器,找到相关的Facebook用户ID,现在可以将Web应用程序用户和本机应用程序用户链接为同时操作这两个应用程序的用户.此外,您可以使用您从本机应用程序获得的最新访问令牌代表用户在服务器上进行的任何图形api调用.通过facebook-ios-sdk直接在本机应用程序中进行的任何共享/发布/ api调用都将以此用户身份完成,并由sdk处理(即,您不需要担心它...它应该只是无缝地工作,并将所有帖子集成到他们的时间线,就像网络应用程序的图表apis可以).
如果您有一个facebook authed本机应用程序用户访问Web应用程序,您也不会(在第一次请求时)知道该用户是谁.您可以使用facebook js sdk登录来呈现它们,再次,一旦同一个Facebook用户登录,您可以将此当前Web应用程序用户关联为之前在本机应用程序上的用户.
专门针对您的问题,当您第一次访问应用时,您无法知道迁移用户在Web应用或本机应用上的位置.这就是"登录facebook"的地方.假设用户登录浏览器和手机上的同一帐户(由facebook-ios-sdk确定),那么登录你的应用程序的过程是无缝.系统不会再次提示他们授予权限(除非您的权限在Web应用程序和本机应用程序之间设置不同),并且您将立即获得用户的访问令牌.服务器的作用是使用授予的访问令牌来协调两个用户.使用访问令牌,服务器可以简单地调用图形api并获取用户的Facebook用户ID.使用该Facebook用户ID,您将能够匹配应用程序上用户的"真实"身份(即,您现在知道Web应用程序用户和本机应用程序用户是同一个).一旦您知道该用户是谁,您就可以根据他的身份为该用户提供个性化体验,无论他是使用您的网络应用还是您的原生应用.
希望这可以帮助.很高兴回答您可能有的更多问题.