如何创建Android Facebook Key Hash?

Som*_*omk 165 java android facebook

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

cod*_*e22 219

这是你需要做的 -

Code Extract 下载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
Run Code Online (Sandbox Code Playgroud)

它会要求输入密码,把android放在一边.你会得到一个密钥哈希

  • @Max,默认密码是`android`. (5认同)
  • 密钥是android的密码. (3认同)
  • 密钥哈希与任何存储的密钥哈希android不匹配,无法正常工作 (2认同)
  • 首先通过从您的工作室转到 Build --> Build Apk 来创建一个密钥库。提供名称和密码等。将其作为 .jks 文件存储在易于访问的文件夹中。现在复制路径并通过替换上述答案中的路径来生成密钥。 (2认同)
  • 它向我显示了一个错误:“...表达式只允许作为管道的第一个元素。在 line:1 char:184 ... 表达式或语句中的意外标记 'sha1'。...表达式只允许作为管道的第一个元素。...表达式或语句中出现意外标记“base64”。+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException +fullyQualifiedErrorId : ExpressionsMustBeFirstInPipeline” (2认同)

Bir*_*dia 158

适用于Linux和Mac

开放式终端:

对于Debug Build

keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64
Run Code Online (Sandbox Code Playgroud)

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

发布版本

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

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

  • 要清楚,密码为空.只需在出现提示时点击<enter>. (2认同)
  • 此注释:“注意:确保在这两种情况下都要求输入密码。如果不要求输入密码,则意味着命令中有问题。” 对于解决问题至关重要 (2认同)
  • 即使要求输入密码也不意味着一切正常(密码错误、密钥别名错误)。首先单独运行`keytool -exportcert -alias &lt;aliasName&gt; -keystore &lt;keystoreFilePath&gt;`,看看是否一切正常。另外,当通过管道传输时,keytool 处于非交互模式并在您输入密码时以纯文本形式显示密码。所以你最好写一个单独运行命令的小脚本。 (2认同)

Mad*_*ddy 83

请试试这个:

public static void printHashKey(Context pContext) {
        try {
            PackageInfo info = pContext.getPackageManager().getPackageInfo(pContext.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);
        }
    }
Run Code Online (Sandbox Code Playgroud)


小智 48

OpenSSL:如果未预装操作系统,则必须安装(例如,Windows未预安装).如何安装取决于您的操作系统(对于Windows,请检查coder_For_Life22提供的链接).

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

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
Run Code Online (Sandbox Code Playgroud)

请注意,-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调试证书.如果密码正确,控制台会打印一个哈希值(有点随机的字符和数字).

把它复制到android key hashFacebook上你的应用程序首选项内的字段中.要到达那里,请访问developers.facebook.com/apps,选择您的应用,转到并向下Edit settings滚动.之后,请等待几分钟,直到更改生效.


Rak*_*esh 22

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

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
Run Code Online (Sandbox Code Playgroud)

在Windows上,使用: -

keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl base64
Run Code Online (Sandbox Code Playgroud)

希望对你有帮助

Ref - 开发者facebook网站


Man*_*ddy 16

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

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

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

在此输入图像描述

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

5.现在我们需要调试keystore位置,对于那个打开C~> Users~> YourUserName~> .android应该有一个文件名debug.keystore,现在复制路径位置,应该是有些像

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

6.现在打开命令提示符并键入命令

cd YourJDKLocationFromStep4  
Run Code Online (Sandbox Code Playgroud)

在我的情况下

 cd "C:\Program Files\Android\Android Studio\jre\bin"
Run Code Online (Sandbox Code Playgroud)

7.现在构造以下命令

keytool -exportcert -alias androiddebugkey -keystore YOURKEYSTORELOCATION | YOUROPENSSLLOCATION sha1 -binary | YOUROPENSSLLOCATION base64
Run Code Online (Sandbox Code Playgroud)

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

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

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

Enter keystore password:  android
Run Code Online (Sandbox Code Playgroud)

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

对于Signed KeyHash,构造以下命令

keytool -exportcert -alias YOUR_ALIAS_FOR_JKS -keystore YOUR_JKS_LOCATION | YOUROPENSSLLOCATION sha1 -binary | YOUROPENSSLLOCATION base64
Run Code Online (Sandbox Code Playgroud)

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

注意

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

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

  • 非常感谢,这是一本非常详细的初学者指南! (2认同)

and*_*per 16

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

FacebookSdk.sdkInitialize(getApplicationContext());
Log.d("AppLog", "key:" + FacebookSdk.getApplicationSignature(this));
Run Code Online (Sandbox Code Playgroud)

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

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

结果应以"="结尾.


Sum*_*diq 16

如果您已经将应用上传到 Play 商店,您可以按如下方式生成哈希键:

  1. 在此处转到发布管理

  2. 选择发布管理 -> 应用签名

  3. 您可以看到十六进制格式的应用程序签名证书的 SHA1 密钥。

  4. 以十六进制格式复制 SHA1 并将其转换为 base64 格式,您可以使用链接在没有 SHA1 的情况下执行操作:十六进制的一部分。

  5. 转到 Facebook 开发者控制台并在设置 -> 基本 -> 密钥哈希中添加密钥(转换为 base 64 后)。


swi*_*Boy 9

对于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应用程序.


Sai*_*i N 9

简单的方法

通过使用此网站,您可以通过将 SHA1 密钥转换为 Facebook 的哈希密钥来获取哈希密钥。


nav*_*ndi 8

步骤 1-> 在您的系统中打开 cmd

步骤 2->C:\Program Files\Java\jdk1.6.0_43\bin>

步骤 3->keytool -list -v -keystore C:\Users\leon\.android\debug.keystore -alias androiddebugkey -storepass android -keypass android

你得到了SHA1点击这个链接你将你的SHA1值转换为 HASH KEY

我 100% 确定这个链接会帮助你


Han*_*nny 7

从API 26开始,您可以在KOTLIN中使用以下代码生成哈希,而无需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)
    }

}
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


小智 6

这就是我获得我的方式:

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

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


Chr*_*ras 6

您只需在浏览器控制台中使用一行JavaScript即可将十六进制映射键转换为base64。在最新的浏览器中打开控制台(在Windows上为F12),然后粘贴代码并替换Google Play在> 下提供的SHA-1SHA-256十六进制映射:Release ManagmentApp signing

> btoa('a7:77:d9:20:c8:01:dd:fa:2c:3b:db:b2:ef:c5:5a:1d:ae:f7:28:6f'.split(':').map(hc => String.fromCharCode(parseInt(hc, 16))).join(''))
< "p3fZIMgB3fosO9uy78VaHa73KG8="
Run Code Online (Sandbox Code Playgroud)

  • 当 Google Play 商店为我生成证书时,这非常有用。我需要将其转换为生成的证书,而不是密钥库,转换为 facebook 哈希 (2认同)

Arp*_*tel 5

有关生成KeyHash Here的简单vedio教程链接

HERE下载openssl


Dmi*_*117 5

简单的方法 -> 不要安装 openssl -> 使用 GIT BASH!

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

默认密码是“android”

我们大多数人都安装了 Git Bash,所以这是我最喜欢的方式。


Rah*_*aee 5

很容易找到你的android项目的sha1

并粘贴到本网站tomeko

为了得到 sha1 只是

// vscode and my cmd
project-name/cd android && ./gradlew signingReport

// other 
project-name/cd android && ./gradlew signingReport
Run Code Online (Sandbox Code Playgroud)