在offline_access权限被折旧后,在iOS上扩展Facebook访问令牌的问题

时间:2012-06-21 09:15:06

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

我正试图弄清楚我的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

  4. 我检查令牌的到期日期

    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权限设置为已禁用

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

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

    更新

    启用删除offline_access权限会使FB仅返回长期令牌。我通过创建一个新的FB帐户并在我的应用程序中使用此帐户进行日志记录来测试。我马上得到了长寿命令。

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

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

1 个答案:

答案 0 :(得分:1)

要检查哪些内容可能会导致您遇到问题

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