返回

Android 与 Facebook 集成:如何解决“无效密钥哈希”错误?

Android

Android 与 Facebook 集成:无效密钥哈希错误和解决方案

问题概述

Android 应用在与 Facebook SDK 集成时,经常会遇到“无效密钥哈希”错误。当用户从 Facebook 注销后重新登录时,就会触发这个错误。

解决方法

  1. 验证密钥哈希

    确保应用中使用的密钥哈希与 Facebook 开发者控制台中注册的哈希相匹配。使用以下命令生成密钥哈希:

    keytool -exportcert -alias [KEYSTORE_ALIAS] -keystore [KEYSTORE_PATH] | openssl sha1 -binary | openssl base64
    
  2. 清理设备

    • 卸载 Facebook 应用(如果已安装)。
    • 清除 Android 应用管理器中 Facebook SDK 应用的数据和缓存。
    • 重启设备。
  3. 强制重新授权

    使用以下代码强制 Facebook SDK 重新授权:

    LoginManager.getInstance().logOut();
    LoginManager.getInstance().logInWithReadPermissions(this, Collections.singletonList("public_profile"));
    
  4. 检查代码

    确保应用正确使用 Facebook SDK,包括以下步骤:

    • 初始化 Facebook SDK。
    • 使用有效的 Facebook 应用 ID。
    • 正确处理登录、注销和流媒体请求。
  5. 考虑其他因素

    • 确保设备已连接到稳定网络。
    • 使用不同的设备或模拟器进行测试。
    • 检查 Facebook 开发者控制台中是否有任何相关错误或警告。

代码示例

// 初始化 Facebook SDK
FacebookSdk.sdkInitialize(this);
AppEventsLogger.activateApp(this);

// 设置 Facebook 应用程序 ID
LoginManager.getInstance().setLoginBehavior(LoginBehavior.WEB_ONLY);
CallbackManager callbackManager = CallbackManager.Factory.create();

// 处理登录请求
LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
    @Override
    public void onSuccess(LoginResult loginResult) {
        // 登录成功
    }

    @Override
    public void onCancel() {
        // 取消登录
    }

    @Override
    public void onError(FacebookException error) {
        // 登录失败
    }
});

常见问题解答

1. 如何生成新的密钥哈希?

使用上面提供的 keytool 命令或 Android Studio 的密钥工具生成一个新哈希。

2. 如何更新 Facebook 开发者控制台中的密钥哈希?

转到 Facebook 开发者控制台的“基本设置”选项卡,在“密钥哈希”部分粘贴更新的哈希。

3. 为什么强制重新授权很重要?

强制重新授权可确保使用最新的密钥哈希,防止无效密钥哈希错误。

4. 如何避免将来出现这个问题?

始终保持应用密钥哈希与 Facebook 开发者控制台中注册的哈希相匹配。

5. 如果以上步骤都无法解决问题怎么办?

请联系 Facebook 支持团队或在社区论坛上寻求帮助。