【问题标题】:How to create Android Facebook Key Hash?如何创建 Android Facebook 密钥哈希?
【发布时间】:2011-11-22 07:30:07
【问题描述】:

我完全不明白这个过程。我已经能够导航到 Java SDK 中包含 keytool 的文件夹。虽然我不断收到错误 openssl not Recognized as an internal or external command。问题是,即使我可以让它工作,我会做什么以及之后做什么?

【问题讨论】:

  • 如果您使用的是最新的 facebook sdk,并且如果您完美地放置了您的 facebook api,那么登录时您点击登录 facebook,然后在您的 logcat 中打印哈希键..
  • 要在本地计算机上生成密钥哈希,请针对 Android 调试密钥库运行 Java 的 keytool 实用程序(它应该在控制台的路径上)。默认情况下,它位于您的主 .android 目录中)。在 OS X 上,运行:keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -二进制 | openssl base64 在 Windows 上,使用:- keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -二进制 | openssl base64
  • 为什么有人要创建调试密钥?
  • 我已经生成了密钥哈希,但不知道该把密钥放在哪里,你能指导我吗?我在 Ubuntu 上运行 android studio。

标签: java android facebook


【解决方案1】:

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

并粘贴到本网站tomeko

只为获取 sha1

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

// other 
project-name/cd android && ./gradlew signingReport

