Android Facebook SDK:生成发布密钥哈希

我正在构build一个用户可以使用Facebooklogin的应用程序。

我已经创build了如下的哈希键:

try { PackageInfo info = getPackageManager().getPackageInfo( "com.app.package", PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); Log.d("KeyHash", "KeyHash:"+ Base64.encodeToString(md.digest(), Base64.DEFAULT)); Toast.makeText(getApplicationContext(), Base64.encodeToString(md.digest(), Base64.DEFAULT), Toast.LENGTH_LONG).show(); } } catch (NameNotFoundException e) { } catch (NoSuchAlgorithmException e) { } 

在debugging模式下,一切正常。

当我导出项目发布时,会出现以下错误:

 "Invalid key hash. The key hash ****************** does not match any stored key hashes" 

我粘贴在Facebook开发人员仪表板上打印的键,但应用程序仍然给我这个错误。

我的行为的完整包是“ com.app.package.views ”,我试图在仪表板中使用这个包(作为Google Play Package Name),但没有任何改变。

我该如何解决? 我怎样才能生成正确的释放键哈希?

Solutions Collecting From Web of "Android Facebook SDK:生成发布密钥哈希"

您是否按照Facebook提供的步骤创build了login应用程序?

您需要获得开始您的发行密钥库的“生产密钥”:

从命令行:

 keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64 

并在facebook应用页面选项中添加此密钥。

更多信息: https : //developers.facebook.com/docs/android/getting-started/

我find一个解决scheme。 为MAC

使用这个获取YOUR_RELEASE_KEY_ALIAS:

 keytool -list -keystore /Users/***/Documents/keystore/***.jks 

这一个让你释放keyhash:

 keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore /Users/***/Documents/keystore/***.jks | openssl sha1 -binary | openssl base64 

这个对我有用。

最简单的解决scheme。

1)签署你的Apk。

2)连接你的设备到机器上,并在真实设备上安装签名apk。

3)当facebooklogin被按下时,你会在你的logcat上得到一个错误,说:“密钥散列无效,密钥散列”xxx“与存储的密钥不匹配。

4)复制logcat哈希键,并把这个键到developers.facebook.com/apps/104…../settings/

我们需要用openssl结构中的一个文件的pathreplace“openssl”。

所以,我的CMD命令是:

 C:\Program Files\Java\jre1.8.0_45\bin>keytool -exportcert -alias Informatheus -keystore C:\Users\Atendimento\Dropbox\AndroidKeystore\Keystore | C:\Users\Atendimento\Desktop\openssl\bin\openssl sha1 -binary | C:\Users\Atendimento\Desktop\openssl\bin\openssl base64 

有效。

Facebook SDK使用两个不同的密钥,一个是您可以在开发阶段使用的debugging密钥,另一个是创build签名应用程序包后使用的释放密钥。 这里是一个关于如何创builddebugging和释放键的链接。

Developer.Facebook

也检查这个 SOpost。

//将此方法添加到您的第一个活动并打开日志并searchBase64标记这是Hashkey我箍帮助

 public void getHashkey(){ try { PackageInfo info = getPackageManager().getPackageInfo(getApplicationContext().getPackageName(), PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); Log.i("Base64", Base64.encodeToString(md.digest(),Base64.NO_WRAP)); } } catch (PackageManager.NameNotFoundException e) { Log.d("Name not found", e.getMessage(), e); } catch (NoSuchAlgorithmException e) { Log.d("Error", e.getMessage(), e); } } 
 keytool -exportcert -alias aliasName -keystore C:\my_release_keystroke_info.jks | openssl sha1 -binary | openssl base64