应用程序被错误configuration为Facebooklogin:Android Facebook集成问题
我已经整合了我的应用程序与Facebook,为此,我使用Facebook的Graph API 。 我正在检索configuration文件和朋友的信息。 它在Android 2.3 (姜饼)我的设备上工作正常,但最近我的客户遇到了问题,而他正试图通过我的应用程序连接到Facebook。 他的设备上有Android 4.0 (冰淇淋三明治)。 当他点击应用程序上的一个button,将他带到Facebooklogin屏幕,login后他得到一条消息:
我的应用程序被错误configuration为Facebooklogin。 按“好”返回到应用程序,无需连接到Facebook。
我不明白是什么问题,它是与Android版本还是什么。
我该如何解决这个问题?
我在Facebook工作,这是一个需要解决的重要问题。 这个问题的另一个答案表明,禁用SSO是非常糟糕的, 将打开您的应用程序,可以窃取您的用户的Facebook凭据的恶意应用程序。
hack在没有SSO的情况下启动一个到Facebook的WebView对话框,用户必须在login对话框中inputlogin凭证。 恶意应用程序可以轻松窃取这些信息。 build议您始终正确实施Facebook SSO,以确保您的应用安全并保护用户的敏感数据。
在添加此错误消息之前,对话框会自动closures而不会发出警告,并以静默方式失败。 我们添加了这个错误信息,直观显示您的Facebook应用程序面板中的应用程序configuration存在问题。 对于Android,如果您检查LogCat ,您会看到在按下“Okay”之后,应该会显示一条错误消息,显示更多有关导致身份validation失败的技术说明。
例如,如果您使用我们的Hackbook示例,并且没有在源代码中提供您自己的APP_ID,并且没有将哈希键添加到仪表板,则在本机SSO对话框中按下“Okay”后,您将在LogCat中看到此错误(if Util.ENABLE_LOG设置为true):
D / Facebook授权(24739):login失败:invalid_key:Android密钥不匹配。 您的密钥“uk3udeH7vrOGNFH2FJjdJbdWJWI”与应用程序设置中指定的允许密钥不匹配。 在http://www.facebook.com/developers上检查您的应用程序设置;
我们添加了视觉错误信息来帮助你。 这在理论上是不会破坏以前的实现, 如果它是正确实施的开始 。 如果您看到此错误消息,则表示您没有在仪表板上正确configuration您的应用设置。
仔细检查你的Android类/包名称,Android哈希键等。如果你做的一切正确,你将不会看到这个消息。
总之 ,您正在收到错误消息,因为您的应用configuration存在问题,例如,仪表板中的Android哈希键不匹配。 Facebook添加此错误消息之前,对话框将启动,然后自动closures和失败。 要解决这个问题,请检查您的LogCat是否有任何错误消息,并确保您的一切都正确实施。 你可以阅读我们的文档 ,以确保你有一切正确的。 不要使用这个问题的接受答案。
您也可以按照Facebook开发者报告的外部错误报告来获取更多更新。
尝试像这样设置它:
首先下载OpenSSL (如果你有一个64位的机器,你必须下载openssl-0.9.8e X64 ,而不是最新版本的openssl-0.9.8k X64,因为输出无效)。 提取你的文件,创build文件夹openssl
,例如用C:/在那里复制文件。
find你的pathkeytoo。 我的是C:\ Program Files \ Java \ jdk1.7.0_05 \ bin。
find你的pathdebug.keystore
。 你可以看到如果你在Eclipse中打开什么path,菜单窗口 – > 首选项 – > Android – > 生成 ,你会看到默认debugging密钥库: – 和path。
find你的pathopenssl
。 我的是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
Aand然后按Enter键 。
插入密码: android
你将得到你的散列键为debug.keystore
。
当您导出已签名的APK ,并为该应用程序创build密钥库时,只需将cmd debugkeystore别名replace为该应用程序的别名,密钥库path以及新创build的应用程序密钥库的path,并为您的应用程序插入密码app.keystore
,你会得到一个新的哈希键为您的签名应用程序。
杰西·陈的回答很好。 脸书SDK工作正常,不要打破它。
我再次遇到了这个问题,发现Facebook SDK文档已被纠正,现在非常好。 现在正在指导如何debugging和释放散列键可以设置; 就像说的那样做。
以下是我的旧故事。 缺less您可以设置两个哈希键,一个用于debugging,一个用于旧Play商店的已签名,已发布的应用程序。
我发现这个问题在我的Facebook SDK的文档中。 它指导我们使用debugging密钥散列并将其放入Facebook的应用程序configuration中。 引导哈希得到这样的方式:
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文件。
从我可以收集,这是一个Facebook的问题,并已被报道。 但是,问题依然存在。
解决这个问题的方法(在2.3.3上testing)是在Facebook SDK上进行攻击,search2个授权方法并将DEFAULT_AUTH_ACTIVITY_CODE更改为FORCE_DIALOG_AUTH 。 这将禁用单点loginfunction。
如果你喜欢的话
public void authorize(Activity activity, String[] permissions, int activityCode, final DialogListener listener)
并禁用startSingleSignOn部分。 最好不要这样做,因为Facebook最终会解决问题,而且你只需要把旧的常数恢复。
编辑
这个解决scheme提出了安全问题。 检查杰西·陈的回答。
我面对同样的问题,花了24小时,大量的search,我们使用这种方法来解决我的问题。
-
检查你的Xcode项目当前包标识符,例如:com.yourcompanyname.yourappname
-
在Facebook中使用相同的com.yourcompanyname.yourappname包标识符来创build应用程序请参阅附件。
几分钟前,我在4.0.4上遇到了这个问题,似乎已经解决了。
虽然晚了,但仍然有用:* 下面是corerct的做法(对于debugging键,相应地更改为释放): *
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 ….打开它并复制散列。
请记住将您的用户名和驱动器盘符replace为“”
当你创build密钥散列时,最后可能会得到一些等号“=”,比如ga0RGNYHvNM5d0SLGQfpQWAPGJ8 = 。 虽然Facebook乐意接受等号作为关键哈希的一部分,但您必须将其删除才能使其工作。
另外, 在login时,请查看Android Facebook SDK 3.0接受的答案: “remote_app_id与存储的ID不匹配” :获取debugging密钥库的密钥哈希值时,使用密码“android”。 否则,密钥散列将是不正确的,你会得到在问题中指定的错误(是好的,如果它帮助你把答案投票)。
关于使用OWN keystore签名的应用程序:花了几个小时解决了这个问题之后,我终于find了答案,并且想要为那些还在遭受苦难的人提供一个答案:
我的步骤:我使用我自己的密钥库文件(不是debug.keystore)通过eclipse签署了我的应用程序。 通过命令行和已知的命令(keytool -exportcert -alias -keystore〜/ .android / | openssl sha1 -binary | openssl base64)我successfulluy收到密钥散列。 粘贴在开发仪表板中的关键哈希,等待几分钟 – >仍然是相同的错误(在上面的问题中指定)。 我尝试了几个不同keytools,在几个jdks等…没有任何改变。
解决scheme:我打开可debugging的清单,打开Facebook的SDK中debugging。 然后我用我自己的keystore签署了apk并上传到真实的设备上。 我通过USB连接设备,并打开DDMS的angular度来看设备上的logcat。
我开始我的应用程序,并让错误信息发生。 它打印出与keytool生成的密钥完全不同的密钥。 我从logcat取得这个密钥,粘贴到开发仪表板,并瞧 – >一切工作
我仍然不知道为什么会发生这种情况,或者是什么导致了错误的关键,但这种方式对我很有用。
在Ubuntu的Debian系统上,使用在/usr/lib/jvm/jdk*.*.*/bin/keytool
目录下find的java
的keytool
,并像这样生成
/usr/lib/jvm/jdk1.7.0/bin/keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
这样你就可以得到真正的哈希键,可以把你的应用程序哈希的Facebook。
通常这个问题可以用两个检查来解决:
- 在Facebook控制台中的标志来发布生活Facebook的configuration
- API密钥不匹配
我设法通过确保我有正确的发行版本的哈希键来解决我在Android上为Facebookconfiguration错误的问题。
要获得发行版本的哈希键,find您用来签署应用程序的密钥,并执行以下操作,插入密钥库别名的名称(不带括号)。 如果您不知道您的别名,可以通过将您的应用导出为已签名的应用程序来find此别名,而别名位于向导的第二页。 还要将path插入到密钥库(不包含括号)。
keytool -exportcert -alias [Alias of your keystore] -keystore [Path to keystore] | openssl sha1 -binary | openssl base64
我做了一个Toast
exception,发现它引发了一个关键的不匹配的例外,今天在FB
应用程序页面添加了键,它工作正常
也遇到过这个问题。
只需到这里的Facebook开发人员入门页面
并按照第4步 – 命令行的东西。
为我工作。
请享用。
我只是遇到同样的问题,解决scheme变得非常简单。 在仪表板中创build应用程序时,我只添加了androiddebugging密钥库的密钥哈希。 如果在这种情况下通过USB电缆将应用程序作为开发者安装,这一切都可以正常工作。
在Play商店中创build应用后,您将使用生产密钥对应用进行签名。 这也意味着,您必须获得生产密钥的密钥哈希值(如debugging密钥),并将其作为第二个哈希值添加到本机应用哈希列表中。
只是为了记住你的密钥哈希是如何工作的:keytool -exportcert -alias -keystore〜/ keys / android_keystore | openssl sha1 -binary | openssl base64
希望有所帮助!
我有一个类似的问题,但对于iOS。
解决scheme是在Facebook开发者daskboard上configurationFacebook应用程序。
对于iOS,必须完成两件事:
-
启用Facebooklogin
-
包ID必须与应用程序相同
这是一个密钥库的问题..configuration你的eclipse使用相同的密钥库为其configuration了应用程序。
前几天我得到了同样的错误。 在我的情况下,这是由于一个Android键不匹配。 下面是我如何修复它,如果它可以帮助你:
在Facebook SDK中打开Util.java,设置private static boolean ENABLE_LOG = true;
。 现在运行您的应用程序并input您的电子邮件ID和密码。 如果密钥不匹配,Facebook会发回一个签名。 你会在LogCat中find这个密钥(签名)。 只需复制此密钥并将其粘贴到应用程序仪表板。 这应该解决这个问题。 记得设置private static boolean ENABLE_LOG = true;
回到错误。