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

时间:2014-12-12 17:13:17

标签: android facebook facebook-javascript-sdk

我正在构建一个用户可以使用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仪表板中打印的密钥,但应用程序仍然给我错误。

我的行为的完整包是“com.app.package.views”,我尝试在信息中心使用此软件包(作为Google Play套餐名称),但没有任何改变。

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

13 个答案:

答案 0 :(得分:45)

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

你需要一个'制作键盘'获得启动发布密钥库:

从命令行:

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64

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

更多信息:https://developers.facebook.com/docs/android/getting-started/

答案 1 :(得分:33)

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

使用此来获得YOUR_RELEASE_KEY_ALIAS:

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

和这个获得你的发布密钥:

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

它对我有用。

答案 2 :(得分:26)

最简单的解决方案。

1)签署您的Apk。

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

3)当按下facebook登录时,您将收到一条错误消息&#34;无效的密钥哈希。关键哈希&#34; xxx&#34;与任何存储的密钥都不匹配。 ...&#34;在你的logcat上。

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

答案 3 :(得分:8)

我们需要更换&#34; openssl&#34;通过openssl结构中的一个文件的路径。

所以,我的CMD命令是:

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

有效。

答案 4 :(得分:3)

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

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);
    }
}

答案 5 :(得分:2)

供以后参考,如果您已经在Play商店中拥有自己的应用,则可以:

  1. 转到Release Management

  2. App Signing中选择Release Management

  3. 您可以看到十六进制格式App signing certificate的SHA1密钥。

  4. 以十六进制格式复制SHA1并将其转换为base64格式,您可以使用此link来执行此操作,而无需十六进制的SHA1:部分。

  5. 转到Facebook开发者控制台,并在settings —> basic –> key hashes中添加密钥(转换为base 64后)。

答案 6 :(得分:1)

Facebook SDK使用两个不同的键,一个是您可以在开发阶段使用的Debug键,另一个是在创建已签名的应用程序包后使用的Release键。 以下是有关如何创建调试和释放密钥的链接。

Developer.Facebook

同时查看this SO帖子。

答案 7 :(得分:0)

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

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

然后您将获得SHA1密钥。复制该密钥并使用以下站点生成哈希密钥:

Link to get hash key

您将获得Output(base64):将其复制并在需要的地方使用。.

答案 8 :(得分:0)

  1. 首先打开命令提示符(Windows + R)

  2. cd C:\ Program Files \ Java \ jre1.8.0_172 \ bin

  3. HERE

    下载openssl
  4. 在C:/驱动器中创建一个名为OpenSSL的文件夹

  5. 将下载的zip文件导出到OpenSSL文件夹中

  6. 将命令生成为:-

    keytool -exportcert -alias YOUR_ALIAS -keystore“ YOUR_KEYSTORE_PATH” | “ C:\ OpenSSL \ bin \ openssl” sha1 -binary | “ C:\ OpenSSL \ bin \ openssl” base64

  7. 将命令粘贴到命令提示符中,然后按Enter键

  8. 输入密码

  9. 在这里您可以看到密钥:-“ 1skdhyjsgd56whdjddV + vCLE =”

答案 9 :(得分:0)

您必须生成两个密钥哈希。第一个使用上面的命令。

一旦您的应用在 Play 商店中,请转到

Configuration -> app integrity 

并获取谷歌生成的 SHA1 并访问此站点:

www.fbkeyhash.com 

粘贴 SHA1 并生成第二个 Key Hash。

两者都需要保存在 Facebook 控制台中,才能使您的 APK 的实时版本和调试版本正常工作。

答案 10 :(得分:0)

2021 年 7 月: 在 Google Console 中查找密钥(如果您的应用已发布)

  1. Google Play Consolez -> 左侧菜单 Release -> Setup -> App Integrity -> Upload key certificate -> SHA-1 certificate fingerprint

  2. 将 HEX 转换为 base64: https://base64.guru/converter/encode/hex

  3. 在 Facebook 添加密钥:Add your development and release key hashes

答案 11 :(得分:-1)

这是我到目前为止发现的用于生成密钥哈希的最简单方法!

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) {

}

答案 12 :(得分:-2)

keytool -exportcert -alias aliasName -keystore C:\my_release_keystroke_info.jks | openssl sha1 -binary | openssl base64