有没有办法从Facebook iOS SDK返回的访问令牌中提取会话密钥?

时间:2011-03-01 06:11:05

标签: objective-c ios facebook facebook-chat x-facebook-platform

我需要在此场景中使用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

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

我对这些事情感到有些困惑。

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

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

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

2 个答案:

答案 0 :(得分:3)

我仍然没有将FBAppAuth-ed或SafariAuth-ed access_token片段转换为session_id的公式。但是,以下描述将有助于在所描述的公式中获得access_token,然后可以很容易地对其进行分段以派生session_id。希望这可以帮助。

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

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


在实现相同的API时,如果我们关闭FBAppAuth和SafariAuth,它将调用登录对话框,返回的access_token将采用APP_ID格式| SESSION_KEY | DIGEST

- (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 


答案 1 :(得分:1)

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

干杯