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

标签 android facebook android-facebook

在我的应用程序中,我尝试通过将 Facebook session 信息( token 和到期日期)传递到我的服务器来进行身份验证(登录)。

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

  1. 获取活跃的 Facebook session 。
  2. 如果 session 有效,则获取 token 并将其发送到服务器。

在代码中:

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 正在创建一个空 token 并使用 SessionState.Category.OPENED_CATEGORY 返回它。

为什么 session.isOpened() 返回 true 而实际上没有 accessToken 信息?我应该检查不同的属性(property)吗?这是 Facebook 的 SDK 中的错误吗?

编辑:
将此报告给 Facebook:https://developers.facebook.com/bugs/121924628017965

最佳答案

使用此方法并检查您的哈希是否正确

public void getHashKeyForFacebook(Activity activity, String packageName){
    try{
        PackageInfo info = activity.getPackageManager().getPackageInfo(packageName,  PackageManager.GET_SIGNATURES);

        for (Signature signature : info.signatures){
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }
    } catch (Exception ex){

    }
}

关于android - Session.isOpened() == true 但 Session.getAccessToken() == "",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17141955/

相关文章:

android - Facebook android sdk 依赖冲突

android - 关于 "DONT_DELETE_DATA"的一些问题,它是如何工作的,以及应用程序如何使用它

android - 如何检查 Canvas 函数是否支持给定设备上的硬件加速?

php - 将 Facebook 检测为推荐人?

android - 应用程序配置错误对不起,myapp未获批准在App Center中显示。在android app share中

Android:Facebook 获取 "User Access Token",成功登录

java - 使用打洞通过 TCP 套接字在 android 中通信时出现连接拒绝错误

android - 如何保存 ListView 的滚动位置

android - 验证访问 token : The user has not authorized application. Facebook SDK 4 时出错

javascript - Facebook 分享的帖子显示单词 "object"如何删除该单词