2

我需要在这个场景中使用 Facebook 会话密钥:http: //developers.facebook.com/docs/chat/#platauth

但是,当前的Facebook iOS SDK向我们返回了一个访问令牌,这对于这种情况是不够的。我挖了很多,在这里发现了这个问题:

http://www.quora.com/Do-the-OAuth2-access-tokens-in-the-new-Facebook-Graph-API-expire

但它描述的格式与我们得到的访问令牌没有相似之处。

我对这些事情有点困惑。

顺便说一句,我检查了一个针对旧版 Facebook SDK的旧版 iPhone进行测试,因为这个旧版 SDK 直接提供会话密钥,但是这个 SDK 现在在成功登录后总是显示来自 Facebook 的错误页面。似乎此 SDK 已完全弃用?

为了明确这个问题,这是我从Facebook iOS SDK获得的访问令牌(嵌入在 URL 中) :

fb193174047373858://authorize/#access_token=IwDbeiWINrotP3JOd1EGoEY7OmOBd2DyV8lh73mutCM.eyJpdiI6IkdKd3BvWlItcWlWRzIwTGYtUkRUVWcifQ.J6qNtSibMmm0yFe2QNHG46jnIUXef3dV-NnbYqXkfrFABjPrgMPQRUeKHJ3GxX1T3nlU7-4P8FUT6dlfwSwHfNJrheTUZIXdd3AlsSRUiUer5xEdFA9IsGEMn6GyHheH9DSr76IeZcBjl-_s4ub3kg&expires_in=0
4

2 回答 2

3

我仍然没有将 FBAppAuth-ed 或 SafariAuth-ed access_token 片段转换为 session_id 的公式。但是,以下描述将有助于在所描述的公式中获取 access_token,然后可以轻松地将其分段以导出 session_id。希望这可以帮助。

在 iOS SDK 版本 2 中,登录由 Facebook 类中的以下 API 处理:

- (void)authorize:(NSArray *)permissions delegate:(id<FBSessionDelegate>)delegate;


在同一个 API 的实现中,如果我们关闭 FBAppAuth 和 SafariAuth,则会调用登录对话框,返回的 access_token 格式为 APP_ID | 会话密钥 | 消化

- (void)authorize:(NSArray *)permissions delegate:(id<FBSessionDelegate>)delegate 
{
  [_permissions release];
  _permissions = [permissions retain];
  _sessionDelegate = delegate;
    //[self authorizeWithFBAppAuth:YES safariAuth:YES];
  [self authorizeWithFBAppAuth:NO safariAuth:NO]; // Turned off FBApp and Safari auth
}


返回的 access_token 可以在 Facebook 类中的以下回调方法中捕获(请放置一个 NSLog 打印令牌):

- (void)fbDialogLogin:(NSString *)token expirationDate:(NSDate *)expirationDate 


于 2011-03-01T16:08:39.547 回答
1

当前 FB 访问令牌具有以下格式(“|”是分隔符):|| 例如,对于这样的 access_token:146012674543599|de29194522ad43g16ec2ca9b-612345672|kK5HvfSTbJx-x21rMsTyttifij0 会话密钥为:de29194522ad43g16ec2ca9b-612345672

干杯

于 2011-03-01T07:32:46.820 回答