Facebook android app error : Invalid key hash
Facebook android app error : Invalid key hash
我已将 Facebook SDK 导入到我的 android 项目中,第一次从我的 android 应用程序登录 Facebook 时它工作正常,但第二次出现此错误:
Invalid key hash. The key hash "..." does not match any stored key
hashes. Configure your app key hashes at
http://developers.facebook.com/apps/..
我也尝试输入他们在此错误中提供的密钥,但没有成功。
编辑:
我使用了它生成密钥的 cmd 命令并要求输入密码 "android"
添加您的应用程序中提供的密钥
http://developers.facebook.com/apps/
此外,在最后添加"="
符号
例如。你得到 2jmj7l5rSw0yVb/vlWAYkK/Y
比在 Facebook 页面上,
添加 2jmj7l5rSw0yVb/vlWAYkK/Y=
最后一个 "="
标志很重要。
我花了一个小时生成密钥哈希,然后尝试了这个技巧。
Keyhashes 与从不同系统生成的 .apk 文件不同。所以最好的解决方案是 - 当你得到错误
"Invalid key hash. The key hash "<KEYHASH>"
does not match any..."
然后写入或复制 "<KEYHASH>"
,然后转到 apps-> settings-> android
将其放入 Facebook 开发者页面。如果不起作用,则将 "="
放在您从错误中复制的 keyhash 之后,然后重试。并且不要忘记实施您的项目。
据我所知,您已经获得了密钥哈希,但我仍然会在此处放置用于在控制台中获取它的代码。
PackageInfo info;
try {
info = getPackageManager().getPackageInfo("com.your.project.package", PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md;
md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String something = new String(Base64.encode(md.digest(), 0));
//String something = new String(Base64.encodeBytes(md.digest()));
Log.e("hash key", something);
}
} catch (PackageManager.NameNotFoundException e1) {
Log.e("name not found", e1.toString());
} catch (NoSuchAlgorithmException e) {
Log.e("no such an algorithm", e.toString());
} catch (Exception e) {
Log.e("exception", e.toString());
}
其中"com.your.project.package"
是你项目的包=)
接下来,不要删除以前的密钥哈希,我认为它们不会冲突。例如,我的 Facebook 应用程序中有 2 个密钥哈希。
还有最近的事情,我想这就是问题所在。在 developers.facebook 转到您的应用程序的状态和审核。并将您的应用程序切换到 public。
有两种可能的解决方案可能会有所帮助,每一种都在不同的场合为我完成了,所以我们开始吧。
(假设您输入了应用程序告诉您的哈希键但没有起作用)
- 你应该删除通常位于“C:\Users\yourUserName.android”的debug.keystore文件,然后重新编译工程,然后使用新的 debug.keyhash 获取新的哈希键(如 here 所述)。那么这些新的密钥哈希应该可以工作。
2.These 有点棘手。也许即使您输入了您的 Facebook 开发人员仪表板密钥哈希也不起作用的原因,是因为您的 Facebook 应用程序 ID 在您构建 apk 的那一刻发生了变化(这发生在我身上,因为我有我的应用程序的以前版本并且它给了我过去的 ID,即使我在 config.xml 中指定了它)。所以,在我的例子中,我有一个 cordova 项目,所以我去了“C:your_CordovaProject\platforms\android\res\values\facebookconnect.xml”并打开文件,在这里你要检查是否fb_app_id 与您在 Facebook 仪表板中的相同。如果不是(在我的情况下不是)你要做的是
--删除你的 facebook 插件,
--再次添加并
-- 像这样再次指定您的应用程序 ID 和名称:
cordova 插件添加 cordova-plugin-facebook4 --save --variable APP_ID="123456789" --variable APP_NAME="myApplication"
然后我又做了一次散列键处理,它成功了。希望对你有帮助
您应该获得新密钥;
第 1 步。如果您没有 OpenSSL 库,请下载 here
第2步,解压。
在 C:/ 中创建一个文件夹 - OpenSSL 并将提取的代码复制到此处。
第 3 步。然后打开 cmd 并转到 C:\Program Files\Java\jdk1.7.0_79\bin
第四步,执行这条命令-
keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | "C:\OpenSSL\bin\openssl" sha1 -binary |"C:\OpenSSL\bin\openssl" base64
第 5 步。获取密钥并访问开发者 facebook 网站
第六步。将密钥添加到您的项目。
就是这样。
这对我有用。
将 APK 复制到您的 PC 程序 Files\java\jdkX.X.X_XXX\bin 文件夹
在我的例子中是 C:\Program Files\Java\jdk1.8.0_191\bin
在此目录中打开CMD并输入以下内容
keytool -list -printcert -jarfile YOUR_APK_NAME.apk
将 SHA1 值复制到剪贴板它将是这样的:79:D0:E6:80:4E:28:1E:D1:88:28:CB:D7:E6:BE:2E:0C:FB:24:98:52
然后转到 http://tomeko.net/online_tools/hex_to_base64.php 将您的 SHA1 值转换为 base64。
这就是 Facebook 要求获取生成的哈希“********************=”并将密钥哈希复制到您的 Facebook 开发人员应用程序设置中。
我已将 Facebook SDK 导入到我的 android 项目中,第一次从我的 android 应用程序登录 Facebook 时它工作正常,但第二次出现此错误:
Invalid key hash. The key hash "..." does not match any stored key hashes. Configure your app key hashes at http://developers.facebook.com/apps/..
我也尝试输入他们在此错误中提供的密钥,但没有成功。
编辑: 我使用了它生成密钥的 cmd 命令并要求输入密码 "android"
添加您的应用程序中提供的密钥
http://developers.facebook.com/apps/
此外,在最后添加"="
符号
例如。你得到 2jmj7l5rSw0yVb/vlWAYkK/Y
比在 Facebook 页面上,
添加 2jmj7l5rSw0yVb/vlWAYkK/Y=
最后一个 "="
标志很重要。
我花了一个小时生成密钥哈希,然后尝试了这个技巧。
Keyhashes 与从不同系统生成的 .apk 文件不同。所以最好的解决方案是 - 当你得到错误
"Invalid key hash. The key hash
"<KEYHASH>"
does not match any..."
然后写入或复制 "<KEYHASH>"
,然后转到 apps-> settings-> android
将其放入 Facebook 开发者页面。如果不起作用,则将 "="
放在您从错误中复制的 keyhash 之后,然后重试。并且不要忘记实施您的项目。
据我所知,您已经获得了密钥哈希,但我仍然会在此处放置用于在控制台中获取它的代码。
PackageInfo info;
try {
info = getPackageManager().getPackageInfo("com.your.project.package", PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md;
md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
String something = new String(Base64.encode(md.digest(), 0));
//String something = new String(Base64.encodeBytes(md.digest()));
Log.e("hash key", something);
}
} catch (PackageManager.NameNotFoundException e1) {
Log.e("name not found", e1.toString());
} catch (NoSuchAlgorithmException e) {
Log.e("no such an algorithm", e.toString());
} catch (Exception e) {
Log.e("exception", e.toString());
}
其中"com.your.project.package"
是你项目的包=)
接下来,不要删除以前的密钥哈希,我认为它们不会冲突。例如,我的 Facebook 应用程序中有 2 个密钥哈希。
还有最近的事情,我想这就是问题所在。在 developers.facebook 转到您的应用程序的状态和审核。并将您的应用程序切换到 public。
有两种可能的解决方案可能会有所帮助,每一种都在不同的场合为我完成了,所以我们开始吧。
(假设您输入了应用程序告诉您的哈希键但没有起作用)
- 你应该删除通常位于“C:\Users\yourUserName.android”的debug.keystore文件,然后重新编译工程,然后使用新的 debug.keyhash 获取新的哈希键(如 here 所述)。那么这些新的密钥哈希应该可以工作。
2.These 有点棘手。也许即使您输入了您的 Facebook 开发人员仪表板密钥哈希也不起作用的原因,是因为您的 Facebook 应用程序 ID 在您构建 apk 的那一刻发生了变化(这发生在我身上,因为我有我的应用程序的以前版本并且它给了我过去的 ID,即使我在 config.xml 中指定了它)。所以,在我的例子中,我有一个 cordova 项目,所以我去了“C:your_CordovaProject\platforms\android\res\values\facebookconnect.xml”并打开文件,在这里你要检查是否fb_app_id 与您在 Facebook 仪表板中的相同。如果不是(在我的情况下不是)你要做的是 --删除你的 facebook 插件, --再次添加并 -- 像这样再次指定您的应用程序 ID 和名称:
cordova 插件添加 cordova-plugin-facebook4 --save --variable APP_ID="123456789" --variable APP_NAME="myApplication"
然后我又做了一次散列键处理,它成功了。希望对你有帮助
您应该获得新密钥;
第 1 步。如果您没有 OpenSSL 库,请下载 here
第2步,解压。 在 C:/ 中创建一个文件夹 - OpenSSL 并将提取的代码复制到此处。
第 3 步。然后打开 cmd 并转到 C:\Program Files\Java\jdk1.7.0_79\bin
第四步,执行这条命令-
keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | "C:\OpenSSL\bin\openssl" sha1 -binary |"C:\OpenSSL\bin\openssl" base64
第 5 步。获取密钥并访问开发者 facebook 网站
第六步。将密钥添加到您的项目。
就是这样。
这对我有用。
将 APK 复制到您的 PC 程序 Files\java\jdkX.X.X_XXX\bin 文件夹
在我的例子中是 C:\Program Files\Java\jdk1.8.0_191\bin
在此目录中打开CMD并输入以下内容
keytool -list -printcert -jarfile YOUR_APK_NAME.apk
将 SHA1 值复制到剪贴板它将是这样的:79:D0:E6:80:4E:28:1E:D1:88:28:CB:D7:E6:BE:2E:0C:FB:24:98:52
然后转到 http://tomeko.net/online_tools/hex_to_base64.php 将您的 SHA1 值转换为 base64。
这就是 Facebook 要求获取生成的哈希“********************=”并将密钥哈希复制到您的 Facebook 开发人员应用程序设置中。