在我的应用程序中,我试图通过将 Facebook 会话信息(令牌和到期日期)传递到我的服务器来进行身份验证(登录)。
我到应用服务器的登录顺序如下:
- 获取活跃的 facebook 会话。
- 如果会话有效,则获取令牌并将其发送到服务器。
在代码中:
Session session = Session.getActiveSession();
if(session != null && session.isOpened() && !didLogin) {
didLogin = true;
String token = session.getAccessToken();
Date expires = session.getExpirationDate();
loginWithFacebookSession(token, expires);
}
我突然注意到,经过几个月的正常工作后,发送到服务器的信息偶尔无效,特别token
是空字符串和expires
无效日期。
在浏览了 Facebook SDK(版本 3.0.1)之后,我发现了可能是我的错误的基础:
private static final Date MIN_DATE = new Date(Long.MIN_VALUE);
private static final Date ALREADY_EXPIRED_EXPIRATION_TIME = MIN_DATE;
private static final Date DEFAULT_LAST_REFRESH_TIME = new Date();
static AccessToken createEmptyToken(List<String> permissions) {
return new AccessToken("", ALREADY_EXPIRED_EXPIRATION_TIME, permissions, AccessTokenSource.NONE,
DEFAULT_LAST_REFRESH_TIME);
}
这意味着在此过程中,Facebook SDK 正在创建一个空令牌并使用SessionState.Category.OPENED_CATEGORY
.
实际上没有信息时为什么要session.isOpened()
返回?我应该检查不同的财产吗?这是 Facebook 的 SDK 中的错误吗?true
accessToken
编辑:
向 Facebook 报告: https ://developers.facebook.com/bugs/121924628017965