2

在 Facebook弃用了offline_access权限后,我试图弄清楚我的 iOS 应用程序应该如何工作。文档不清楚,我读了几遍。

我想做的是:

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

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

  2. 然后,我请求"me"from graph API 以获取 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 小时(对于短期访问令牌来说是正常的)。这意味着令牌没有被扩展。

我已将Remove offline_access 权限设置为Disabled

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

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

更新:

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

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

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

4

1 回答 1

1

要检查的事情可能会导致您出现问题

  1. 您已在应用的高级设置中禁用了 offline_access
  2. 您使用的是最新的 SDK 副本。它目前未版本化,但旧版本不支持访问令牌扩展
  3. 您已按照文档中的说明配置 SSO
  4. 您一直等到用户的令牌完全过期 - 您可能会获得“新”短令牌,因为您正在重试,但是一旦令牌完全过期,您应该在下次用户回来时获得更长的令牌
于 2012-06-21T09:26:04.440 回答