目标是在我们的iOS应用程序中简化用户登录/注册过程 . 我们有自定义后端和我们自己的登录和注册流程,我们想添加Facebook身份验证 . 这个故事和IN THIS POST所描述的完全相同 . 我们发布自己的访问令牌,我们需要将Facebook发布的访问令牌链接到我们的数据库用户 . 我们完全按照该帖子中描述的方式完成 .

  • 我们使用客户端发布的Facebook访问令牌,

  • 将其传递给服务器,

  • 服务器连接到Facebook图形API并从中获取必要的信息 .

  • 作为响应服务器发送包含用户配置文件信息的JSON对象,显示在客户端 .

我遇到的问题是在获得Facebook访问令牌之前 . 我已经完成的第一个版本是使用 FBSession 来描述HERE来登录用户并获取访问令牌 . 它只显示Facebook登录窗口,用户输入他或她的凭据,要求必要的权限, FBSession 变为活动状态,我可以获得令牌HERE .

从iOS 6开始,用户可以在一个地方登录Facebook,在iOS设置中使用该会话在所有应用程序中发布并从Facebook获取信息,这是他/她需要做的唯一事情,就是批准权限应用程序询问,这样就无需单独登录每个应用程序 . 从用户体验的角度来看,这是一个巨大的进步,我想使用社交框架公开的原生iOS Facebook会话来获取访问令牌并将其传递给我们的后端 . 我认为这很容易,并且程序描述为HERE,这里是引用来获取访问令牌的行

// Get the access token, could be used in other scenarios
    ACAccountCredential *fbCredential = [self.fbAccount credential];            
    NSString *accessToken = [fbCredential oauthToken];

不幸的是这段代码不起作用, [self.fbAccount credential]; 返回 nil . 以下是有关ACAccount的Apple文档的引用

凭证用于对此帐户的用户进行身份验证的凭据 .

@property(nonatomic, retain) ACAccountCredential *credential

讨论 - 此属性是必需的,必须在保存帐户之前进行设置 . 出于隐私原因,保存帐户后无法访问此媒体资源 .

因此,Apple的隐私政策不允许其他人访问存储的访问令牌 .

现在这是死路一条 . 要使用Facebook对我们的服务器进行身份验证,我需要Facebook访问令牌,并且为了改善UX(客户端需要),我需要使用设置菜单中的本机Facebook会话 . 有没有解决这个问题的方法?