it-swarm.cn

如何创建Android Facebook Key Hash?

我根本不明白这个过程。我已经能够导航到Java SDK中包含keytool的文件夹。虽然我一直得到错误openssl不被识别为内部或外部命令。问题是即使我可以让这个工作,我会做什么以及之后做什么?

146
Somk

这是你需要做的 -

代码 下载openSSl _提取它。在C:/中创建一个文件夹-OpenSSL,并在此复制提取的代码。

检测debug.keystore文件路径。如果你没找到,那么在C:/中搜索并在下一步中使用命令中的Path。

检测你的keytool.exe路径并转到该dir/in命令提示并在1行中运行此命令 -

$ keytool -exportcert -alias androiddebugkey -keystore "C:\Documents and Settings\Administrator.Android\debug.keystore" | "C:\OpenSSL\bin\openssl" sha1 -binary |"C:\OpenSSL\bin\openssl" base64

它会要求输入密码,把Android全部放进去。你会得到一个密钥哈希

199
coder_For_Life22

适用于Linux和Mac

开放式终端:

用于调试版本

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

您将在“.Android”文件夹中找到debug.keystore。将其复制并粘贴到桌面上并运行上述命令。

For release Build

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

注意:确保在两种情况下都要求输入密码。如果它没有要求输入密码,则表示命令中出现了问题。 debug.keystore的密码_是Android并且对于发布,您必须输入您在创建密钥库期间设置的密码。

136
Biraj Zalavadia

请试试这个:

public static void printHashKey(Context pContext) {
        try {
            PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                String hashKey = new String(Base64.encode(md.digest(), 0));
                Log.i(TAG, "printHashKey() Hash Key: " + hashKey);
            }
        } catch (NoSuchAlgorithmException e) {
            Log.e(TAG, "printHashKey()", e);
        } catch (Exception e) {
            Log.e(TAG, "printHashKey()", e);
        }
    }
68
Maddy

OpenSSL:你必须安装它,如果它没有预装你的操作系统 (例如Windows没有预先安装它) 。如何安装取决于您的操作系统(对于Windows检查 链接 由coder_For_Life22提供)。

如果你在Windows上,最简单的方法就是将openssl.exe二进制文件复制到你的keytool路径。如果您不想这样做,则必须将其添加到PATH环境变量中。然后执行文档中提供的命令。

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

请注意-keystore之后的参数指向您的调试密钥库。此位置还取决于您的操作系统。应该在以下位置之一:

  • Windows Vista或7 - C:\ Users\.Android\debug.keystore
  • Windows XP - C:\ Documents and Settings\.Android\debug.keystore
  • OS X和Linux - 〜/ .Android/debug.keystore

如果您做的一切正确,则应提示您输入密码。对于调试证书,这是Android。如果密码正确,控制台会打印一个哈希值(有点随机的字符和数字)。

把它复制到facebook上app的首选项中的Android key hash字段中。要到达那里,请转至 developers.facebook.com/apps ,选择您的应用,转到Edit settings并向下滚动。之后,等待几分钟,直到更改生效。

47
user658042

要在本地计算机上生成密钥哈希,请针对Android调试密钥库运行Java的keytool实用程序(应位于控制台的路径上)。默认情况下,这是您家中的.Android目录)。在OS X上,运行:

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

在Windows上,使用: -

keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.Android\debug.keystore | openssl sha1 -binary | openssl base64

希望对你有帮助

Ref - 开发者facebook网站

21
Rakesh

还有一个简短的解决方案。只需在您的应用中运行:

FacebookSdk.sdkInitialize(getApplicationContext());
Log.d("AppLog", "key:" + FacebookSdk.getApplicationSignature(this));

较长的一个不需要FB SDK(基于解决方案 here ):

public static void printHashKey(Context context) {
    try {
        final PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);
        for (Android.content.pm.Signature signature : info.signatures) {
            final MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            final String hashKey = new String(Base64.encode(md.digest(), 0));
            Log.i("AppLog", "key:" + hashKey + "=");
        }
    } catch (Exception e) {
        Log.e("AppLog", "error:", e);
    }
}

