在设备上运行时,我使用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应用程序)以及).
如果Facebook应用程序安装在设备上,则会引发所描述的错误.
卸载现有的Facebook应用程序并运行该应用程序; 它运作良好.这是一个SDK问题.
您可以使用此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)
新玩家的另一个陷阱:如果你的密钥库密码错误了
keytool -exportcert -alias androiddebugkey -keystore~/.android/debug.keystore | openssl sha1 -binary | openssl base64
它会默默地给出错误的结果(密码错误消息的摘要,我怀疑).
通过中间文件来避免这种情况.也可以使用Linux桌面.
| 归档时间: |
|
| 查看次数: |
34399 次 |
| 最近记录: |