Session.isOpened()== true但Session.getAccessToken()==""

the*_*osh 16 android facebook android-facebook

在我的应用程序中,我试图通过将Facebook会话信息(令牌和到期日期)传递给我的服务器来进行身份验证(登录).

我对应用服务器的登录顺序如下:

  1. 获得活跃的facebook会话.
  2. 如果会话有效,请获取令牌并将其发送到服务器.

在代码中:

Session session = Session.getActiveSession();
if(session != null && session.isOpened() && !didLogin) {
    didLogin = true;
    String token = session.getAccessToken();
    Date expires = session.getExpirationDate();
    loginWithFacebookSession(token, expires);
}
Run Code Online (Sandbox Code Playgroud)

我注意到,突然间,经过几个月的工作就好了,发送到服务器的信息有时无效,特别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);
}
Run Code Online (Sandbox Code Playgroud)

这意味着在此过程中的某个地方,Facebook SDK正在创建一个空令牌并将其返回SessionState.Category.OPENED_CATEGORY.

为什么session.isOpened()回来的true时候实际上没有accessToken信息?我应该检查不同的房产吗?这是Facebook的SDK中的错误吗?

编辑:
向Facebook报告: https: //developers.facebook.com/bugs/121924628017965

小智 0

我解决了这个问题。问题出在密钥哈希上。

按照本教程操作

转到步骤号。4 运行示例。

最后您会找到“故障排除”部分,这就是解决方案。

谢谢! https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/