6

在 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

4

9 回答 9

16

尝试

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 的唯一解决方案

于 2013-04-16T11:50:25.400 回答
11

你可以这样创建

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

输入密钥库密码:android

于 2012-04-16T17:04:04.953 回答
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";
    }
于 2014-09-05T09:09:27.900 回答
2

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

于 2012-04-16T16:58:24.233 回答
2

当日志中出现错误时,当尝试登录 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

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

于 2016-10-26T13:41:46.453 回答
1

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

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

于 2014-11-07T06:42:02.633 回答
1

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

于 2013-05-27T09:20:30.797 回答
1

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

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

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

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

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

于 2012-04-18T08:24:40.320 回答
0

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

  1. 您可以使用以下代码片段

     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 来为 Facebook Online 创建 Hashkey

快乐编码:)

于 2020-09-14T07:07:50.517 回答