在 Facebook弃用了offline_access权限后,我试图弄清楚我的 iOS 应用程序应该如何工作。文档不清楚,我读了几遍。
我想做的是:
我使用 FB 授权我的 iOS 应用程序:
[_facebook authorize: [NSArray arrayWithObjects: @"email", @"publish_stream", @"user_birthday", nil]];
然后,我请求
"me"
from graph API 以获取 FB ID,因为我需要它:[_facebook requestWithGraphPath: @"me" andDelegate:self];
然后在:
-(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 开发人员还没有为他们想要引入的功能做好准备。