如何创建Facebook密钥哈希?

时间:2012-04-06 10:07:43

标签: android facebook facebook-android-sdk

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

  

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

这是在所有情况下使用的确切代码吗?例如~/.android/debug.keystore应该是C:/folderone/foldertwo/.android/debug.keystore而不是{{1}}?

正如您所看到的,我不确定是否需要引号,是否需要完整路径!

有人能够提供真实世界的例子吗?

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

9 个答案:

答案 0 :(得分: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的唯一解决方案

答案 1 :(得分:11)

你可以这样创造

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

输入密钥库密码:android

答案 2 :(得分: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";
    }

答案 3 :(得分:2)

在eclipse中,窗口 - &gt; 偏好 - &gt; Android - &gt; 构建 - &gt; 默认调试密钥库,复制路径以替换~/.android/debug.keystore

答案 4 :(得分: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

其中&#34; ***&#34;是你需要使用的关键。

答案 5 :(得分:1)

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

在DialogListener类中的

我修改了onFacebookError方法:

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

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

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

答案 6 :(得分:1)

keytool -exportcert -alias androiddebugkey -keystore“debug.keystore path”| openssl sha1 -binary | 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”-binary | “F:\ openssl \ binsha1 \ openssl.exe”base64

答案 7 :(得分:1)

一个强力选择就是继续尝试与您的应用分享内容。我的应用程序然后显示一个Facebook页面,其中包含它正在尝试匹配的密钥。然后,您只需复制此密钥并将其放在开发人员Facebook帐户的Facebook“设置”页面中即可。

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

答案 8 :(得分: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粘贴到This link

    来为Facebook Online创建Hashkey

快乐编码:)