2

我正在使用 Facebook iOS SDK 3.1。

来自 FB文档

从我们的移动 SDK(Android 和 iOS)、桌面应用程序和服务器端登录流程创建的应用程序会自动获得长期有效的用户访问令牌。每次用户触发身份验证流程时,这个长期存在的令牌都会刷新和扩展。

该令牌的有效期为 60 天。

我有当前的实现:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions
{

  if (![FBSession activeSession].isOpen) {
    if ([FBSession activeSession].state == FBSessionStateCreatedTokenLoaded) {
      [[FBSession activeSession] openWithCompletionHandler:^(FBSession *session,
                                                               FBSessionState status,
                                                               NSError *error) {}];
    }
   }
}

,但这只会在应用程序第一次启动或被杀死后触发。

这里有几个问题:

  1. 当应用程序正在使用但 60 天内没有进行任何 FB 调用时,扩展令牌的正确步骤应该是什么。

  2. 假设应用程序正在运行或进入后台模式,并且用户没有使用任何 FB 功能,例如分享/注销/登录,令牌会自动更新吗?

  3. 通过 SDK 访问 FB 调用时,token 是否会自动更新并在 FBSession 中可用?

4

1 回答 1

4

澄清一下,使用 Facebook SDK 3.1,访问令牌会在后台、进行 API 调用时或在身份验证流程期间刷新。从上次刷新时间起大约一天后会发生刷新。

  1. 如果在这段时间内没有进行任何 FB 调用,并且令牌过期,您应该重新授权用户。这可能意味着它们是通过重新验证流程进行的。因此,当他们进行与 FB 相关的调用并且由于令牌过期而失败时,您应该重新验证(另请参阅https://developers.facebook.com/docs/reference/api/errors/)。无论如何,您都应该将其构建到您的应用程序中,因为令牌过期或失效的方式可能不同。
  2. 不,它在 API 调用时被刷新(参见对 1 的回答)。
  3. 是的,在最后一次刷新后的一段时间后。
于 2012-12-21T18:14:17.877 回答