我正在开发一个Android应用程序,我想在其中集成一个Facebook 发布功能。我下载了Facebook-Android SDK,然后 readme。Md(文本文件)在那里,其中提到要生成 Android的键散列。我如何生成它?


当前回答

有两种方法可供选择,一种是复杂的,一种是简单的

方法一:(小复杂)

首先,你必须下载相应的64位或32位ssl,记住下载版本号openssl-0.9.8e_X64.zip或openssl-0.9.8e_WIN32.zip后面有e的文件,而不是版本号后面有k的文件,

并放置在AndroidStudio/jre/bin目录下,如果你不知道放在哪里,你可以通过右键单击android studio快捷方式找到这个目录:

现在您已经在一个地方管理了两个必需的东西,但是仍然需要找到调试的路径。在“C:\Users\yourusernamehere\.android\debug.keystore”中可以找到。

如果您的应用程序已经发布或即将发布,那么当且仅当您正在测试时,请使用您的发布签名密钥库 在开发模式下可以使用调试、按键

一切都设置好后,让我们以base64格式安排您想要执行的用于生成哈希键的命令,您的命令将如下所示

keytool.exe -exportcert -alias androiddebugkey -keystore "C:\Users\ayyaz talat\.android\debug.keystore" | "D:\Program Files\Android\Android Studio\jre\bin\openssl\bin\openssl.exe" sha1 -binary |"D:\Program Files\Android\Android Studio\jre\bin\openssl\bin\openssl.exe" base64

它将提示您为调试输入密码。密钥存储库,默认为android。如果您使用自己的密钥,那么密码也将是您的。 如果一切顺利,输出将如下所示,希望对您有所帮助

第二种方法(分别为简单方法)

如果你不想经历以上所有的过程,那么只需使用下面的方法来记录haskey:

 private void printKeyHash() {
        try {
            PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA1");
                md.update(signature.toByteArray());
                Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
            }
        } catch (PackageManager.NameNotFoundException e) {
            Log.e("KeyHash:", e.toString());
        } catch (NoSuchAlgorithmException e) {
            Log.e("KeyHash:", e.toString());
        }
    }

输出:

其他回答

这是Xamarin的版本


private void printKeyHash()
{
    try
    {
        PackageInfo info = PackageManager.GetPackageInfo(PackageName, PackageInfoFlags.Signatures);
        foreach (var signature in info.Signatures)
        {
            MessageDigest md = MessageDigest.GetInstance("SHA1");
            md.Update(signature.ToByteArray());
            var hash = Base64.EncodeToString(md.Digest(), Base64Flags.Default);
            Log.Debug("KeyHash:", hash);
        }
    }
    catch (PackageManager.NameNotFoundException e)
    {

    }
    catch (NoSuchAlgorithmException e)
    {

    }
}

我创建了一个适用于Windows和Mac OS x的小工具,只需放入密钥存储文件,并获取散列密钥。

如果您想要默认调试。Keystore文件,使用默认别名和密码。否则,使用您自己的密钥存储库文件和值。

看看吧,下载Windows版或Mac OS X版 (Dev-Host有时可能会宕机…所以如果链接坏了,PM我,我会修复它)。

我希望这对你们有帮助……

2014年12月31日-编辑: 更改主机为AFH。 如果链接坏了,请告诉我

2013年11月21日-编辑:

根据用户的要求,我添加了一个默认的密钥存储库位置和一个捐赠按钮。如果我帮了你,尽管用吧。:)

Linux

开放式终端:

用于调试构建

keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64

你会发现debug。Keystore来自”。Android "文件夹复制并粘贴在桌面上,并运行上述命令

发布版本

keytool -exportcert -alias <aliasName> -keystore <keystoreFilePath> | openssl sha1 -binary | openssl base64

注意:确保在这两种情况下,它必须要求密码。如果它不要求输入密码,则意味着命令中有错误。

Kotlin代码获取哈希键

 private fun logHashKey() {
    try {
        val info = getPackageManager().getPackageInfo("your.package.name", PackageManager.GET_SIGNING_CERTIFICATES);
        for (signature in info.signingInfo.signingCertificateHistory) {

            val md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            val something = Base64.getEncoder().encodeToString(md.digest());
            Log.e("hash key", something);
        }
    } catch (e1: PackageManager.NameNotFoundException) {
        Log.e("name not found", e1.toString());
    } catch (e: NoSuchAlgorithmException) {
        Log.e("no such an algorithm", e.toString());
    } catch (e: Exception) {
        Log.e("exception", e.toString());
    }
}

请不要忘记在调试和发布环境中生成键,因为它们会随着构建设置而变化。

对于Android应用程序

这段代码用于在Android应用程序中获取Facebook集成的哈希键。我已经测试了所有的设备,一切正常。只更改此代码的包名:

private void facebookHashKey() {

    try {
        PackageInfo info = getPackageManager().getPackageInfo("com.app.helpcove", PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            String hashCode  = Base64.encodeToString(md.digest(), Base64.DEFAULT);
            System.out.println("Print the hashKey for Facebook :"+hashCode);
            Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }
    } catch (NameNotFoundException e) {

    } catch (NoSuchAlgorithmException e) {

    }
}