【问题标题】:Problems with extending Facebook access token on iOS after the offline_access permission was depreciated折旧offline_access权限后在iOS上扩展Facebook访问令牌的问题
【发布时间】:2012-06-21 18:18:57
【问题描述】:

我正试图弄清楚我的 iOS 应用在 Facebook 制作后应该如何工作 offline_access 权限已弃用。 Docs 不清楚,我读了 他们都几次。

我想做的是:

  1. 我使用 FB 授权我的 iOS 应用程序:

    [_facebook authorize: [NSArray arrayWithObjects: @"email", @"publish_stream", @"user_birthday", nil]];

  2. 然后,我从图形 API 请求 "me" 以获取我需要的 FB ID 它:

    [_facebook requestWithGraphPath: @"me" andDelegate:self];

  3. 然后在:

    -(void)request: (FBRequest*)request didLoad: (id)result

我检查令牌的到期日期

if ([_facebook.expirationDate timeIntervalSinceNow] < 60*60*24) // 1 day 
{ 
   [self extendAccessTokenWithAppID:kFacebookAppID 
                          appSecret:kFacebookAppSecret     
                      existingToken:_facebook.accessToken]; 
}

我扩展令牌的方法只是联系端点,即 我在开头提到的文档中描述了。

-(void)extendAccessTokenWithAppID:(NSString*)appID appSecret:(NSString*)appSecret existingToken:(NSString*)existingToken 
{
      NSString *requestString = [NSString stringWithFormat:@"oauth/access_token?client_id=%@&client_secret=%@&grant_type=fb_exchange_token&fb_exchange_token=%@", appID, appSecret, existingToken];

      [_facebook requestWithGraphPath: requestString andDelegate: self]; 
}

我在

中处理响应
- (void)request: (FBRequest*)request didLoad: (id)result 

但我得到的始终是我传递给端点的相同令牌和相同的到期日期。有效期从不延长,只有短短的1-2小时(短暂的正常 访问令牌)。这意味着令牌没有被扩展。

我已将删除offline_access 权限设置为禁用

你知道我的方法有什么问题吗?感谢您的帮助!

附言 我在 StackOverflow 上发现了类似的问题,但没有一个答案对我有用,例如 Access Token expire time with offline_access permission

更新:

启用 删除 offline_access 权限 使 FB 只返回长期存在的令牌。我通过创建一个新的 FB 帐户并在我的应用程序中使用此帐户登录来对此进行了测试。我立即得到了万岁令牌。

使用 Remove offline_access 权限 禁用 FB 只给我短期访问令牌,即使我尝试使用文档中提供的端点扩展短期令牌。端点返回具有相同到期日期的相同令牌。

关键问题是当 FB 给我短期访问令牌并且我联系端点以将其扩展为长期访问令牌时,我无法测试该场景。似乎 FB 开发者还没有为他们想要引入的功能做好准备。

【问题讨论】:

  • “我已将 Remove offline_access 权限设置为已禁用。” – 您想启用它。
  • 我看到了,在启用它后,应用程序立即获得了长期存在的令牌。问题是当用户获得短暂的令牌然后我通过联系端点来扩展它时,我无法测试正常路径。你知道我怎样才能做到这一点吗?

标签: iphone objective-c ios facebook-ios-sdk


【解决方案1】:

在此检查可能导致您出现问题的事项

  1. 您已在应用的高级设置中禁用了offline_access
  2. 您使用的是最新的 SDK 副本。它目前未版本化,但旧版本不支持访问令牌扩展
  3. 您已根据instructions in the docs 配置了 SSO
  4. 您一直等到用户的令牌完全过期 - 因为您正在重试,您可能会获得“新的”短令牌,但是一旦令牌完全过期,您应该在下次用户回来时获得更长的令牌

【讨论】:

  • 感谢您的回答!我现在有点困惑。我将“删除offline_access 权限”迁移设置为启用,并且我的应用程序立即获得了长期访问令牌而不给它短期令牌?应该启用还是禁用此迁移?因为对我来说,阅读文档后还不清楚。干杯! :)
  • 它的措辞很奇怪,但是“启用”“删除离线访问权限”是您的应用程序为新的“短/长”令牌模型做好准备的标志
  • 好的,现在我明白了。但是我如何测试它以查看我的令牌扩展代码是否有效?现在,FB 给了我一个长寿命的访问令牌,而不是给我一个短寿命的令牌(所以我可以扩展它)。谢谢!
  • 你必须等待一段时间才能看到它真正发生,但应该可以在用户下次回来时延长,假设他们仍然登录到 Facebook
  • 我创建了一个新的 FB 帐户来测试我是否获得了短暂的令牌,但它没有发生。 FB 给了我 60 天的令牌 - 这意味着我无法测试扩展令牌是否真的有效。我只希望当 FB 开始从端点返回扩展令牌时我的应用程序能够工作......嗯:/。无论如何,非常感谢@Igy 的帮助!澄清了很多!
猜你喜欢
  • 1970-01-01
  • 2012-06-10
  • 2012-03-30
  • 2012-02-29
  • 2012-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多