Facebook登录时应用程序配置错误:Android Facebook集成问题

时间:2012-09-12 06:46:33

标签: android facebook

我已将我的应用程序与Facebook集成,为此我使用的是Facebook Graph API。我正在检索个人资料和朋友信息。它在我的设备上工作正常,有Android 2.3(姜饼),但最近我的客户在尝试通过我的应用程序连接到Facebook时遇到了问题。他的设备上有Android 4.0(冰淇淋三明治)。当他点击应用程序上的一个按钮将他带到Facebook登录屏幕时,登录后他收到一条消息:

  

我的应用程序配置错误,无法登录Facebook。按Ok转回应用程序而不连接到Facebook。

Facebook error message

我不知道它与Android版本或什么相关的问题。

如何解决此问题?

18 个答案:

答案 0 :(得分:90)

我在Facebook工作,这是一个需要解决的重要问题。这个问题的另一个答案表明,禁用SSO非常糟糕,而且会将您的应用打开到可以窃取用户的Facebook凭据的恶意应用。

黑客在没有SSO的情况下向Facebook启动WebView对话框,用户必须在该对话框中输入他们的登录凭据。恶意应用可以轻松窃取此类信息。始终建议正确实施Facebook SSO以确保您的应用程序安全并保护用户的敏感数据。

在添加此错误消息之前,对话框将自动关闭而不会发出警告并以静默方式失败。我们添加了此错误消息,以便直观地显示您的Facebook应用信息中心中的应用配置存在问题。对于Android,如果您检查LogCat,则在按下" Okay"后会看到,应该会显示一条错误消息,其中会显示有关导致身份验证的更多技术说明失败。

例如,如果您使用我们的Hackbook示例并且未在源中提供您自己的APP_ID并且未将您的哈希键添加到仪表板,那么在按下&#34后,您将在LogCat中看到此错误;好的& #34;在本机SSO对话框中(如果Util.ENABLE_LOG设置为true):

  

D / Facebook-authorize(24739):登录失败:invalid_key:Android密钥不匹配。你的关键" uk3udeH7vrOGNFH2FJjdJbdWJWI"与应用程序设置中指定的允许密钥不匹配。在http://www.facebook.com/developers

检查您的申请设置

我们添加了可视错误消息来帮助您。理论上,这不会破坏先前的实现如果它以开头正确实现。如果您看到此错误消息,则表示您未在your dashboard上正确配置应用设置 仔细检查您的Android类/包名称,Android哈希键等。如果您正确执行了所有操作,则不会看到此消息。

总结,您收到该错误消息,因为您的应用配置存在问题,例如,信息中心中的Android哈希键不匹配。在Facebook添加此错误消息之前,对话框将启动,然后自动关闭并失败。要解决此问题,请检查LogCat是否有任何错误消息,并确保正确实现了所有操作。您可以阅读our documentation以确保一切正确无误。请勿对此问题使用已接受的答案。

您还可以按照Facebook开发者报告的external bug report进行更多更新。

答案 1 :(得分:15)

尝试将其设置为:

首先下载OpenSSL(如果您有64位计算机,则必须下载 openssl-0.9.8e X64 ,而不是最新版本,openssl-0.9.8k X64,因为输出无效)。提取文件,创建文件夹openssl,例如在C:/中复制文件。

找到你的keytoo之路。我的是C:\ Program Files \ Java \ jdk1.7.0_05 \ bin。

找到debug.keystore的路径。如果你在Eclipse中打开,你可以看到路径是什么,菜单 Window - > 偏好设置 - > Android - > Build ,您将看到默认调试密钥库: - 以及路径。

找到openssl的路径。我的是C:\ openssl8e \ bin /.

打开cmd并输入:

“C:\ Program Files \ Java \ jdk1.7.0_05 \ bin \ keytool”-exportcert -alias androiddebugkey -keystore“C:\ Users \ User.android \ debug.keystore”| “C:\ openssl8e \ bin \ openssl”sha1 -binary | “C:\ openssl8e \ bin \ openssl”base64

然后按 Enter

插入密码:android

您将获得debug.keystore的哈希密钥。