结果应以“=”结尾。

13
android developer

像我这样的人在这里是完整的细节 (对于Windows)

1. 下载 OpenSSl 3或4(e将更好地工作)基于您的系统32位或64位。

2. 在C目录中解压缩下载的Zip

3. 打开提取的文件夹到bin并复制路径,应该是C:\openssl-0.9.8k_X64\bin\openssl(在末尾添加\ openssl)

4. (获取Jdk的bin文件夹的路径,如果你知道如何,请忽略它)。

打开Android studio~file~Project Structure(ctrl + alt + shift + s),在左侧面板中选择SDK位置,复制JDK位置并添加/ bin到它

所以最终的JDK位置就像C:\Program Files\Android\Android Studio\jre\bin

我们正在使用这种方法来获取Jdk位置,因为你可能会使用像我这样的嵌入式jdk

enter image description here

现在您拥有OpenSSl位置和JDK位置

5. 现在我们需要调试keystore位置,为那个打开C~> Users~> YourUserName~> .Android应该有一个文件名debug.keystore,现在复制路径位置,应该是一些东西喜欢

C:\Users\Redman\.Android\debug.keystore

6. now open命令提示符并键入命令

cd YourJDKLocationFromStep4  

在我的情况下

 cd "C:\Program Files\Android\Android Studio\jre\bin"

7. now现在构造以下命令

keytool -exportcert -alias androiddebugkey -keystore YOURKEYSTORELOCATION | YOUROPENSSLLOCATION sha1 -binary | YOUROPENSSLLOCATION base64

在我的情况下,命令看起来像

keytool -exportcert -alias androiddebugkey -keystore "C:\Users\Redman\.Android\debug.keystore" | "C:\openssl-0.9.8k_X64\bin\openssl" sha1 -binary | "C:\openssl-0.9.8k_X64\bin\openssl" base64

现在在命令提示符中输入此命令,如果你做得对,你会被要求输入密码(密码是Android)

Enter keystore password:  Android

就是这样,你将获得Key Hash,只需复制并使用它

对于Signed KeyHash,构造以下命令

keytool -exportcert -alias YOUR_ALIAS_FOR_JKS -keystore YOUR_JKS_LOCATION | YOUROPENSSLLOCATION sha1 -binary | YOUROPENSSLLOCATION base64

输入您的密钥库密码,如果您输入了错误的密码,它将提供错误的KeyHash

_ note _

如果出于某种原因,如果它在某个路径上出错,那么用双引号包装该路径。而且Windows power对我来说效果不好,我使用git bash(或使用命令Prompt)。

keytool -exportcert -alias androiddebugkey -keystore "C:\Users\Redman\.Android\debug.keystore" | "C:\openssl-0.9.8k_X64\bin\openssl" sha1 -binary | "C:\openssl-0.9.8k_X64\bin\openssl" base64
12
Manohar Reddy

对于Windows:

  1. 打开命令提示并粘贴下面的命令

keytool -exportcert -alias androiddebugkey -keystore%HOMEPATH%。Android\debug.keystore | openssl sha1 -binary | openssl base64

  1. 输入密码:Android - >点击Enter

  2. 复制生成的哈希密钥 - >使用您的开发者帐户登录Facebook

  3. 转到您的Facebook应用程序 - >设置 - >在“键哈希”选项中粘贴哈希键 - >保存更改。

  4. 现在使用Facebook登录/共享等测试您的Android应用程序。

9
swiftBoy

这就是我获得我的方式:

