Facebook iOS SDK extendAccessToken无法正常工作 - 未调用fbDidExtendToken

Her*_*ber 1 facebook ios facebook-login facebook-ios-sdk facebook-access-token

一旦用户的Facebook访问令牌因任何原因(从Facebook网站删除应用程序或从Facebook设置中删除应用程序的访问权限)无效,我无论如何都无法获得新的令牌!

到目前为止,我已经尝试了两种方法:(sharedFaceBookManager是一个管理Facebook的Singleton)

1) [sharedFaceBookManager.facebook extendAccessToken];

这是第一次发生"失效",应用程序将打开FB的应用程序并提示用户所需的任何内容并返回App安全和声音......第二次访问令牌无效,extendAccessToken将挂起在那里,用户将无法再通过Facebook登录.Not a good Solution.

2)尝试删除Cookie,断开Facebook连接并重新连接!

for(NSHTTPCookie *cookie in [[NSHTTPCookieStorage sharedHTTPCookieStorage] cookies]) {

    if([[cookie domain] isEqualToString:@"facebook"]) {

        [[NSHTTPCookieStorage sharedHTTPCookieStorage] deleteCookie:cookie];
    }
}

// Reconnecting:
NSArray *permissions = [NSArray arrayWithObjects:@"email", @"read_friendlists", @"user_photos", @"user_events", nil];
[FBSession openActiveSessionWithReadPermissions:permissions
                                   allowLoginUI:YES
                              completionHandler:
 ^(FBSession *session,
   FBSessionState state, NSError *error) {
     [[EWFacebookManager sharedFaceBookManager] sessionStateChanged:session state:state error:error];
 }];
Run Code Online (Sandbox Code Playgroud)

这只返回一个Call to - (void)sessionStateChanged: with:FBSessionStateOpen和Apps Deals with this,就像登录成功一样,结果:ENDLESS LOOP(登录成功 - 登录失败) NOT A GOOD SOLUTION!

我知道当令牌无效时我不应该调用extendAccessToken,我应该提示用户再次登录

ANYBODY?请?我们甚至转向一家外包公司来帮助我们解决这个问题,而且没有任何突破!

Her*_*ber 5

解决了!!!

因此,结论:您无法扩展无效的Facebook访问令牌.相反,您应该清理您的AccessToken并通过您的FBSession续订您的Facebook凭据.

  • 首先,我断开与Facebook的联系并清理我的令牌数据.
  • 然后我为FBSession更新我的凭据
  • 最后,我尝试通过打开一个新的活动会话来重新连接.

这是我的代码("无效的fb令牌"将调用"renewFacebookCredentials",然后"facebookReconnect"将被执行):

- (void)facebookReconnect
{
    NSArray *permissions = [NSArray arrayWithObjects:@"email", @"read_friendlists", @"user_photos", @"user_events", nil];
    [FBSession openActiveSessionWithReadPermissions:permissions
                                       allowLoginUI:YES
                                  completionHandler:
     ^(FBSession *session,
       FBSessionState state, NSError *error) {
         [[EWFacebookManager sharedFaceBookManager] sessionStateChanged:session state:state error:error];
     }];

}

+ (void)renewFacebookCredentials
{
    [FBSession.activeSession closeAndClearTokenInformation];
    [FBSession renewSystemCredentials:^(ACAccountCredentialRenewResult result,
                                        NSError *error)
     {
         [[EWFacebookManager sharedFaceBookManager] facebookReconnect]; 
     }];
}
Run Code Online (Sandbox Code Playgroud)

我希望这可以帮助一些失去的灵魂并防止对新的Facebook iOS SDK和他们的"弱"文档更多的仇恨;-)

埃尔南