App 上传到 Google Play 后被重新签名,本地签名指纹失效,Facebook 登录会报 Invalid key hash。需要把「商店签名」的 KeyHash 也登记到 Facebook 后台。
方法一:导入商店证书后计算(推荐)
-
登录 Google Play Console:应用 → 版本管理 → 应用签名 → 下载应用签名证书
deployment_cert.der; -
生成 Google 的签名文件:
keytool -import -file deployment_cert.der -keystore deployment_cert.jks -
导出 KeyHash:
keytool -exportcert -keystore deployment_cert.jks | openssl sha1 -binary | openssl base64 -
把结果添加到 Facebook 的「密钥散列」并保存,格式形如
isrFio98zGTcOgP2ASDOadOuMOA=。
方法二:SHA-1 十六进制转 Base64
- 从 Play 商店获取 Signed APK 的 SHA-1 指纹;
- 用在线工具转成 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,两个都要登记。