总是在 facebook android sdk3.0 中获取会话状态:CLOSED_LOGIN_FAILED,token:{AccessToken token:ACCESS_TOKEN_REMOVED。即使当我运行 facebook sdk 给出的示例时,它也会进行身份验证而不是将其重定向到下一个流程。它会显示上一页本身。
12 回答
出于某种原因,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));
}
确保将“your_package_name>”替换为相应的包名称。查看 logcat 并获取 keyhash 并将其输入到您的 facebook 应用程序设置中。
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 开发人员资料中。
我有同样的错误,我忘记了启动活动的 onActivityResult 中的以下行:
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
这是整个方法:
@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;
}
}
我有一个类似的问题 - 我正在接受CLOSED_LOGIN_FAILED
并且com.facebook.FacebookOperationCanceledException: User canceled operation
我绝对没有取消操作。
在对我的应用程序代码的每一行进行了 7 到 8 个小时的尝试之后,我注意到这是在我的清单中的活动中设置的。删除它解决了它。
android:launchMode="singleInstance"
如果您在沙盒模式下使用 Facebook 应用程序,请确保您使用的帐户在授权管理员或开发人员列表中。
尝试从您的设备上卸载您的 Facebook 应用程序,然后重新安装。
我遇到了同样的问题,但解决方案是我必须进入 facebook (developper.facebook) 并在我的应用程序设置中添加如果使用的密钥并添加包名称如果它不能帮助您尝试访问此链接对于其他解决方案:“ Android Facebook SDK 3.0 在登录时给出“remote_app_id 与存储的 id 不匹配”
另一种解决方法是禁止 sso 登录方法。这可以这样做:
LoginButton authButton = (LoginButton) view.findViewById(R.id.authButton);
authButton.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);
我们遇到了同样的问题,并且在很长一段时间内都在寻找和搜索。我检查了哈希键、清单文件和许多其他东西来解决这个问题。我们正在使用较旧的 3.23.1 版本的 facebook sdk,我们的应用程序无法连接到 facebook,仅适用于某些手机。它返回“CLOSED_LOGIN_FAILED”状态,并通过 logcat 报告“无法使用空调用包调用 LoginActivity。如果调用者的 launchMode 为 singleInstance,则可能发生这种情况”。
在某些手机上,例如来自 Fairphone 的手机,添加了一项新功能: https ://fairphone.zendesk.com/hc/en-us/articles/207164396-What-is-the-Privacy-Impact-feature-
此功能避免了在某些特殊情况下与 facebook 的可靠通信。取消勾选后,重新启动您的应用并接受权限,我们的应用的行为与预期相同。
希望这有助于避免我在修复它时得到的白发。
就我而言,Facebook 应用程序 ID 错误,并且密钥哈希也未添加到 facebook 上的应用程序
奇怪的是,它曾经在可调试的非签名版本上运行良好!!
我也从 SessionLoginSample 得到了这个错误几个小时。我在 developer.facebook.com 上创建了一个明确的应用程序 SessionLoginSample 后,它就起作用了。我将应用程序 ID 复制到 Android 清单等中,并且它有效。换句话说,Facebook 的入门指南中描述的示例应用程序配置失败。