11

我想测试 Facebook 用户的访问令牌已过期并且我需要更新令牌的代码路径。我注意到访问令牌在创建 2 个月后过期。我不想等待 2 个月来测试该代码路径,所以我想要一种模拟这种到期的方法。如果我从未针对以下谜题测试这种情况,我担心我的代码会崩溃:

  1. 目前在应用程序启动时,我打电话[FBSession openActiveSessionWithReadPermissions:permArray allowLoginUI:NO completionHandler:someFunction]以静默方式重新连接过去已经连接的 Facebook 用户。注意 allowLoginUI 是如何的。是否必须为 YES 才能允许用户重新登录并更新令牌,还是可以静默更新令牌?
  2. 每次会话状态更改时都会触发任何 openActiveSession* 调用的完成处理程序。两个值得注意的状态是FBSessionStateOpenFBSessionStateOpenTokenExtended。当令牌变为扩展时,状态机是保持令牌扩展状态,还是会进入扩展状态,然后立即进入打开状态?我需要知道状态转换,所以我不会运行我的处理程序两次。
  3. [FBSession activeSession].accessToken变成 nil 还是保留为旧的过期令牌?
  4. 类似的[FBSession activeSession].expirationDate:它是零,旧的到期日期,还是自动成为新的到期日期?
4

1 回答 1

5

要使令牌过期,最简单的方法是在您的计算机上登录 FB,进入应用中心,单击“我的应用”,然后通过单击应用旁边的小 X 来删除您的应用。这将导致令牌“过期”。一旦发生这种情况,您将无法在没有用户交互的情况下自动更新令牌。您必须重新打开身份验证 UI,并且用户必须单击“允许”

关于您的问题:

  1. allowLoginUI 必须为 YES。如果令牌过期,用户必须先与 UI 交互,然后才能获得新令牌,并将其设置为 NO 将使其静默失败。

  2. 我相信 TokenExtended 状态只会在扩展当前活动的令牌时发生。如果用户在 2 个月期限结束之前使用您的应用程序,FB SDK 将定期自动为您扩展令牌。但是,这与更新过期令牌不同。不过,这不是 100% 确定的,因为我还没有测试过这个状态。

  3. 如果您的令牌过期,当您下次启动应用程序时,您应该在您的 AppDelegate 方法之一 (didFinishLaunching) 中调用 openActiveSession,这将触发状态为 Closed 或 LoginFailed 的完成处理程序。此时,您应该调用 [FBSession.activeSession closeAndClearTokenInformation]; 根据他们的教程,取消您的访问令牌。
  4. 与#3 相同
于 2012-09-28T18:11:20.610 回答