应用配置错误,无法登录Facebook:Android Facebook集成问题


76

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

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

Facebook错误消息

无论是与Android版本有关还是什么,我都没有遇到什么问题。

我该如何解决这个问题?


4
您确定它与SSO无关吗?在未安装FB应用程序的情况下,我也遇到了同样的问题,但是在安装FB应用程序时,出现了以上错误。
Christer Nordvik

4
@ AB1209,接受的答案是您问题的错误答案。请参阅下面的答案,请勿将接受的答案用作您的解决方案。
杰西·陈

2
@JesseChen,非常感谢您的指导。
阿伦·巴多

@ AB1209 hii如果有人想知道他们可能会以错误的方式来做,您能否拒绝接受答案?
BBdev 2012年

1
确实,此错误也发生在Facebook自己的SDK示例中!去搞清楚。
IgorGanapolsky

Answers:


90

我在Facebook工作,这是需要解决的重要问题。针对此问题的另一个答案表明,禁用SSO非常不好,并且会使您的应用程序向可能窃取用户的Facebook凭据的恶意应用程序开放。

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

在添加此错误消息之前,对话框将自动关闭而不会发出警告,并且会以静默方式失败。我们添加了此错误消息,以在Facebook应用程序仪表板上直观地显示您的应用程序配置存在问题。对于Android,如果您检查LogCat,您将看到在按“确定”后,将出现一条错误消息,其中将显示有关导致身份验证失败的更多技术描述。

例如,如果您使用我们的Hackbook示例,而不在源中提供自己的APP_ID,并且未将哈希键添加到仪表板,则在本机SSO对话框中按“确定”后,您会在LogCat中看到此错误(如果Util.ENABLE_LOG设置为true):

D / Facebook-授权(24739):登录失败:invalid_key:Android密钥不匹配。您的密钥“ uk3udeH7vrOGNFH2FJjdJbdWJWI”与您的应用程序设置中指定的允许密钥不匹配。在http://www.facebook.com/developers中检查您的应用程序设置

我们添加了视觉错误消息来帮助您。从理论上讲,如果以开头的正确实现,则不会破坏以前的实现。如果您看到此错误消息,则意味着您没有在仪表板上正确配置应用程序设置。
仔细检查您的Android类/软件包名称,Android哈希键等。如果正确执行所有操作,则不会看到此消息。

总而言之,您收到该错误消息是因为您的应用配置存在问题,例如,仪表板中的Android哈希键不匹配。在Facebook添加此错误消息之前,该对话框将启动,然后自动关闭并失败。要解决此问题,请检查LogCat中是否有任何错误消息,并确保已正确实施所有操作。您可以阅读我们的文档,以确保所有内容均正确无误。请勿将接受的答案用于此问题。

您还可以关注Facebook开发人员报告外部错误报告,以获取更多更新。


5
嗨,我是Facebook的Shireesh。我同意杰西在这里。请不要按照此处接受的答案进行操作。最肯定的是您的应用存在设置问题。记录错误并查看详细信息。它将帮助您在Android和iOS上更正此问题。
Shireesh Asthana 2012年

1
FWIW我也有这个问题。我通过删除所有哈希并重新构建我的开发和生产密钥并将其添加到fb开发门户来解决了该问题。+1的答案
Nirvana Tikku 2012年

1
问题已解决。比您的投入。我是android开发的新手。我提供的解决方案可以“解决”问题,但还提供其他问题。
rmcc 2012年

1
嗯,我相信我的问题是我的Facebook应用程序上只有发布密钥哈希,但是我还需要包括调试密钥哈希,因此当我在调试模式下运行时,它总是给我该错误。虽然我从来没有让logcat给我该信息……
WOUNDEDStevenJones 2012年

2
这个家伙知道他在说什么。我遇到了同样的问题,发现我的令牌/密钥/任何东西都不正确,原因是openSSL的版本错误。一旦修复,此消息就消失了。谢谢杰西!
Evan R.

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。YHou可以看到,如果你在Eclipse中打开,菜单是什么路径窗口- >首选项- > Android的- >构建,你会看到默认的调试密钥库: -和路径。

找到通往的道路openssl。我的是C:\ openssl8e \ bin /。

