始终获取会话状态:CLOSED_LOGIN_FAILED,令牌:{AccessToken令牌:facebook android sdk3.0中的ACCESS_TOKEN_REMOVED.即使我运行facebook sdk给出的示例进行身份验证,而不是将其重定向到下一个flow.it显示上一页本身.
Kar*_*ela 51
出于某种原因,keytool为我生成的哈希与我的应用程序不同.这对我有用.使用facebook提供的标准代码生成哈希:
PackageInfo info = getPackageManager().getPackageInfo("<your_package_name>", 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));
}
Run Code Online (Sandbox Code Playgroud)
确保将"your_package_name>"替换为相应的包名称.查看logcat并抓住keyhash并在facebook app设置中输入.
ACCESS_TOKEN_REMOVED与问题无关.这只是Facebook SDK没有记录访问令牌.所以你可以放心地忽略那部分错误.
有两件事可能是CLOSED_LOGIN_FAILED的原因:
您在Facebook本机应用程序中输入了错误的凭据.
在developers.facebook.com上的应用设置中输入的Android密钥哈希与APK的密钥哈希不匹配.
排除故障#1打开Facebook本机应用程序并确保您已正确登录并可以访问内容.如果您在Facebook本机应用程序中输入了不正确的凭据(可能您最近更改了密码),那么Facebook SDK将反复尝试使用本机应用程序执行SSO并报告CLOSED_LOGIN_FAILED.
排除#2故障只需按照此页面上的"创建Facebook应用程序"下的说明操作,https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/.
随Facebook SDK提供的示例将失败,因为示例应用程序的应用程序配置将不会注册您的调试密钥哈希.有关如何在同一链接中的"运行示例"下修复此问题的说明.这是一个引用:
简而言之,您将创建的每个Android应用都将被签名,您需要使用Facebook注册每个应用的密钥哈希作为真实性的安全检查 - 我们稍后会看到.但是为了绕过SDK样本的检查并快速启动和运行,您可以将密钥哈希添加到您的全球Facebook Developer配置文件中.
我有同样的错误,我忘记了起始活动的onActivityResult中的以下行:
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
Run Code Online (Sandbox Code Playgroud)
这是整个方法:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case RESULT_CODE_IMPORT_FACEBOOK:
//do stuff
break;
default:
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
break;
}
}
Run Code Online (Sandbox Code Playgroud)
我有一个类似的问题 - 我正在接受CLOSED_LOGIN_FAILED,com.facebook.FacebookOperationCanceledException: User canceled operation我肯定没有取消该操作.
经过我的应用程序代码的每一行7-8小时的玩弄后,我注意到这是我的清单中的活动设置的.删除它解决了它.
android:launchMode="singleInstance"
Run Code Online (Sandbox Code Playgroud)