【讨论】:

    【解决方案2】:

    请试试这个:

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

    【讨论】:

    • 我已经生成了密钥哈希,但不知道该把密钥放在哪里,您能指导我吗?我在 Ubuntu 上运行 android studio。
    • 这是要走的路
    • 如果您调用 pContext.getPackageInfo,此方法有效。或者只是从函数中删除它并在任何活动的 onCreate 中调用它。
    • 这似乎是 getPackageManager().getPackageInfo([your-package_name], PackageManager.GET_SIGNATURES)
    • @Apurva 你可以把它放在 Android SharedPreferences 中,以备日后使用。
    【解决方案3】:

    请试试这个,它对我有用:

    fun Context.generateSignKeyHash(): String {
    
        try {
    
            val info = packageManager.getPackageInfo(
                packageName,
                PackageManager.GET_SIGNATURES
            )
    
            for (signature in info.signatures) {
                val md = MessageDigest.getInstance("SHA")
                md.update(signature.toByteArray())
                return Base64.encodeToString(md.digest(), Base64.DEFAULT)
            }
    
        } catch (e: Exception) {
            Log.e("keyHash", e.message.toString())
        }
    
        return ""
    
    }
    

    【讨论】:

      【解决方案4】:
          @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          
          // Add code to print out the key hash
          try {
              PackageInfo info = getPackageManager().getPackageInfo(
                      "com.facebook.samples.hellofacebook", 
                      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 (NameNotFoundException e) {
              
          } catch (NoSuchAlgorithmException e) {
              
          }
          
          ...
      

      保存您的更改并重新运行示例。检查您的 logcat 输出是否有类似以下的消息:

      12-20 10:47:37.747: D/KeyHash:(936): 478uEnKQV+fMQT8Dy4AKvHkYibo=

      将密钥哈希保存在您的开发者资料中。重新运行示例并验证您可以成功登录。

      【讨论】:

        【解决方案5】:
            private fun generateKeyHash(): String? {try {
            val info =packageManager.getPackageInfo(packageName, PackageManager.GET_SIGNATURES)
            for (signature in info.signatures) {
                val md: MessageDigest = MessageDigest.getInstance("SHA")
                md.update(signature.toByteArray())
                return String(Base64.encode(md.digest(), 0))
            }
        } catch (e: Exception) {
            Log.e("exception", e.toString())
        }
            return "key hash not found"
        }
        

        【讨论】:

          【解决方案6】:

          您可以简单地在浏览器控制台中使用一行 javascript 将十六进制映射键转换为 base64。在最新浏览器中打开控制台(Windows 上为 F12⌥ Option+⌘ 命令+I macOS 上的 kbd>,Linux 上的 Ctrl+⇧ Shift+I)和粘贴代码并替换 Google PlayRelease 下提供的 SHA-1SHA-256 十六进制映射? 设置 ? 应用签名

          十六进制映射键到 Base64 键散列

          > 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="
          

          你也可以在这里转换;运行以下代码 sn-p 并粘贴十六进制映射键并点击转换按钮:

          document.getElementById('convert').addEventListener('click', function() {
            document.getElementById('result').textContent = btoa(
              document.getElementById('hex-map').value
                .split(':')
                .map(hc => String.fromCharCode(parseInt(hc, 16)))
                .join('')
            );
          });
          <textarea id="hex-map" placeholder="paste hex key map here" style="width: 100%"></textarea>
          <button id="convert">Convert</button>
          <p><code id="result"></code></p>

          如果你想反转一个密钥哈希来检查和验证它​​:

          将 Base64 密钥哈希反转为十六进制映射密钥

          > atob('p3fZIMgB3fosO9uy78VaHa73KG8=').split('').map(c => c.charCodeAt(0).toString(16)).join(':')
          < "a7:77:d9:20:c8:1:dd:fa:2c:3b:db:b2:ef:c5:5a:1d:ae:f7:28:6f"
          

          document.getElementById('convert').addEventListener('click', function() {
            document.getElementById('result').textContent = atob(document.getElementById('base64-hash').value)
              .split('')
              .map(c => c.charCodeAt(0).toString(16))
              .join(':')
          });
          <textarea id="base64-hash" placeholder="paste base64 key hash here" style="width: 100%"></textarea>
          <button id="convert">Convert</button>
          <p><code id="result"></code></p>

          【讨论】:

          • 你是救命稻草,谢谢
          • SHA-1 是一个。
          【解决方案7】:

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

          1. 转到发布管理here

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

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

          4. 以十六进制格式复制 SHA1 并将其转换为 base64 格式,您可以使用 this 链接来做到这一点,而无需 SHA1: 十六进制的一部分。

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

          【讨论】:

            【解决方案8】:

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

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

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

            你得到了SHA1click this link你将你的SHA1值转换为HASH KEY

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

            【讨论】:

              【解决方案9】:

              我遇到了同样的问题,这是我能够解决的方法

              keytool -list -alias androiddebugkey -keystore <project_file\android\app\debug.keystore>
              

              【讨论】:

              • 这不显示 facebook 的哈希值,而是显示 SHA1
              【解决方案10】:

              如果有人对 openssl 有疑问,请按照以下说明操作:

              1. 以 zip 格式下载适用于 windows 的“openssl”
              2. 解压到你想要的路径中。
              3. 获取 zip 中“bin”文件夹的路径

              就是这样

              https://sourceforge.net/projects/openssl/files/latest/download

              【讨论】:

                【解决方案11】:

                keytool -exportcert -alias androiddebugkey -keystore "C:\Users**Deepak**.android\debug.keystore" | "C:\Users\Deepak\ssl\bin\openssl" sha1 -binary | "C:\Users\Deepak\ssl\bin\openssl" base64

                2 上述命令的变化 1.Deepak===由您的系统用户名替换 2.C:\Users\Deepak\ssl=== 替换您的 Open SSL 路径

                运行这个命令并得到这样的输出

                C:\Users\Deepak>keytool -exportcert -alias androiddebugkey -keystore "C:\Users\D eepak.android\debug.keystore" | "C:\Users\Deepak\ssl\bin\openssl" sha1 -binary | "C:\Users\Deepak\ssl\bin\openssl" base64 输入密钥库密码:****** ga0RGNY******************=

                【讨论】:

                  【解决方案12】:

                  简单的方法

                  通过使用this website,您可以通过将SHA1 密钥转换为Facebook 的哈希密钥来获得哈希密钥。

                  【讨论】:

                    【解决方案13】:

                    只需在您的 OnCreateViewOnStart 活动中运行此代码,此函数会返回您开发密钥哈希

                    private String generateKeyHash() {
                        try {
                            PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
                            for (Signature signature : info.signatures) {
                                MessageDigest md = (MessageDigest.getInstance("SHA"));
                                md.update(signature.toByteArray());
                                return new String(Base64.encode(md.digest(), 0));
                            }
                        }catch (Exception e) {
                            Log.e("exception", e.toString());
                        }
                        return "key hash not found";
                    }
                    

                    【讨论】:

                      【解决方案14】:

                      这是完整的详细信息(适用于 Windows)

                      1. 根据您的系统 32 位或 64 位下载OpenSSl 3rd 或 4th(使用 e 会更好)。

                      2.将下载的zip解压到C目录中

                      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. 现在我们需要调试密钥库位置,打开 C~>Users~>YourUserName~>.android 应该有一个文件名 debug.keystore ,现在复制路径位置,它应该是

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

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

                      cd YourJDKLocationFromStep4  
                      

                      就我而言

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

                      7. 现在构造以下命令

                      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
                      

                      就是这样,您将获得密钥哈希,只需复制并使用它

                      对于 Signed KeyHash 构造以下命令

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

                      输入你的keystore密码,如果输入错误的密码会给出错误的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
                      

                      【讨论】:

                      • 非常感谢,这是一本非常详细的初学者指南!
                      • @TamimProduction 使用 k 版本的 openssl 尝试与上述相同的过程,并查看 code.google.com/archive/p/openssl-for-windows/downloads
                      • @TamimProduction 如果您输入错误的密码,它将返回错误的 keyhash 。删除密钥库后您是否再次构建了apk?
                      • @TamimProduction 下载并安装 Facebook 应用程序,登录 facebook 应用程序。打开您的应用程序并进行 facebook 登录。它将在 facebook 应用程序中为您提供密钥哈希,检查它是否与您的相同
                      【解决方案15】:

                      这对新手也有帮助。

                      只是在@coder_For_Life22 的答案中添加更多细节。

                      如果此答案对您有帮助,请不要忘记投票。它激励了我们。

                      为此,您必须已经知道应用的密钥库文件和密码的路径

                      对于此示例,请考虑密钥存储在“c:\keystorekey\new.jks”

                      1.打开本页https://code.google.com/archive/p/openssl-for-windows/downloads

                      2. 根据您的 Windows 操作系统下载 32 位或 64 位 zip 文件。

                      3. 将下载的文件解压缩到您想要的任何位置并记住路径。

                      4. 对于本例,我们认为您已提取下载文件夹中的文件夹。

                      所以文件地址将是“C:\Users\0\Downloads\openssl-0.9.8e_X64\bin\openssl.exe”;

                      5. 现在在键盘上按 windows+r 按钮。

                      6. 这将打开运行框。

                      7. 键入 cmd 并按 Ctrl+Shift+Enter

                      8. 这将以管理员身份打开命令提示符。

                      9.这里导航到java的bin文件夹:

                      如果你使用 Android Studio 提供的 jre,你会发现路径如下:
                      一种。打开安卓工作室。
                      湾。文件->项目结构
                      C。在左侧窗格中,单击“SDK 位置”
                      d。在右侧窗格中,“JDK 位置”下方是您的 jre 路径。
                      e.在此路径的末尾添加“\bin”,因为我们需要的文件“keytool.exe”位于此文件夹中。
                      对于我认为的这个例子,你已经单独安装了 java,下面是路径
                      "C:\Program Files\Java\jre-10.0.2\bin"
                      如果您安装了 32 位 java,它将在
                      "C:\Program Files (x86)\Java\jre-10.0.2\bin"
                      10. 现在使用上述路径执行命令如下:

                      keytool -exportcert -alias androiddebugkey -keystore "c:\keystorekey\new.jks" | "C:\Users\0\Downloads\openssl-0.9.8e_X64\bin\openssl.exe" sha1 -binary |"C:\Users\0\Downloads\openssl-0.9.8e_X64\bin\openssl.exe" base64
                      
                      1. 系统会要求您输入密码,请提供您在创建密钥库密钥时提供的密码。

                        !!!!!! 这会给你钥匙

                      错误: 如果你得到:
                      ---
                      “keytool”未被识别为内部或外部命令
                      ---
                      这意味着 java 安装在其他地方。

                      【讨论】:

                        【解决方案16】:

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

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

                        默认密码是“android”

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

                        【讨论】:

                        【解决方案17】:

                        试试这个答案

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

                        用最少的努力有助于解决问题。

                        【讨论】:

                          【解决方案18】:

                          适用于 Linux 和 Mac

                          打开终端:

                          用于调试构建

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

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

                          用于发布构建

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

                          注意:确保在这两种情况下都要求输入密码。如果它不要求输入密码,则意味着该命令有问题。 debug.keystore 的密码是 "android",您必须输入您在创建密钥库时设置的密码 >.

                          【讨论】:

                          • 要清楚,密码是空的。出现提示时只需按
                          • 我已经生成了密钥哈希,但不知道该把密钥放在哪里,您能指导我吗?我在 Ubuntu 上运行 android studio。
                          • 此注释:“注意:确保在这两种情况下都要求输入密码。如果它不要求输入密码,则表示命令中有问题。”对解决问题至关重要
                          • 谢谢你救了我的命。我一直在输入我的 mac 密码作为密钥库密码,我意识到这是错误的
                          • 即使要求输入密码并不意味着一切正常(密码错误,密钥别名错误)。首先单独运行keytool -exportcert -alias &lt;aliasName&gt; -keystore &lt;keystoreFilePath&gt;,看看是否一切正常。另外,通过管道传输时,keytool 处于非交互模式,并在您输入密码时以纯文本形式显示密码。所以你最好写一个单独运行命令的小脚本。
                          【解决方案19】:

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

                          4.19.0 - 2017 年 1 月 25 日

                          Facebook SDK

                          修改

                          Facebook SDK 现在会在应用程序启动时自动初始化。在大多数情况下,不再需要手动调用 FacebookSDK.sdkInitialize()。详情请见upgrade guide

                          用于调试

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

                          【讨论】:

                            【解决方案20】:

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

                            【讨论】:

                            • 你的意思是我把你的代码放在class MainActivity: FlutterActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) GeneratedPluginRegistrant.registerWith(this) } }
                            【解决方案21】:

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

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

                            结果应该以“=”结尾。

                            【讨论】:

                            • 我注意到我的密钥哈希中有一个 '_' ,这是 FB 不允许的。为了使用哈希,我必须将其更改为“/”。
                            • Facebook 函数将我的密钥返回为 -AAAAAAAA_AAAAAA-AAAAAAAAAA,这是 Facebook 不允许的,printHashKey 以有效格式返回密钥 +AAAAAAAA/AAAAAA+AAAAAAAAAA=
                            • @GrafOrlov 真奇怪。也许他们在一些新的 FB SDK 版本上有一个错误。你应该向他们报告。
                            【解决方案22】:

                            在你的应用中运行这个:

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

                            然后查看日志。

                            结果应该以“=”结尾。

                            解决方案基于herehere

                            【讨论】:

                              【解决方案23】:

                              你可以用这个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
                              

                              【讨论】:

                              • @Elynad 是中文 :D
                              【解决方案24】:

                              您可以从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) }
                              }
                              

                              【讨论】:

                                【解决方案25】:

                                对于 Windows:

                                1. 打开命令提示符并粘贴到命令下方

                                keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%.android\debug.keystore | openssl sha1 -二进制 | openssl base64

                                1. 输入密码:android -->按回车

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

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

                                4. 现在使用 Facebook 登录/分享等测试您的 android 应用。

                                【讨论】:

                                • 我已经生成了密钥哈希,但不知道该把密钥放在哪里,您能指导我吗?我在 Ubuntu 上运行 android studio。
                                • 嗨,我可以在我的主要活动中通过代码生成哈希键,但生成的哈希键只能在单个设备上使用。当我在另一台设备上安装相同的 apk 并运行时,它显示无效哈希键错误。有什么我想念的吗?
                                【解决方案26】:

                                Download 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 位长度的数字。

                                【讨论】:

                                • 我还没有看到原始答案已经有 openssl 链接。但它对系统变量仍然有用。
                                • 我已经生成了密钥哈希,但不知道该把密钥放在哪里,你能指导我吗?我在 Ubuntu 上运行 android studio。
                                • 当然,你确定你生成了28个长度的数字吗?如果是这样,现在您必须前往 facebook developer(在 google 上搜索)站点并创建一个新应用程序,在设置下,您可以添加一个新的 Android 应用程序,在那里粘贴您的 keyhash 和您的活动名称(登录代码所在的位置) )。 Theres a tutorial about it on facebook too
                                • 感谢您的快速回复,我会尽快尝试
                                【解决方案27】:

                                要在本地计算机上生成密钥哈希,请针对 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 网站

                                【讨论】:

                                • 我已经生成了密钥哈希,但不知道该把密钥放在哪里,你能指导我吗?我在 Ubuntu 上运行 android studio。
                                【解决方案28】:

                                我就是这样得到了我的:

                                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 将 RIGHT 键放入此异常中。您需要做的就是复制它。

                                【讨论】:

                                • 我已经生成了密钥哈希,但不知道该把密钥放在哪里,您能指导我吗?我在 Ubuntu 上运行 android studio。
                                【解决方案29】:

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

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

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

                                【讨论】:

                                • 我已经生成了密钥哈希,但不知道该把密钥放在哪里,你能指导我吗?我在 Ubuntu 上运行 android studio。
                                【解决方案30】:

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

                                如果您在 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 上您的应用首选项内的 android key hash 字段中。要到达那里,请转到 developers.facebook.com/apps,选择您的应用程序,转到 Edit settings 并向下滚动。之后,等待几分钟,直到更改生效。

                                【讨论】:

                                • 我在 cmd 中运行它,它输出了一个很长的字符列表,看起来像一个以 = 符号结尾的哈希,然后什么都没有 $ keytool -exportcert -alias androiddebugkey -keystore "C:\Users\.android \debug.keystore" | "C:\OpenSSL\bin\openssl" sha1 -binary |"C:\OpenSSL\bin\openssl" base64
                                • 听起来正确。刚刚在我的机器上测试过,对我来说是 28 个字符,只是为了给你一个想法。现在只需复制它就可以了。 :)
                                • 我没有被提示使用 pharse android。对不起,我反应慢了吗?
                                • 老实说,我不确定您为什么没有收到提示。但这对我来说听起来是正确的。我的意思是,如果您做错了什么,则应该有一条错误消息。把它复制过来,看看它是否有效。您可以使用Graph API Explorer 测试一些图形查询。在顶部选择您的应用程序,看看您是否获得有效结果。如果有问题,它应该吐出错误。编辑:蜜蜂慢一点也没有错。我们并不着急。 :)
                                猜你喜欢
                                • 2012-04-19
                                • 2014-01-30
                                • 1970-01-01
                                • 2012-01-30
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 1970-01-01
                                • 2013-11-29
                                相关资源
                                最近更新 更多