如何在iOS Facebook SDK 3.1中模拟过期的访问令牌?

时间:2012-09-28 17:44:12

标签: ios facebook

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

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

1 个答案:

答案 0 :(得分:5)

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

关于你的问题:

  1. allowLoginUI必须为YES。如果令牌过期,则用户必须 在获得新令牌并进行设置之前,先与UI进行交互 否则会让它无声地失败。

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

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