导出签名的APK并为应用程序创建密钥库时,只需将cmd debugkeystore别名替换为应用程序的别名,密钥库路径包含应用程序新创建的密钥库的路径并插入app.keystore的密码,您将获得已签名应用的新哈希密钥。

答案 2 :(得分:12)

Jesse Chen的回答很好。 Facebook SDK工作正常,不要破坏它。

我再次遇到这个问题,发现Facebook SDK文档已得到纠正,现在非常好。现在它指导如何调试和释放可以设置的哈希键;就像它说的那样。

以下是我的老故事。缺少可以设置两个哈希键,一个用于调试,另一个用于旧Play Store的已签名,已发布的应用程序。


我在Facebook SDK的文档中发现问题 。它引导我们使用调试密钥哈希并将其放入Facebook的应用程序配置中。哈希被引导以这种方式:

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

当您从Eclipse补充或运行应用程序时,此工作正常。

但是,如果您将应用程序发布到Andoid Play,则必须使用自己的发布者密钥导出已签名的.apk文件。有了这个.apk,Facebook应用程序控制台中的哈希就不再有效了!您必须获取开发人员密钥的哈希值,如下所示:

keytool -exportcert -alias <developer alias> -keystore ~/.android/<developer keystore> | openssl sha1 -binary | openssl base64

将其放入Facebook应用控制台中的Android Key Hash中,以用于已发布的应用程序。之后,SSO再次为您签名的.apk文件工作正常。

答案 3 :(得分:8)

从我可以收集的内容来看,这是一个Facebook问题并且已被报道。但是,问题仍然存在。

解决这个问题(在2.3.3上测试)是破解Facebook SDK,搜索2 授权方法并将 DEFAULT_AUTH_ACTIVITY_CODE 更改为 FORCE_DIALOG_AUTH 即可。这将禁用单点登录功能。

如果您愿意

public void authorize(Activity activity, String[] permissions,
            int activityCode, final DialogListener listener) 

并停用 startSingleSignOn 部分。最好不要这样做,因为最终Facebook会解决这个问题,你只需要把旧的常数放回去。

修改

此解决方案会引发安全问题。检查Jesse Chen的回答。

答案 4 :(得分:5)

我遇到了同样的问题,在花了24小时和大量搜索之后我们使用这种方法来解决我的问题。

  1. 检查您的Xcode项目当前包标识符 例如:com.yourcompanyname.yourappname

  2. 使用相同的com.yourcompanyname.yourappname包标识符在Facebook中创建应用程序,请参阅附件。

  3. enter image description here

答案 5 :(得分:3)

几分钟前我在4.0.4上遇到了这个问题,它似乎已经解决了。

答案 6 :(得分:3)

虽然很晚,但仍然有用: * 以下是corerct的方法(对于调试密钥,相应地更改以便发布): *

keytool -exportcert -alias androiddebugkey -keystore "C:\Users\<User>\.android\debug.keystore" > <Drive letter>:\debug.txt
openssl sha1 -binary "<Drive letter>:\debug.txt" > "<Drive letter>:\debug_sha.txt"
openssl base64 -in "<Drive letter>:\debug_sha.txt" > "<Drive letter>:\debug_base64.txt"

哈希位于最后生成的文件中:debug_base64.txt ....打开它并复制哈希值。

请记住将“”替换为您选择的用户名和驱动器号

答案 7 :(得分:2)

当您创建密钥哈希时,最终可能会得到最后具有等号“=”的内容,例如 ga0RGNYHvNM5d0SLGQfpQWAPGJ8 = 。虽然Facebook很乐意接受等号作为密钥哈希的一部分,但您必须将其删除才能使其正常工作。

此外,请查看Android Facebook SDK 3.0 gives "remote_app_id does not match stored id" while logging in的已接受答案:获取调试密钥库的密钥哈希值时,请使用密码“android”。否则,密钥哈希将是不正确的,你将得到问题中指定的错误(如果它帮助你,那就很好并在那里投票给答案。)

答案 8 :(得分:1)

通常可以通过两次检查来解决此问题:

  • 在facebook控制台中标记发布facebook配置
  • api key mismatches

