Android的Facebook集成无效的密钥哈希

你好所有在我的应用程序之一,我需要得到FB的数据…我正在做的..

我已经创build的应用程序ID成功login,但login后,我login然后它给了我

无效的密钥哈希错误Facebook的屏幕截图

我在做什么错? 请build议我使用Facebook的SDK …我已经在我的手机安装了Facebook …这在运行良好的模拟器,没有内置的Facebook应用程序安装

这是我的代码

if (FB_APP_ID == null) { Builder alertBuilder = new Builder(this); alertBuilder.setTitle("Warning"); alertBuilder.setMessage("A Facebook Applicaton ID must be " + "specified before running this example: see App.java"); alertBuilder.create().show(); } // Initialize the dispatcher Dispatcher dispatcher = new Dispatcher(this); dispatcher.addHandler("login", LoginHandler.class); dispatcher.addHandler("stream", StreamHandler.class); dispatcher.addHandler("logout", LogoutHandler.class); // If a session already exists, render the stream page // immediately. Otherwise, render the login page. Session session = Session.restore(this); if (session != null) { dispatcher.runHandler("stream"); } else { dispatcher.runHandler("login"); } 

生成哈希键是错误的。 您可以使用两个步骤获得散列键。 一个是通过命令提示符。 另一个是通过编码。 通过命令提示符哈希键只在第一次工作。 我不知道原因。 我也有同样的问题。 所以我试图通过编程。

按照下面的步骤:

将下面的代码粘贴到oncreate()

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

在上面的代码中用你的包名修改“com.example.packagename”而不会失败(你可以在Android Manifest文件中find你的包名)。

运行你的应用程序 转到您粘贴上述代码的活动。 在logcat中search“KeyHash”。 你可能会发现一个关键的散列。 复制密钥散列并转到Facebook应用程序仪表板页面。 转到设置并input细节,如下图所示。

在这里输入图像描述

一旦你完成上述步骤。 重新启动应用程序,你现在可以login到Facebook。 有关密钥散列的更多详细信息,请查看链接

如果在设置页面中添加了错误的信息意味着会出现一些错误。 所以在那里使用正确的信息。 此外,如果公众(除了您)需要使用您的应用程序,则需要启用权限(change "yes" in the "Status & Review" next to setting)

如果您遇到这个问题,请将此密钥放入您的developer.facebook.com

在这里输入图像描述

然后确保你的应用程序是活着

developer.facebook.com

这个绿色的圆圈表示该应用程序正在运行

在这里输入图像描述

如果不是,那么请按照这两个步骤让您的应用程序生活

步骤1转到您的应用程序 – > 设置 =>并添加联系人电子邮件并应用保存更改

Setp 2然后转到应用程序审查选项,并确保这个切换是的我添加了一个屏幕截图

在这里输入图像描述

注意:如果你想复制hashkey,请检查Logcat中的BlueServiceQueue。

我也遇到了同样的问题。我确信这是由于非常小的错误,是的,这是! 我find了解决scheme。

在我的计算机上生成debugging哈希密钥时,我input了我的系统的密码。但密码应该是以下内容 –
input密钥库密码:“android”
这是我遇到的唯一问题。

—–为了生成debugging密钥哈希,使用这个命令 –

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

—–要生成发布密钥哈希,请使用此命令 –

keytool -exportcert -alias“密钥库的别名”-keystore“您在签署应用程序时密钥库的path” openssl sha1 -binary | openssl base64

执行此命令后提供您的密钥库密码。

我遇到了同样的问题。 我对这种奇怪的行为的可能原因做了一个短的研究,我发现以下几点:

  • 在第一次执行新的Facebook应用程序时, 即使您没有指定任何密钥哈希 ,它也将允许连接/login

  • 对我来说,Facebook提供的教程没有生成正确的密钥哈希,因为它给了错误的configuration 。 执行时:

     keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl base64 

确保你检查了所有的属性 – HOMEPATH ,keystore的存在等。也许你还必须提供密码。

  • 生成正确configuration的是@Mahendran提出解决scheme

  • 另外,如果你看到最初发布的错误( http://i.stack.imgur.com/58q3v.png ),那么很可能你在屏幕上看到关键哈希是你真正的错误。 如果没有其他的工作,尝试在Facebook上input。

我得到了所有这些结果:Windows 7 64位版本,Android Studio 1.2.2,JDK 7。

如果您正在使用Google Play应用签名:

Google Play控制台中打开应用签名部分,获取应用签名证书的 SHA1 ,然后将其转换为base64 ,例如使用以下工具: http : //tomeko.net/online_tools/hex_to_base64.php?lang=en

控制台截图

转换成base64截图

根据Android的Facebooklogin ,您必须提供密钥哈希值。 为了获得它,你将需要用来签署你的应用程序的密钥 。

 keytool \ -exportcert \ -alias YourKeyAlias \ -storepass YourStoreKeyPassword \ -keystore PathToYourKeyStoreFile | openssl sha1 -binary | openssl base64 

我尝试了以上所有内容,并没有帮助我的客户与我的客户! 比我的客户记得他有他的设备上安装的Facebook应用程序。 他删除后,login工作完美。 哈希键已被更改,我用Facebook上的开发人员控制台的旧哈希键replace错误中的键(如上面所build议的),它的工作原理! Facebook应用程序本身可能是问题,所以你最好在装有Facebook应用程序的设备上以及未安装Facebook应用程序的设备上处理这两种情况。

将下面的代码粘贴到您的OnCreate方法

 try { PackageInfo info = getPackageManager().getPackageInfo( "com.example.packagename", PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT)); } } catch (NameNotFoundException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } 

