我在设备上运行Facebook Android SDK时遇到“登录失败”错误。 我已经按照他们指定的做了一切,比如创建哈希等。
错误信息是:
Facebook-authorize(5539): 登录失败:invalid_key facebook 错误:com.facebook.android.FacebookError: invalid_key
我在设备上运行Facebook Android SDK时遇到“登录失败”错误。 我已经按照他们指定的做了一切,比如创建哈希等。
错误信息是:
Facebook-authorize(5539): 登录失败:invalid_key facebook 错误:com.facebook.android.FacebookError: invalid_key
更新:我撰写了一篇更详细的博客文章,解释了这个问题,并说明了 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
我不知道为什么这在模拟器上成功了,但在设备上失败了。我怀疑Facebook有一个允许未签名.apk应用的总体政策,因为它们无法分发。
问题是,Facebook需要关于用于签署应用程序的密钥的信息才能允许授权。我不知道的是,当您使用调试密钥库将构建推送到设备时,Eclipse环境会自动签署构建。有关调试密钥库的详细信息,请参见Android文档-签名应用程序。
为了向Facebook提供有关签名的信息,您需要运行Jay在上面提供的命令(在此重复):
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
这会生成一个短字符串(可能包括'='或'/'等字符),用于识别证书的签名。一旦你得到了这个字符串,你需要将它提供给Facebook。
在Facebook开发者页面上找到你的应用程序(如果你还没有设置,请创建一个新的)。进入应用程序摘要页面后,选择“编辑设置”,然后在左侧选择“移动设备”。在Android部分下方,你会看到一个名称为“密钥散列”的框。将上面命令中获得的证书字符串粘贴到此框中,然后点击保存。
稍等几分钟,让其生效即可!
我刚刚花了几个小时解决同一个问题。
当你导出密钥的哈希值时,请确保指定正确的密钥库和别名。例如:
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore
| openssl sha1 -binary
| openssl base64
如果您没有使用调试密钥对APK进行签名,请确保keytool引用了您的导出密钥库,并且它正在使用您指定的别名。在Eclipse导出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) {}
新手的另一个陷阱:如果您在以下命令中输入错误的密钥库密码
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
它将悄无声息地给出错误的结果(我怀疑是密码错误消息的摘要)。
通过中间文件进行操作可以避免这种情况。同时,使用Linux桌面也可能会有帮助。
android
。 - user765140Facebook.FORCE_DIALOG_AUTH
:mFacebook.authorize(
MundialRugby2011Activity.this,
new String[] {"publish_stream", "read_stream", "offline_access"},
Facebook.FORCE_DIALOG_AUTH,
new LoginDialogListener()
);
我曾经遇到过类似的问题(无效密钥),我的解决方法是安装Cygwin(我使用的是64位Windows 7),并在其中重新生成密钥。我得到了一个完全不同的密钥(与PowerShell上的不同),现在我的应用程序可以成功登录。
我浪费了大约四个小时来解决这样一个问题(Windows 7,Eclipse)。keytool实用程序真的很狡猾。我已经安装了Eclipse。
一些keytool技巧:
不要使用Windows shell(CMD)-始终使用Cygwin。从CMD运行keytool只会产生错误的哈希值而不会有任何提示!
请记住,正确的Unix路径分隔符应该是“/”,而不是“\”!