private class SessionStatusCallback implements Session.StatusCallback {
        @Override
        public void call(Session session, SessionState state, Exception exception) {

            if (exception != null) {
                new AlertDialog.Builder(FriendActivity.this)
                        .setTitle(R.string.login_failed_dialog_title)
                        .setMessage(exception.getMessage())
                        .setPositiveButton(R.string.ok_button, null)
                        .show();
            }

因此,当您尝试在没有密钥的情况下进入时,将发生异常。 Facebook将右键放入此例外。您需要做的就是复制它。

6
Valikpon

为了方便vedio教程链接生成KeyHash这里

_这里下载openssl _

5
Arpit Patel

从API 26开始,您可以使用 _ kotlin _ 中的以下代码生成HASH KEYS,而无需使用Facebook SDK。

fun generateSSHKey(context: Context){
    try {
        val info = context.packageManager.getPackageInfo(context.packageName, PackageManager.GET_SIGNATURES)
        for (signature in info.signatures) {
            val md = MessageDigest.getInstance("SHA")
            md.update(signature.toByteArray())
            val hashKey = String(Base64.getEncoder().encode(md.digest()))
            Log.i("AppLog", "key:$hashKey=")
        }
    } catch (e: Exception) {
        Log.e("AppLog", "error:", e)
    }

}

enter image description here

4
Hanny

在您的应用中运行此操作:

FacebookSdk.sdkInitialize(getApplicationContext());
Log.d("AppLog", "key:" + FacebookSdk.getApplicationSignature(this)+"=");

或这个:

public static void printHashKey(Context context) {
    try {
        final PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);
        for (Android.content.pm.Signature signature : info.signatures) {
            final MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            final String hashKey = new String(Base64.encode(md.digest(), 0));
            Log.i("AppLog", "key:" + hashKey + "=");
        }
    } catch (Exception e) {
        Log.e("AppLog", "error:", e);
    }
}

然后看看日志。

结果应以“=”结尾。

解决方案基于 here here

3
android developer

下载open ssl

然后将openssl\bin添加到路径系统变量中:

我的电脑 - >属性 - >高级配置 - >高级 - >系统变量 - >在系统变量下查找路径,并将其添加到其结尾:; yourFullOpenSSLDir\bin

现在在jdk\bin文件夹C:\ Program Files\Java\jdk1.8.0_40\bin上打开一个命令行(在Windows上保持shift并右键单击 - >打开命令行)并使用:

keytool -exportcert -alias keystorealias -keystore C:\yourkeystore\folder\keystore.jks | openssl sha1 -binary | openssl base64

并在提供密码后复制它生成的28个长度。

3
sagits

您可以从 https://console.developers.google.com/projectselector/apis/credentials获取所有指纹
并使用此Kotlin代码将其转换为keyhash:

fun main(args: Array<String>) {
    listOf("<your_production_sha1_fingerprint>",
            "<your_debug1_sha1_fingerprint>",
            "<your_debug2_sha1_fingerprint>")
            .map { it.split(":") }
            .map { it.map { it.toInt(16).toByte() }.toByteArray() }
            .map { String(Base64.getEncoder().encode(it)) }
            .forEach { println(it) }
}
2
Alexmelyon

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

4.19.0 - 2017年1月25日

Facebook SDK

改性

Facebook SDK现在在应用程序启动时自动初始化。在大多数情况下,不再需要手动调用FacebookSDK.sdkInitialize()。请参阅 升级指南 了解更多详情。

用于调试

try {
    PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), 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 (NoSuchAlgorithmException e) {
    e.printStackTrace();
} catch (Exception e) {
    e.printStackTrace();
}
1
Ketan Ramani

我找到了最简单的工具并且多次使用它,它完美地工作。检查一下,这会有所帮助。

检查 答案了解更多详情。

1
TapanHP

试试这个答案

https://stackoverflow.com/a/54513168/9236994

尽最小努力有助于解决问题。

0
Vicky Salunkhe

我遇到了同样的问题,我没有被要求输入密码,似乎我的密钥库文件路径错误。

实际上,如果keytool没有找到你设置的密钥库,它将创建一个密钥库并给你错误的密钥,因为它没有使用正确的密钥库。

一般规则是,如果您没有被要求输入密码,那么您将生成错误的密钥。

0
Nick Tsitlakidis

你可以用这个 apk

1.first install the app from the Google Play Store
2.install the above apk
3.launch the apk and input the package name of your app
4.then you will get the hash code you want
0
armnotstrong