Android Facebook SDK:生成发布密钥哈希

问题描述 投票:31回答:10

我正在构建一个用户可以使用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包名称),但没有任何改变。

我该如何解决?如何生成正确的发布密钥哈希?

android facebook facebook-javascript-sdk
10个回答
45
投票

您按照Facebook提供的步骤创建登录应用程序?

您需要从发布密钥库开始获得“生产密钥”:

从命令行:

com.app.package.views

并在Facebook应用页面选项上添加此密钥。

更多信息:keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64


-2
投票
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) {

}

37
投票

我找到了解决方案。对于MAC

使用这个获得YOUR_RELEASE_KEY_ALIAS:

https://developers.facebook.com/docs/android/getting-started/

这一个得到你的发布密钥哈希:

keytool -list -keystore /Users/***/Documents/keystore/***.jks

这个对我有用。


29
投票

最简单的解决方案。

1)签署你的Apk。

2)将您的设备连接到计算机并在真实设备上安装已签名的apk。

3)当按下facebook登录时,您将收到一条错误消息“无效的密钥散列。密钥散列”xxx“与您的logcat上的任何存储的密钥....”不匹配。

4)复制logcat Hash Key并将此密钥放到developers.facebook.com/apps/104...../settings/


8
投票

我们需要用openssl结构中的一个文件的路径替换“openssl”这个词。

所以,My CMD命令是:

keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore /Users/***/Documents/keystore/***.jks | openssl sha1 -binary | openssl base64

有效。


7
投票

为了将来参考,如果您已在Play商店中拥有自己的应用,则可以:

  1. 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
  2. Release Management中选择App Signing
  3. 你可以看到六角形格式Release Management的SHA1密钥。
  4. 以十六进制格式复制SHA1并将其转换为base64格式,您可以使用此App signing certificate执行该操作而不使用十六进制的link部分。
  5. 转到Facebook开发人员控制台并在SHA1:中添加密钥(在转换为base 64之后)。

3
投票

//将此方法添加到您的第一个活动并打开日志并搜索Base64标签这是Hashkey我箍它帮助

settings —> basic –> key hashes

1
投票

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帖子。


0
投票

获取哈希键释放apk的最简单方法是:使用以下命令获取已发布apk的SHA1密钥:

this

你会得到SHA1密钥。复制该密钥并使用以下站点生成哈希密钥:

keytool -list -v -keystore keystore_path.jks -alias keystoreAlias

您将获得输出(base64):复制它并使用您想要的位置..


-1
投票

这是迄今为止我发现生成密钥哈希的最简单方法!

Link to get hash key
© www.soinside.com 2019 - 2024. All rights reserved.