android facebook整合无效密钥哈希

And*_*oid 178 android facebook

你好,我的一个应用程序,我需要获取fb的数据......我正在这样做..

我已经创建了它成功登录的应用程序ID但在注销后我登录然后它给了我

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

我在做什么错了?请建议我使用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");
}
Run Code Online (Sandbox Code Playgroud)

Mah*_*rai 264

生成哈希键是错误的.您可以使用两个步骤获取哈希键.一个是通过命令提示符.另一个是通过编码.通过命令提示符仅在第一次处理时使用哈希键.我不知道原因.我也遇到了同样的问题.所以我通过编程方式尝试了.

请遵循以下步骤:

粘贴以下代码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) {
}
Run Code Online (Sandbox Code Playgroud)

在上面的编码中使用您的包名称修改"com.example.packagename"(您可能会在Android Manifest文件中找到您的包名称).

运行您的应用程序 转到粘贴上述代码的活动.在logcat中搜索"KeyHash".您可能会找到一个密钥哈希.复制密钥哈希并转到Facebook应用程序仪表板页面.转到设置并输入下图中的详细信息.

在此输入图像描述

完成上述步骤后.重新启动应用程序,您现在可以登录到Facebook.有关密钥哈希检查链接的更多详细信息

如果在设置页面中添加错误信息,则意味着会出现一些错误.所以在那里使用正确的信息.而且,如果公共(除您之外)需要使用您的应用程序,则意味着您需要启用该权限oncreate().

  • 通过这种方式,您很可能获得了调试密钥库的密钥哈希.它适用于您的开发模式,不适用于您的生产模式.至少,它不适用于我的生产应用程序. (19认同)
  • 谢谢你节省了我很多时间... facebook官方文档不应该读它是废话 (3认同)

小智 157

如果您使用的是Google Play App Signing:

在打开应用程序签名部分谷歌游戏控制台,并获得SHA1应用程序签名证书,不是将其转换为BASE64使用该工具,例如:http://tomeko.net/online_tools/hex_to_base64.php?lang=en

控制台截图

转换为base64截图

  • 先生!你是救星!满满的爱.我正在使用Play商店的签名,而我在Facebook的控制台中放置了我本地发行键的哈希值. (13认同)
  • 谢谢!有用!您也可以使用terminal命令:`echo YOU​​R_SHA1_CERTIFICATE_COPIED_FROM_GOOGLE_PLAY | sed s/\:// g | xxd -r -p | base64` (6认同)
  • 你拯救了我的生命,我正在使用反应,没有人提到有关Play商店应用程序的签名 (4认同)
  • 这是生产环境需要做的事情!竖起大拇指! (4认同)
  • 如果我可以向你投票一千次,我会的! (3认同)

Arp*_*tel 114

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

在此输入图像描述

然后确保你的应用程序是

developer.facebook.com

此绿色圆圈表示应用已上线

在此输入图像描述

如果不是,请按照以下两个步骤使您的应用程序生效

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

Setp 2然后转到App Review选项并确保此切换为是我添加了屏幕截图

在此输入图像描述

注意:如果要复制hashkey,请检查Logcat中的BlueServiceQueue.

  • 有没有一种简单的方法从手机复制哈希? (4认同)
  • @DanielShatz在logcat中查找标签`BlueServiceQueue` (4认同)
  • 这个答案对我有用.在手动输入哈希的一些尝试之后,它给了我同样的错误,问题是,我输入大写我"I"而不是小写L"l".花了我一些时间才意识到这一点. (4认同)
  • @DanielShatz它出现在logcat中.我发现只有在我逐字复制后才发现. (3认同)
  • 这是有效的,但我想知道 FB 从哪里获得这个哈希键?没有人好奇吗?错误显示了良好的工作哈希键,但即使使用所有命令,或者从谷歌应用程序签名获取 sha1 到 base64 给了我错误中显示的 FB 密钥......无论如何感谢你的技巧 (2认同)

Aka*_*iya 71

我遇到了同样的问题.我确信这是由于非常小的故障,是的,它是!!!! 我找到了解决方案.

在我的计算机中生成调试哈希密钥时,我输入了我的系统密码.但是密码应该是以下内容 -
输入密钥库密码:"android"
这是我的唯一问题.

-----要生成Debug key hash,请使用以下命令 -

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

输入密钥库密码:'android'

-----要生成释放密钥哈希,请使用此命令 -

keytool -exportcert -alias"密钥库的别名"-keystore"签署应用程序时密钥库的路径"| openssl sha1 -binary | openssl base64

执行此命令后,请提供密钥库密码.

  • 使用"android"作为密码适合我.这令人费解. (4认同)
  • 在生成散列键时使用此"android"作为密码. (3认同)
  • 在Windows计算机上,确保为openssl \ bin和java .. \ bin文件夹正确设置了路径变量。还设置HOMEPATH变量以能够使用来自facebook的命令。 (2认同)

