我正在构建一个用户可以使用Facebook登录的应用程序。
我已经创建了如下的哈希键:
try {
PackageInfo info = getPackageManager().getPackageInfo(
"com.app.package",
PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.d("KeyHash", "KeyHash:"+ Base64.encodeToString(md.digest(),
Base64.DEFAULT));
Toast.makeText(getApplicationContext(), Base64.encodeToString(md.digest(),
Base64.DEFAULT), Toast.LENGTH_LONG).show();
}
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
在调试模式下,一切运行良好。
当我导出项目以供发布时,它会出现以下错误:
"Invalid key hash. The key hash ****************** does not match any stored key hashes"
我粘贴了Facebook Developer仪表板中打印的密钥,但应用程序仍然给我错误。
我的活动的完整包是“qazxsw poi”,我试图在仪表板中使用此包(作为Google Play包名称),但没有任何改变。
我该如何解决?如何生成正确的发布密钥哈希?
您按照Facebook提供的步骤创建登录应用程序?
您需要从发布密钥库开始获得“生产密钥”:
从命令行:
com.app.package.views
并在Facebook应用页面选项上添加此密钥。
更多信息:keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64
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 (PackageManager.NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
我找到了解决方案。对于MAC
使用这个获得YOUR_RELEASE_KEY_ALIAS:
https://developers.facebook.com/docs/android/getting-started/
这一个得到你的发布密钥哈希:
keytool -list -keystore /Users/***/Documents/keystore/***.jks
这个对我有用。
最简单的解决方案。
1)签署你的Apk。
2)将您的设备连接到计算机并在真实设备上安装已签名的apk。
3)当按下facebook登录时,您将收到一条错误消息“无效的密钥散列。密钥散列”xxx“与您的logcat上的任何存储的密钥....”不匹配。
4)复制logcat Hash Key并将此密钥放到developers.facebook.com/apps/104...../settings/
我们需要用openssl结构中的一个文件的路径替换“openssl”这个词。
所以,My CMD命令是:
keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore /Users/***/Documents/keystore/***.jks | openssl sha1 -binary | openssl base64
有效。
为了将来参考,如果您已在Play商店中拥有自己的应用,则可以:
C:\Program Files\Java\jre1.8.0_45\bin>keytool -exportcert -alias Informatheus -keystore C:\Users\Atendimento\Dropbox\AndroidKeystore\Keystore | C:\Users\Atendimento\Desktop\openssl\bin\openssl sha1 -binary | C:\Users\Atendimento\Desktop\openssl\bin\openssl base64
Release Management
中选择App Signing
Release Management
的SHA1密钥。App signing certificate
执行该操作而不使用十六进制的link部分。SHA1:
中添加密钥(在转换为base 64之后)。//将此方法添加到您的第一个活动并打开日志并搜索Base64标签这是Hashkey我箍它帮助
settings —> basic –> key hashes
Facebook SDK使用两个不同的键,一个是您可以在开发阶段使用的Debug键,另一个是在创建签名的应用程序包后使用的Release键。以下是有关如何创建调试和释放密钥的链接。
public void getHashkey(){
try {
PackageInfo info = getPackageManager().getPackageInfo(getApplicationContext().getPackageName(), PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.i("Base64", Base64.encodeToString(md.digest(),Base64.NO_WRAP));
}
} catch (PackageManager.NameNotFoundException e) {
Log.d("Name not found", e.getMessage(), e);
} catch (NoSuchAlgorithmException e) {
Log.d("Error", e.getMessage(), e);
}
}
还可以查看Developer.Facebook SO帖子。
获取哈希键释放apk的最简单方法是:使用以下命令获取已发布apk的SHA1密钥:
this
你会得到SHA1密钥。复制该密钥并使用以下站点生成哈希密钥:
keytool -list -v -keystore keystore_path.jks -alias keystoreAlias
您将获得输出(base64):复制它并使用您想要的位置..
这是迄今为止我发现生成密钥哈希的最简单方法!
Link to get hash key