只需修改软件包名称即可。然后转到Log cat并selectDebug search here,然后您将find散列键。 现在复制这个哈希键,然后去developer.facebook.app_id网站,然后编辑您的哈希键,然后按保存。 现在再次运行你的android项目,我认为问题将得到解决。

我遇到了同样的问题。 首先login,很好,但是,无效的密钥哈希。

即使这不是一个团结的线程,我在这里find了我的答案。 所以我会留下我的回答,以防其他人(像我一样偏离)绊倒它。

Facebook SDK for Unity获取错误的密钥哈希。 它从“C:\ Users”你的用户“.android \ debug.keystore”获得密钥,并且在完美的世界中,它应该从你在你的项目中创build的密钥库中获得。 这就是为什么它告诉你关键的散列没有注册。

按照Madi的build议,您可以按照此链接上的步骤find正确的密钥。 只要让他们指向您项目中的密钥库,否则您将无法获得正确的密钥。

经过长时间的研究,我们find了解决scheme。

我们将权限设置为:

loginButton.setReadPermissions(public_profile email);

这是第一次工作,但是当我们重新login到FB,它给了无效哈希错误。

简单的解决scheme是将上面的行更改为:

  loginButton.setReadPermissions(Arrays.asList( "public_profile", "email")); 

它的工作就像一个幸福!

希望这有助于某人。

Facebook应该返回正确的exception,而不是误导性的无效哈希键错误。

这段代码会给你你的Facebook的哈希,但你必须按照这些步骤才能得到释放condidate哈希。 1.将此代码复制并粘贴到主要活动中

 try { PackageInfo info = getPackageManager().getPackageInfo( "com.example.packagename", PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT)); } } catch (NameNotFoundException e) { } catch (NoSuchAlgorithmException e) { } 
  1. 生成签名的apk。
  2. 连接你的手机到笔记本电脑,并确保它保持连接。
  3. 在手机上安装并运行APK,手动将释放apk移动到手机上。

  4. 现在看看Android的logcat(使用filterKeyHash:)你应该看到你的释放Facebook的哈希键。 只需将其复制并粘贴到您的https://developers.facebook.com/apps中即可。;

  5. 现在你可以testing应用程序,它应该工作得很好。

    祝你好运。

我在debugging我的应用程序时遇到同样的问题。 我重写了你在附加图像中划掉的散列(Facebook所说的是无效的),并将其添加到Facebook的开发人员控制台中,以用于重要散列。 只要小心input错误。

这个解决scheme更像是简单的解决方法。

这可能会帮助一些有同样问题的人

  1. 使用下面的代码生成密钥哈希

keytool -exportcert -alias <your_keystore> alias -keystore <your_keystore_file> | openssl sha1 -binary | openssl base64

如何使用keytool

2.在Facebook开发人员的必填字段中粘贴

3.在android studio文件 – >项目结构 在这里输入图像描述

添加签名参数

4.select味道 在这里输入图像描述

select我们创build的签名configuration

5.selectbuild立types 在这里输入图像描述

6.select构buildvariables并构build它

在这里输入图像描述

Facebook使用的不是用于debugging的默认密码和别名。 你需要改变它,它会工作。

 /usr/lib/jvm/jdk1.8.0_66/bin/keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64 

如果你没有改变任何默认的密码,它应该是android。 你也可以在build.gradle文件中configuration它。 但是应该使用相同的别名密码来生成散列。

 android{ signingConfigs { release { storeFile file("~/.android/debug.keystore") storePassword "android" keyAlias "androiddebugkey" keyPassword "android" } } } 

您必须为debugging创build两个密钥哈希,并为发布创build一个哈希。

对于debugging密钥哈希:

在OS X上,运行:

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

在Windows上,运行:

 keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl base64 

debugging密钥哈希源

对于发行键哈希:

在OS X上,运行:( 用你的值replace<>之间的内容)

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

在Windows上,使用:( 用你的值replace<>之间的内容)

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

释放键哈希源

这里的人是很多正确的答案。 就一件事。 粘贴收到散列应用程序 – >设置 – >主要不是通过快速入门教程。

在你的活动的onCreate()方法中使用下面的代码

 try { PackageInfo info = getPackageManager().getPackageInfo( "your application package name", PackageManager.GET_SIGNATURES); for (Signature signature : info.signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT)); } } catch (NameNotFoundException e) { } catch (NoSuchAlgorithmException e) { } 

运行这个代码,这将生成哈希键。 复制这个KeyHash在Facebook应用程序设置 – >保存更改。 然后login您的应用程序。 这将在未来完美的工作。