2012-05-09 44 views
9

我正在构建一个应用程序,该应用程序将支持Facebook。我已经从原始的Git回购站下载了Facebook API和他们的样本,称为“Hackbook”。问题出在登录 - 如果原来的FB应用程序没有安装在手机上,登录正在通过自定义对话框,一切正常,但如果安装了FB应用程序,Hackbook会自动重定向到原来的FB应用程序,然后什么也没有发生。无法登录。 我已经在五种不同的手机上测试过,并且总是出现同样的问题。Facebook API登录失败,在手机上安装FB应用程序

回答

18

我有类似的问题。在我的情况下,我没有使用我的签名密钥创建散列密钥。我刚刚使用debug.keystore默认签名密钥创建了一个散列密钥。

只要我使用我的应用程序版本签名密钥创建了一个哈希键,就可以解决这个问题。如果您尚未完成此操作,请使用您的签名密钥(用于在市场上上传)创建一个新的哈希密钥,并将其添加到您应用的Facebook控制面板。

希望这会有所帮助。

+0

我在控制面板中添加了哈希键,但问题仍然存在。我还需要在某处添加散列键吗? – virusss8

+2

@ virusss8:你不需要在你的应用程序中添加hashkey。按照这一步并告诉我结果。在facebook-sdk中打开Util类文件,并将'private static boolean ENABLE_LOG = false'更改为'true'。现在,将手机连接到开发PC并运行使用签名的apk创建的应用程序并登录。保持DDMS窗口打开并查看是否生成错误。 –

+0

D/Facebook授权(25124):登录失败:invalid_key:Android密钥不匹配。您的密钥“********* real * key ************”与您的应用程序设置中指定的允许密钥不匹配。请在http://www.facebook.com/developers 检查您的应用程序设置,但我从未在任何地方设置过该密钥。那个关键是什么? – virusss8

4

我已经辛苦了两天&得到最后的解决方案,这是获得哈希键WRONG方式 -

keytool -exportcert -alias *<your _alias_name>* -keystore *<key_store_path>* | [openssl_bin_directory]\openssl sha1 -binary | [openssl_bin_directory]\openssl base64 

正道是键入以下3行,一个在以cmd为单位的时间。在第一行之后,您将被要求插入密钥库密码。

keytool -exportcert -alias *<your _alias_name>* -keystore *<key_store_path>* > [openssl_bin_directory]\debug.txt 
[openssl_bin_directory]\openssl sha1 -binary [openssl_bin_directory]\debug.txt > [openssl_bin_directory]\debug_sha.txt 
[openssl_bin_directory]\openssl base64 -in [openssl_bin_directory]\debug_sha.txt > [openssl_bin_directory]\debug_base64.txt 

如果你想知道的细节,在这里描述的RIGHT方式 -

http://facebook.stackoverflow.com/questions/13281913/app-is-misconfigured-for-facebook-login-with-release-key-hash

或这里

Facebook Android Generate Key Hash

+1

你为什么要在文本中发布错误而不是正确的?我几乎用它大声笑,但感谢链接到正确的 – Guardanis

+2

@Cruceo,我编辑的帖子,你可以给+1,如果你喜欢它。 – Khobaib

+0

谢谢你只是花了最后3个小时试图解决这个问题 –

1

获取您使用此功能哈希键(debug和release apk),并将其放入developer.facebook.com/a的应用程序中PPS

private void calculateHashKey(String yourPackageName) { 
    try { 
     PackageInfo info = getPackageManager().getPackageInfo(
       yourPackageName, 
       PackageManager.GET_SIGNATURES); 
     for (Signature signature : info.signatures) { 
      MessageDigest md = MessageDigest.getInstance("SHA"); 
      md.update(signature.toByteArray()); 
      Log.d("KeyHash:", 
        Base64.encodeToString(md.digest(), Base64.DEFAULT)); 
     } 
    } catch (NameNotFoundException e) { 
     e.printStackTrace(); 
    } catch (NoSuchAlgorithmException e) { 
     e.printStackTrace(); 
    } 
} 

这帮助了我很多..希望这将帮助你太..

1

我已经修复了这个问题。使用keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64获得密钥哈希后,我已成功首次在发布模式中登录... 然后第二次,我得到了常见错误 您的密钥"*********real*key************"与您的应用程序设置中指定的允许密钥不匹配。

只需使用Facebook提供的"*********real*key************"错误消息,我现在在发布模式下成功登录。 因此,请确保输入此密钥时使用完全相同的密钥。字母I,small(L) i.e (l)会让你陷入困境。我做了两个键,第一个键我用small(L) i.e (l),第二个键我用了I.并将这些键放在开发人员的应用程序中。
它现在正在工作....

+0

这是我的情况确切的问题..唯一的解决方案工作!和关于小'L'的部分是正确的,还有大'我'(这可能看起来像一些字体中的小'L'.. –

0

在我的情况下,问题是,即使在生成正确的密钥后,当facebook应用程序安装在设备上时,用户登录被取消。

我在登录前添加了以下行,它工作的很好。

LoginManager.getInstance().logOut(); 
相关问题