Facebook SDK登录密钥哈希不匹配问题解决方案咨询
解决Facebook登录「Invalid key hash」问题的实用方案
我之前也踩过这个一模一样的坑,反复试各种方法却卡壳的烦躁感太懂了!别再对着报错里的哈希挨个加了,试试下面这些针对性的步骤:
第一步:获取100%准确的密钥哈希(核心!)
报错里的哈希有时候会因为缓存或签名差异出现偏差,直接在代码里动态打印当前应用的真实哈希才是最靠谱的:try { PackageInfo info = getPackageManager().getPackageInfo( "com.your.app.package", // 替换成你的应用包名 PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); Log.d("APP_KEY_HASH", Base64.encodeToString(md.digest(), Base64.DEFAULT)); } } catch (PackageManager.NameNotFoundException | NoSuchAlgorithmException e) { e.printStackTrace(); }把这段代码放到启动页的
onCreate方法里,运行后去Logcat找APP_KEY_HASH对应的字符串,把这个值添加到Facebook开发者后台的密钥哈希列表里——这个值和你的应用签名绑定,不管哪台设备,只要用同一个签名打包,哈希就不会变。第二步:排查签名相关的常见错误
很多人栽在签名环节:- 开发环境:别自己随便生成debug密钥库,Android默认的debug密钥库路径是
~/.android/debug.keystore,密码是android,用它生成的哈希才是对的; - 发布环境:打包时一定要确认用的是你生成哈希时的密钥库、别名和密码,别选错了导致签名不匹配;
- Google Play App Bundle发布:Google会重新给应用签名,必须把Google Play的部署证书哈希也加上:
- 登录Google Play控制台 → 你的应用 → 应用签名;
- 下载「部署证书」的PEM文件;
- 用命令生成哈希:
keytool -printcert -file deployment_cert.pem | openssl sha1 -binary | openssl base64,把结果添加到Facebook后台。
- 开发环境:别自己随便生成debug密钥库,Android默认的debug密钥库路径是
第三步:清除缓存的旧数据
手机上的Facebook/Instagram应用会缓存旧的密钥哈希,即使你后台更新了,它还是会用旧值验证:- 卸载并重新安装你的应用;
- 清除手机上Facebook应用的缓存和数据(设置→应用→Facebook→存储→清除缓存/数据);
- 测试账号的话,退出后重新登录一次。
第四步:核对Facebook后台的细节设置
- 确认你添加哈希的是当前正在调试的应用(别加到别的测试应用里了);
- 检查「Facebook登录」产品是否已启用,且「有效的OAuth重定向URI」配置正确(格式一般是
fb{你的AppID}://authorize); - 如果用了测试用户,确保这些用户已经添加到应用的测试用户列表中。
我当初就是漏掉了Google Play部署证书的哈希,折腾了好几天才解决,希望这些步骤能帮你快速搞定!
内容的提问来源于stack exchange,提问作者Cecil Paul
相关产品推荐
相关产品推荐

