Facebook API登录失败,手机上安装了FB应用程序。

9

我正在开发一款应用程序,需要支持 Facebook。我已经从原始的 Git 存储库中下载了 Facebook API 及其样本“Hackbook”。问题出在登录上 - 如果手机上没有安装原始的 FB 应用程序,则登录会通过自定义对话框进行,并且一切正常,但是如果安装了 FB 应用程序,Hackbook 会自动重定向到原始的 FB 应用程序,然后就无法登录了。我在五部不同的手机上测试过,问题总是一样。

6个回答

18

我曾经遇到类似的问题。在我的情况下,我没有使用签名密钥创建哈希密钥。我只是使用了默认的debug.keystore签名密钥创建了一个哈希密钥。

一旦我使用应用程序发布签名密钥创建了一个哈希密钥,该问题就得到解决了。如果你还没有这样做,请使用你的签名密钥(用于上传到市场)创建一个新的哈希密钥,并将其添加到你的应用程序的 Facebook 控制面板中。

希望这对你有所帮助。


2
@virusss8:你不需要在你的应用程序中添加哈希密钥。按照这个步骤告诉我结果。打开你的facebook-sdk中的Util类文件,将“private static boolean ENABLE_LOG = false”更改为“true”。现在保持你的手机连接到你的开发PC并运行使用签名apk创建的应用程序并登录。保持DDMS窗口打开并查看是否生成错误。 - Siddharth Lele
2
@anddev:不幸的是,这在新的SDK中不起作用。请使用此处“解决方案1”下列出的方法:https://dev59.com/WGrXa4cB1Zd3GeqPApcv#13283088。那样就可以完成任务了。 - Siddharth Lele
@IceMAN 我拿到了哈希密钥。谢谢。你能帮我解决我的问题吗?我在这里发布了我的问题:http://stackoverflow.com/questions/17464648/how-to-get-default-facebook-app-login-session-in-to-our-application-in-android 如果您能给我提供解决方案,那将是非常感激的,请帮帮我。 - anddev
@SiddharthLele 你在GooglePlay上更新了新的apk还是只是在Facebook的AppSettings中替换了哈希密钥?我只是在Facebook上替换了哈希密钥,等了几分钟后尝试了一下(使用之前已发布的应用程序),但仍然无法工作? - AlexAndro
@AlexAndro:不需要更新APK。只需添加新的哈希密钥,一切都应该没问题了。只要正确的签名密钥已用于应用程序以及哈希密钥,就不需要更新APK。它确实需要一些时间来过滤FB的系统。根据我的经验,我等了将近4个小时,我的一个应用程序才开始正常工作。 - Siddharth Lele
显示剩余5条评论

5

我辛苦了两天终于得到了解决方案,但是这种方法是错误的获取哈希密钥的方式 -

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

正确的方法是在命令提示符中逐行输入以下3行。在第一行之后,您将被要求插入密钥库密码。

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

如果您想了解详细信息,正确的方法在这里描述 - http://facebook.stackoverflow.com/questions/13281913/app-is-misconfigured-for-facebook-login-with-release-key-hash 或者在这里 Facebook Android Generate Key Hash

1
为什么你要发错误的文本而不是正确的呢?我差点就用错了,哈哈,但还是感谢你给出了正确版本的链接。 - Cruceo
谢谢!刚刚花了三个小时才解决这个问题。 - Cam Connor

1
在我的情况下,问题是当Facebook应用程序安装在设备上后,即使生成了正确的密钥,用户登录也会被取消。我在登录之前添加了以下行,现在它可以正常工作。
LoginManager.getInstance().logOut();

1
我已经解决了这个问题。在使用 keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64 获取密钥哈希之后,我成功地第一次以发布模式登录了... 然后第二次我遇到了常见的错误 Your key "*********real*key************" does not match the allowed keys specified in your application settings.
只需使用 Facebook 在错误消息中提供的 "*********real*key************",我现在成功地以发布模式登录了。 因此,在输入此密钥时,请确保使用完全相同的密钥。字母 I,小写字母 L(即 l)会给你带来麻烦。我制作了两个密钥,第一个密钥我使用了小写字母 L(即 l),第二个密钥我使用了大写字母 I,并将这些密钥放置在开发人员应用程序中。
现在它正在工作...

这正是我遇到的确切问题...唯一有效的解决方案!而且小写字母“L”的部分是正确的,大写字母“I”也是(在某些字体中可能看起来像小写字母“L”)。 - Matan Dahan

1
使用此函数获取哈希密钥(适用于调试和发布apk),并将其放入开发者.facebook.com/apps中的应用程序中。
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();
    }
}

这对我很有帮助。希望这也能帮到你。

0
在我的情况下,问题是当Facebook应用程序安装在设备上时,即使在Xamarin Android中生成了正确的密钥,用户登录也会被取消。
我在登录之前添加了以下行,它运行得很好。

LoginManager.Instance.SetLoginBehavior(LoginBehavior.NativeOnly);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接