此函数可以通过使用您传入的参数覆盖默认的 sdk 缓存令牌状态来迁移您现有的令牌状态:
private final void migrateToken(String accessToken, long expiresMilliseconds,
List<String> permissions, boolean isSSO,
long lastRefreshMilliseconds) {
Bundle bundle = new Bundle();
TokenCache.putToken(bundle, accessToken);
TokenCache.putExpirationMilliseconds(bundle, expiresMilliseconds);
TokenCache.putPermissions(bundle, permissions);
TokenCache.putLastRefreshMilliseconds(bundle, lastRefreshMilliseconds);
TokenCache.putIsSSO(bundle, isSSO);
SharedPreferencesTokenCache cache = new SharedPreferencesTokenCache(this);
cache.save(bundle);
}
如果您没有保存权限,您应该只传递您在获得令牌时请求的权限列表,或者如果您没有要求或不知道,则应传递一个空的 ArrayList。
isSSO 参数指定您是使用 Facebook 登录/SSO 与 facebook 应用程序 (true) 还是登录 WebView (false) 获取令牌。通过 Facebook 登录获得的令牌可以扩展,此布尔值控制 SDK 是否应自动尝试扩展令牌。
此函数覆盖由 Session 构造函数读取的状态。所以如果你调用这个函数,你需要在之后构造一个 Session 才能使用它。逻辑可能如下所示:
Session session = Session.openActiveSession(this);
if ((session == null) && hasOldTokenState()) {
migrateToken(...);
session = Session.openActiveSession(this);
}
// if session is still null, user will have to log in...