【问题标题】:How to create a Facebook key hash?如何创建 Facebook 密钥哈希?
【发布时间】:2012-04-19 23:38:40
【问题描述】:

在 Facebook android 教程中,我们被告知使用以下代码来创建密钥哈希:

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -二进制 | openssl base64

这是在所有情况下都可以使用的确切代码吗?例如,而不是~/.android/debug.keystore 应该类似于C:/folderone/foldertwo/.android/debug.keystore 吗?

如您所见,我不确定是否需要逗号,是否需要完整路径!

有人能提供一个真实的例子吗?


https://developers.facebook.com/docs/mobile/android/build/#sso

【问题讨论】:

标签: android facebook facebook-android-sdk


【解决方案1】:

试试

try {
PackageInfo info = getPackageManager().getPackageInfo("com.eatapp", PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
    MessageDigest md = MessageDigest.getInstance("SHA");
    md.update(signature.toByteArray());
    Log.e("MY KEY HASH:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (NameNotFoundException e) {

} catch (NoSuchAlgorithmException e) {

}

在您的主要活动中 :-) 这是适用于 Android SDK 3.0 的唯一解决方案

【讨论】:

  • 必要的包括:import android.content.pm.PackageInfo;导入 android.content.pm.PackageManager;导入 android.content.pm.PackageManager.NameNotFoundException;导入 android.content.pm.Signature;导入 android.util.Base64;导入android.util.Log;
【解决方案2】:

你可以这样创建

keytool -exportcert -alias androiddebugkey -keystore c:\Users\<your windows default user>\.android\debug.keystore | openssl sha1 -binary | openssl base64

输入密钥库密码:android

【讨论】:

  • 此处略有改动。首先,如果您的 openssl.exe 不在 PATH 中,您将无法以这种方式调用它(keytool 也是如此)。其次,最后一部分是“openssl base64”。
  • MacOS: keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -二进制 | openssl base64 密码:android
【解决方案3】:
 /**
     * Generates the hash key used for Facebook console to register app. It can also be used for other sdks) Method copied from: https://developers.facebook.com/docs/android/getting-started/
     */
    public static String printHashKey(Context ctx) {
        // Add code to print out the key hash
        try {
            PackageInfo info = ctx.getPackageManager().getPackageInfo(ctx.getPackageName(), PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                return Base64.encodeToString(md.digest(), Base64.DEFAULT);
            }
        } catch (NameNotFoundException e) {
            return "SHA-1 generation: the key count not be generated: NameNotFoundException thrown";
        } catch (NoSuchAlgorithmException e) {
            return "SHA-1 generation: the key count not be generated: NoSuchAlgorithmException thrown";
        }

        return "SHA-1 generation: epic failed";
    }

【讨论】:

    【解决方案4】:

    在 Eclipse 中,window -> preferences -> Android -> build -> default调试keystore,复制路径替换~/.android/debug.keystore

    【讨论】:

      【解决方案5】:

      当日志中出现错误时,当尝试登录 Facebook 时,查找类似以下内容的内容:

      Invalid key hash. The key hash *** does not match any stored key hashes. Configure your app key hashes at http://developers.facebook.com/apps/565561836797777
      

      其中“***”是您需要使用的密钥。

      【讨论】:

        【解决方案6】:

        我遇到了同样的问题,花了几个小时才找到解决方案,但实际上 Facebook SDK 自己提供了解决方案。

        在 DialogListener 类中我修改了 onFacebookError 方法:

        @Override 
        public void onFacebookError(FacebookError error) {
           Log.d("myTag",error.getmessage); 
         }
        

        执行应用程序(使用我在市场上使用的相同密钥进行签名),LogCat 将在此标签下使用正确的密钥显示消息。

        我们还创建了一个简单的项目,它可以完成所有工作,并在警报框和 LogCat 上返回正确的密钥。你可以在our blog找到它。

        【讨论】:

          【解决方案7】:

          keytool -exportcert -alias androiddebugkey -keystore "debug.keystore 路径" | openssl sha1 -二进制 | openssl base64

          如果您还没有为 open ssl 和 java sdk 设置环境变量,则将 jdk 的 bin 文件夹路径代替 keytool 并将您的 openssl 路径代替 openssl,并且不要忘记为您的路径加上双引号

          ex-"C:\Program Files\Java\jdk1.5.0_11\bin" -exportcert -alias androiddebugkey -keystore "C:\Users\amin.android\debug.keystore" | "F:\openssl\binsha1\openssl.exe" -二进制 | "F:\openssl\binsha1\openssl.exe" base64

          【讨论】:

            【解决方案8】:

            一种蛮力选择是继续尝试从您的应用中分享某些内容。然后,我的应用程序会显示一个 Facebook 页面,其中包含它尝试匹配的密钥。然后,您只需复制此密钥并将其放入您的开发者 Facebook 帐户的 Facebook“设置”页面。

            不理想,但在紧要关头可能会有所帮助。

            【讨论】:

              【解决方案9】:

              有两种方法可以为 Facebook 生成 Hashkey。

              1. 可以使用下面的代码sn-p

                 try {
                     PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
                     for (Signature signature : info.signatures) {
                         MessageDigest messageDigest= MessageDigest.getInstance("SHA");
                         messageDigest.update(signature.toByteArray());
                         String hashKey = new String(Base64.encode(messageDigest.digest(), 0));
                         Log.i("Hash Key ", "value is " + hashKey);
                     }
                 } catch (NoSuchAlgorithmException e) {
                     Log.e("Exception ", "is ", e);
                 } catch (Exception e) {
                     Log.e("Exception ", "is ", e);
                 }
                
              2. 您可以通过将 SHA1 粘贴到 This link 来为 Facebook Online 创建 Hashkey

              快乐编码:)

              【讨论】:

                猜你喜欢
                • 2011-11-22
                • 2014-01-30
                • 1970-01-01
                • 2013-11-10
                • 2018-09-24
                • 1970-01-01
                • 2013-10-21
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多