使用Facebook SDK登录失败无效密钥错误

Asw*_*wan 26 android facebook

在设备上运行时,我使用Facebook Android SDK获得"登录失败错误".我已经做了他们指定的所有事情,比如创建哈希和所有.

错误是:

Facebook授权(5539):登录失败:invalid_key facebook错误:com.facebook.android.FacebookError:invalid_key

Sea*_*nch 25

更新:我写了一篇关于这个问题的更详细的博客文章,并解释了SSO如何导致它:http://sean.lyn.ch/2011/07/android-the-facebook-sdk-sso-and-you/


这个问题很久以来一直在这里得到解答(以及在Facebook Android SDK中),但我将尝试为最终绊倒这个线程的任何人捕获完整的解决方案.

我正在开发使用Facebook Android SDK与PhoneGap和Phonegap Facebook插件结合使用.身份验证步骤工作正常,直到我从模拟器上部署到实际设备.我在跑步时看到的失败adb logcat如下.

D/Facebook-authorize( 2194): Login failed: invalid_key
W/System.err( 2194): com.facebook.android.FacebookError: invalid_key
Run Code Online (Sandbox Code Playgroud)

我不知道为什么这在模拟器上工作但在设备上失败了.我怀疑Facebook有一个全面的政策允许未签名的.apk应用程序,因为它们无法分发.

问题是Facebook需要有关用于签署应用程序的密钥的信息才能允许授权.我不知道的是,当您使用调试密钥库将它们推送到设备时,Eclipse环境会自动对构建进行签名.有关Debug密钥库的详细信息,请参阅Android文档 - 签名应用程序.

为了向Facebook提供有关签名的信息,您需要运行Jay提供的命令(在此处重复):

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

这会生成一个短字符串(可能包含'='或'/'等字符),用于标识称为证书的签名.一旦你有了这个,你需要把它交给Facebook.

Facebook的开发者页面上找到您的应用程序(如果您尚未设置一个,则创建一个新应用程序).进入应用程序摘要页面后,选择"编辑设置",然后选择左侧的" 移动设备 " 和" 设备 ".在Android部分下,您会看到一个Key Hash的框.将上面命令中的证书字符串粘贴到此框中,然后单击"保存".

给它几分钟的宣传,你应该全力以赴!


小智 18

刚刚花了几个小时来解决同样的问题.

导出密钥的哈希值时,请确保指定正确的密钥库和别名.例如:

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

如果您没有使用调试密钥对APK进行签名,请确保keytool引用您的导出密钥库,并且它使用您指定的别名.您可以在Eclipse导出Android应用程序向导屏幕中的"密钥库选择"和"密钥别名选择"屏幕中看到要使用的密钥库和别名.

此外,在应用程序设置的"移动和设备"部分下,我将应用程序设置为"本机应用程序",而不是"HTML 5 /移动网络",因为我正在使用Android应用程序(和iOS应用程序)以及).


Asw*_*wan 9

如果Facebook应用程序安装在设备上,则会引发所描述的错误.

卸载现有的Facebook应用程序并运行该应用程序; 它运作良好.这是一个SDK问题.

  • +1 ...接受你自己的答案并不能使它正确.这可能是一种功能性解决方案,但它不是解决问题根本原因的解决方案. (3认同)
  • Thanx Aswan,这里出现了同样的问题.这是第一次要求在现有应用程序中登录,下次它就消失了.我也试过删除现有的FB应用程序及其工作正常.那么在安装现有应用程序时该怎么办? (2认同)
  • 这是`key`而不是sdk的问题.见@Jay Springfield的回答. (2认同)
  • 这个答案是不正确的.它不应该有复选标记,也不应该超过下面的正确答案! (2认同)
  • 如果您卸载Facebook应用程序,那么您的应用程序将使用旧的WebView身份验证流程.这不是正确的解决方案 (2认同)

met*_*tch 8

您可以使用此Java Android代码生成密钥:

try {
   PackageInfo info = getPackageManager().getPackageInfo("**YOURPACKAGENAME**", PackageManager.GET_SIGNATURES);
   for (Signature signature : info.signatures) {
        MessageDigest md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        Log.i("PXR", Base64.encodeBytes(md.digest()));
   }
}
catch (NameNotFoundException e) {}
catch (NoSuchAlgorithmException e) {}
Run Code Online (Sandbox Code Playgroud)


Ric*_*ich 7

新玩家的另一个陷阱:如果你的密钥库密码错误了

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

它会默默地给出错误的结果(密码错误消息的摘要,我怀疑).

通过中间文件来避免这种情况.也可以使用Linux桌面.

  • 这是我的问题 - 默认的调试密钥库密码是`android` (3认同)