Android 如何创建Facebook密钥哈希?

Android 如何创建Facebook密钥哈希?,android,facebook,facebook-android-sdk,Android,Facebook,Facebook Android Sdk,在Facebook android教程中,我们被告知使用以下代码创建密钥哈希: keytool-exportcert-alias androiddebugkey-keystore~/.android/debug.keystore | openssl sha1-binary | openssl base64 这是所有情况下都要使用的代码吗?例如,它应该类似于C:/folderone/foldertwo/.android/debug.keystore,而不是~/.android/debug.keys

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


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

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

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

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



在eclipse中,窗口首选项Android构建默认调试密钥库,复制路径以替换
~/.Android/debug.keystore
您可以用这种方式创建

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

输入keystorepassword:android

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

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

@Override 
public void onFacebookError(FacebookError error) {
   Log.d("myTag",error.getmessage); 
 }
执行该应用程序(该应用程序使用与我在市场上使用的相同的密钥进行签名),LogCat上将在该标签下显示一条带有正确密钥的消息

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

试试看

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

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

如果您没有为openssl和javasdk设置环境变量,请将jdk的bin文件夹路径替换为keytool,将openssl路径替换为openssl,并且不要忘记为路径加双引号


例如-“C:\Program Files\Java\jdk1.5.0\u 11\bin”-exportcert-别名androiddebugkey-密钥库“C:\Users\amin.android\debug.keystore”|“F:\openssl\binsha1\openssl.exe”-binary |“F:\openssl\binsha1\openssl.exe”base64

一个暴力选项是继续并尝试从应用程序共享一些东西。然后,我的应用程序将显示一个Facebook页面,其中包含它试图匹配的密钥。然后你可以复制这个密钥并将它放在开发者Facebook帐户的Facebook“设置”页面中


不太理想,但在必要时可能会有所帮助。

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

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

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

  • 您可以使用以下代码段

     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);
     }
    
  • 你可以通过粘贴你的SHA1为Facebook在线创建哈希键


  • 快乐编码:)

    你需要谷歌的openssl。。。按照[link][1][1]中给出的步骤进行操作:您可以在这里看到真实的示例。您应该在这里找到Avi的答案。首先,如果您的openssl.exe不在路径中,您将无法以这种方式调用它(keytool也是如此)。第二,最后一部分是“openssl base64”。MacOS:keytool-exportcert-别名androiddebugkey-keystore~/.android/debug.keystore | openssl sha1-二进制| openssl base64密码:android包括必要的:导入android.content.pm.PackageInfo;导入android.content.pm.PackageManager;导入android.content.pm.PackageManager.NameNotFoundException;导入android.content.pm.Signature;导入android.util.Base64;导入android.util.Log;
     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);
     }