gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 23:35:57 25 4
gpt4 key购买 nike

在我的应用程序中,我尝试通过将 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com