答案 9 :(得分:1)

在像ubuntu这样的Debian系统上,使用目录keytool下的java /usr/lib/jvm/jdk*.*.*/bin/keytool并生成这样的

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

通过这种方式,您可以获得可以放在facebook的app哈希下的真实哈希键。

答案 10 :(得分:1)

关于使用OWN密钥库签名的应用: 在花了几个小时解决这个问题后,我终于得到了它,并希望为那些仍在受苦的人提供答案:

我的步骤: 我使用自己的密钥库文件(不是debug.keystore)通过eclipse签署了我的应用程序。 通过命令行和已知命令(keytool -exportcert -alias -keystore~ / .android / | openssl sha1 -binary | openssl base64)我成功收到了密钥哈希。 在开发仪表板中粘贴密钥哈希,等待几分钟 - &gt;仍然是相同的错误(如上面的问题中所述)。 我尝试了几个不同的keytools,在几个jdks等等......没有任何改变。

解决方案: 我打开了manifest中的debuggable,打开了facebook sdk中的调试。然后我用我自己的密钥库签署了apk并将其上传到真实设备上。 我通过usb连接设备并打开DDMS透视图来查看设备上的logcat 我启动了我的应用程序并发出错误消息。 它打印出一个与keytool生成的密钥完全不同的密钥。我从logcat中取出这个密钥,将它粘贴到dev仪表板上,然后瞧 - >一切工作

我仍然不知道为什么会发生这种情况或导致错误的密钥,但这种方式对我有用。

答案 11 :(得分:1)

我设法通过确保发布版本具有正确的哈希密钥来解决我在Android上错误配置Facebook的问题。

要获取发布版本哈希密钥,请找到用于签署应用程序的密钥并执行以下操作,插入密钥库别名的名称(不带括号)。如果您不知道别名,可以通过将应用程序导出为已签名的应用程序找到,并且别名位于向导的第二页。同时插入密钥库的路径(不带括号)。

keytool -exportcert -alias [Alias of your keystore] -keystore [Path to keystore] | openssl sha1 -binary | openssl base64

答案 12 :(得分:0)

我遇到了同样的问题,解决方案结果非常简单。当我在仪表板中创建应用程序时,我只添加了android调试密钥库的密钥哈希。如果您在这种情况下通过USB电缆以开发人员的身份安装应用程序,这一切都可以正常工作。

在Play商店中有应用后,您将使用生产密钥对应用进行签名。这也意味着,您必须获得生产密钥的密钥哈希,例如调试密钥,并将其作为第二个哈希添加到本机应用程序哈希列表中。

只是为了记住密钥哈希的工作原理: keytool -exportcert -alias -keystore~ / keys / android_keystore | openssl sha1 -binary | openssl base64

希望有所帮助!

答案 13 :(得分:0)

我有类似的问题,但对于iOS。

解决方案是在Facebook开发人员daskboard上配置Facebook应用程序。

对于iOS,必须完成两件事:

  1. 启用Facebook登录

  2. 捆绑ID必须与应用

  3. 相同

答案 14 :(得分:0)

也遇到了这个问题。

只需访问Facebook开发人员首页here

即可

并按照步骤4 - 使用命令行进行操作。

为我工作。

享受。

答案 15 :(得分:0)

这是一个密钥库问题..将您的eclipse配置为使用为其配置应用程序的相同密钥库。

答案 16 :(得分:0)

我几天前也遇到了同样的错误。在我的情况下,这是由于Android密钥不匹配。以下是我修复它的方法,如果它也可以帮助你:

在Facebook SDK中打开Util.java,设置private static boolean ENABLE_LOG = true;。现在运行您的应用并输入您的电子邮件ID和密码。如果密钥不匹配,Facebook会发回签名。您可以在LogCat中找到此密钥(签名)。只需复制此密钥并将其粘贴到应用信息中心即可。这应该解决问题。请记住将private static boolean ENABLE_LOG = true;设置为false。

答案 17 :(得分:0)

我为异常做了Toast,发现它引发了一个密钥不匹配异常,今天在FB应用页面中添加了密钥并且工作正常