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

Mik*_*ine 33 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) {

         }
Run Code Online (Sandbox Code Playgroud)

在调试模式下,一切运行良好.

当我导出项目以供发布时,它会出现以下错误:

"Invalid key hash. The key hash ****************** does not match any stored key hashes"
Run Code Online (Sandbox Code Playgroud)

我粘贴了Facebook Developer仪表板中打印的密钥,但应用程序仍然给我错误.

我的行为的完整包是" com.app.package.views",我试图在仪表板中使用此包(作为Google Play包名称),但没有任何改变.

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

Abh*_*bhi 48

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

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

从命令行:

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64
Run Code Online (Sandbox Code Playgroud)

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

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

  • 你能告诉我在哪里运行这个命令,因为当我运行它时它告诉我'keytool'不被识别为内部或外部命令,可操作程序或批处理文件. (4认同)

Rah*_*mov 39

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

使用这个获得YOUR_RELEASE_KEY_ALIAS:

keytool -list -keystore /Users/***/Documents/keystore/***.jks
Run Code Online (Sandbox Code Playgroud)

这一个让你的发布keyhash:

keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore /Users/***/Documents/keystore/***.jks | openssl sha1 -binary | openssl base64
Run Code Online (Sandbox Code Playgroud)

这个对我有用.

  • 这就像一个魅力!惊讶的是,没有任何更多的赞成票. (3认同)
  • @northernman,因为以上答案仅适用于MAC (2认同)

小智 30

最简单的解决方案.

1)签署你的Apk.

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

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

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


Nad*_*lta 10

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

  1. Release Management

  2. 选择App SigningRelease Management

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

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

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


Inf*_*eus 8

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

所以,My 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
Run Code Online (Sandbox Code Playgroud)

有效.


小智 7

2021 年 7 月:如果您的应用程序已发布,请在 Google Console 中查找密钥

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

  2. 将十六进制转换为 base64: https://base64.guru/converter/encode/hex

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


eng*_*mam 5

// 将此方法添加到您的第一个活动并打开日志并搜索 Base64 标签 这是哈希键,我希望它有所帮助

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);
    }
}
Run Code Online (Sandbox Code Playgroud)


Maj*_*eek 1

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

开发者.Facebook

另请查看帖子。