打开cmd并输入:

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

A然后按Enter

输入密码: android

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

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


2
一个对我有用的解决方案... openssl-0.9.8e X64很重要。
Baseer 2012年

2
我遇到了这个问题,k版本产生了无效的哈希。感谢您找到这个!
SimpsOff 2012年

2
我爱你,这最后没有帮助。
Prateek

12

杰西·陈(Jesse Chen)的回答很好。Facebook SDK可以正常运行,请不要破坏它。

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

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


我发现这个问题在我的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文件。


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的答案。


谢谢,这行得通,但我希望Facebook很快能解决这个问题。
阿伦·巴多

4
大家好,我在Facebook工作,我们不建议您使用此技巧。这是一个安全问题,可能会损害您用户的Facebook凭据。我在下面发布了更详尽的答案。
杰西·陈

5

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

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

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

在此处输入图片说明


这是ANdroid,不是iOS
jesses.co.tt 2014年

3

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


完全一样。我认为Facebook在打h。
Sander van't Veer 2012年

陌生人在这里-我的设备之一显示了此问题。其他登录正常。代码是100%相同。自从他们的IPO以来,一切都变得艰难:)
Vaiden 2012年

我也有同样的问题。当Facebook App。安装此消息显示。
eyal 2012年

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...。打开它并复制哈希。

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


2

创建键哈希时,您可能会得到结尾处带有等号“ =”的内容,例如ga0RGNYHvNM5d0SLGQfpQWAPGJ8 =。尽管Facebook很高兴将等号作为密钥哈希的一部分,但您必须将其删除才能正常工作。

此外,在登录时查看对Android Facebook SDK 3.0给出的“ remote_app_id与存储的ID不匹配”的可接受答案:在获取调试密钥库的密钥哈希时,请使用密码“ android”。否则,密钥哈希将是不正确的,并且您将得到问题中指定的错误(请耐心等待,如果对您有帮助,请在此处将答案投票。)


1

关于使用OWN密钥库签名的应用程序:在花了几个小时解决了这个问题之后,我终于明白了,并想为仍然受苦的人们提供答案:

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

解决方案:我在清单中打开了debuggable,在facebook sdk中打开了调试。然后我用自己的密钥库对apk进行了签名,并将其上传到了真实设备上。我通过USB连接设备并打开DDMS透视图以查看设备上的logcat。
我启动了我的应用,并让错误消息发生。它打印出与keytool生成的密钥完全不同的密钥。我从logcat拿走了这个密钥,将其粘贴到开发仪表板和voila->一切正常

我仍然不知道为什么会这样或是什么原因导致了错误的密钥,但是这种方式对我有用。


1

在Debian系统像Ubuntu使用keytooljava下发现了目录/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的应用程序哈希值下的真实哈希键。


1

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

  • 在Facebook控制台中标记以实时发布Facebook配置
  • api密钥不匹配

1

我设法解决了我在Android上针对Facebook进行错误配置时遇到的问题,方法是确保我具有发行版的正确哈希键。

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

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

0

Toast对异常进行了处理,发现今天抛出了密钥不匹配异常,并在FB应用程序页面中添加了密钥,并且工作正常



0

我只是遇到了同样的问题,结果证明解决方案非常简单。在仪表板上创建应用程序时,我仅添加了Android调试密钥库的密钥哈希。如果您在这种情况下通过USB电缆将应用程序安装为开发人员,则一切正常。

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

只是要记住您密钥哈希是如何工作的:keytool -exportcert -alias -keystore〜/ keys / android_keystore | openssl sha1 -binary | openssl base64

希望有帮助!


0

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

解决方案与在Facebook开发人员面板上配置Facebook应用程序有关。

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

  1. 启用Facebook登录

  2. 套件编号必须与应用程式相同


0

这是密钥库问题。配置您的日食以使用为其配置应用程序的相同密钥库。


为什么使用debug.keystore keyhash?应用发布后,是否不应该使用用于对应用进行签名的密钥库文件中的密钥哈希?
拉米兹·侯赛因

0

几天前我遇到了同样的错误。就我而言,这是由于Android密钥不匹配所致。如果可能的话,这是我修复的方法:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.