小智 21

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

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

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

    keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl
    base64
    
    Run Code Online (Sandbox Code Playgroud)

确保检查所有属性 - HOMEPATH密钥库的存在,等等.也许你还必须提供密码.

  • 生成正确配置的是@Mahendran建议解决方案.

  • 此外,如果您看到最初发布的错误(http://i.stack.imgur.com/58q3v.png),则很可能您在屏幕上看到密钥哈希是真实的.如果没有其他工作,请尝试在Facebook中输入.

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

  • linux版本:`keytool -exportcert -alias androiddebugkey -keystore $ HOME/.android/debug.keystore | openssl sha1 -binary | openssl base64` (2认同)
  • 只需输入 facebook 在设备屏幕上显示的内容即可。感谢@Martin 的留言 (2认同)

JP *_*ura 12

根据Facebook登录Android,您必须提供Key Hash值.为了获得它,您将需要用于签署您的应用程序的密钥.

keytool \
    -exportcert \
    -alias YourKeyAlias \
    -storepass YourStoreKeyPassword \
    -keystore PathToYourKeyStoreFile | openssl sha1 -binary | openssl base64
Run Code Online (Sandbox Code Playgroud)

  • @Liangjun实际上您应该使用所有密钥,否则您将无法在调试环境中测试Facbeook Login. (2认同)
  • @Pius,是的,我实际上使用了两个键.我应该清楚说明一下. (2认同)

Saj*_*Zeb 12

我是这样解决这个问题的:

首先,您必须获得 SHA-1 值。为此,有两种方法。

在 Android Studio 中获取 SHA-1 值。

  1. 单击摇篮
  2. 点击签名报告
  3. 复制 SHA-1 值

或者

密钥库文件中获取 SHA-1 值。

keytool -list -v -keystore keystore_file_name.jks -alias key0
Run Code Online (Sandbox Code Playgroud)

像这样将SHA-1值复制到剪贴板:

CD:A1:EA:A3:5C:5C:68:FB:FA:0A:6B:E5:5A:72:64:DD:26:8D:44:84
Run Code Online (Sandbox Code Playgroud)

并打开十六进制 -> Base64 字符串解码器将您的 SHA-1 值转换为 Base64。

这正是 Facebook 所需要的。

获取生成的哈希“ ********************= ”并将密钥哈希复制到 Facebook 应用程序。


MBH*_*MBH 8

您必须为Debug创建两个键哈希,为Release释放一个哈希.

对于Debug键哈希:

在OS X上,运行:

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
Run Code Online (Sandbox Code Playgroud)

在Windows上,运行:

keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl
base64
Run Code Online (Sandbox Code Playgroud)

调试键哈希源

对于Release key hash:

在OS X上,运行:( 用<>替换<>之间的值)

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64
Run Code Online (Sandbox Code Playgroud)

在Windows上,使用:( 将<>替换为您的值)

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64
Run Code Online (Sandbox Code Playgroud)

释放键哈希源


Mat*_*han 7

我尝试了上述所有内容,并没有对我的客户有任何帮助!比我的客户记得他在他的设备上安装了Facebook App.删除后,登录工作完美.该hashkey已被更改,我已使用错误中的密钥(如上所述)替换了Facebook开发者控制台上的旧哈希键,并且它可以正常工作!Facebook应用程序本身可能是问题所在,所以你最好在安装了Facebook应用程序的设备上以及未安装Facebook应用程序的设备上解决这个问题并处理这两种情况.

  • 我和你的情况非常相似.帮助我的是转到你的FB页面 - 设置 - 应用程序 - 从列表中删除应用程序.更改哈希键并重新安装fb app和您的应用.现在它有效...... (3认同)

小智 7

尽管这个问题已经以很多有用的方式得到了回答,但我只是想补充一点,当我按照 Rafal Maleks 的回答(使用 Google Play Console 上的哈希键)时,我无法使用应用程序签名 SHA1 密钥,但仍然得到了通用的来自 Facebook 的错误。相反,我需要使用上传证书部分(位于 Google Play Console 上的应用签名部分下方)中的 SHA-1 证书指纹。否则过程相同;

  1. 从Google Play 管理中心的“上传证书”部分复制 SHA-1 证书指纹

  2. 使用以下命令转换 SHA-1:http://tomeko.net/online_tools/hex_to_base64.php并复制输出 (base64)

  3. 将其粘贴到developer.facebook.com 上的Key Hashes 输入中并保存更改。

希望这个答案不是多余的,并且可以帮助那些无法使用应用程序签名证书的人。

现在 Facebook 登录可以在我的应用程序中以调试和发布模式运行。