跳到主要内容
方的代码随记
返回

Google 重签名引起的 Facebook KeyHash 问题

更新于:

App 上传到 Google Play 后被重新签名,本地签名指纹失效,Facebook 登录会报 Invalid key hash。需要把「商店签名」的 KeyHash 也登记到 Facebook 后台。

方法一:导入商店证书后计算(推荐)

  1. 登录 Google Play Console:应用 → 版本管理 → 应用签名 → 下载应用签名证书 deployment_cert.der;

  2. 生成 Google 的签名文件:

    keytool -import -file deployment_cert.der -keystore deployment_cert.jks
  3. 导出 KeyHash:

    keytool -exportcert -keystore deployment_cert.jks | openssl sha1 -binary | openssl base64
  4. 把结果添加到 Facebook 的「密钥散列」并保存,格式形如 isrFio98zGTcOgP2ASDOadOuMOA=。

方法二:SHA-1 十六进制转 Base64

  1. 从 Play 商店获取 Signed APK 的 SHA-1 指纹;
  2. 用在线工具转成 Base64:https://tomeko.net/online_tools/hex_to_base64.php。

方法三:运行时打印

在 App 内临时执行,从 Logcat 过滤 KeyHash: 即可拿到当前运行环境的签名散列:

private void facebookHashKey() {
    try {
        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));
        }
    } catch (NameNotFoundException e) {
    } catch (NoSuchAlgorithmException e) {
    }
}

提示:调试环境用 androiddebugkey 的 KeyHash,发布环境用商店签名证书的 KeyHash,两个都要登记。


分享这篇文章:

上一篇
兼容 Google Play 的应用签名
下一篇
apktool 反编译与重签名