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

Android Facebook API登录失败,手机上安装了FB应用程序,android,facebook,facebook-login,Android,Facebook,Facebook Login,我正在开发一个应用程序,它将支持facebook。我已经从最初的Git repos下载了FacebookAPI及其名为“Hackbook”的示例。问题在于登录——如果手机上没有安装最初的FB应用程序,登录将通过自定义对话框进行,一切正常,但如果安装了FB应用程序,黑客手册会自动重定向到最初的FB应用程序,然后什么也没有发生。无法登录。 我已经在五部不同的手机上测试过这个问题,一直都是同一个问题。我也遇到过类似的问题。在我的例子中,我没有使用签名密钥创建散列密钥。我刚刚使用默认签名密钥创建了一个h

我正在开发一个应用程序,它将支持facebook。我已经从最初的Git repos下载了FacebookAPI及其名为“Hackbook”的示例。问题在于登录——如果手机上没有安装最初的FB应用程序,登录将通过自定义对话框进行,一切正常,但如果安装了FB应用程序,黑客手册会自动重定向到最初的FB应用程序,然后什么也没有发生。无法登录。
我已经在五部不同的手机上测试过这个问题,一直都是同一个问题。

我也遇到过类似的问题。在我的例子中,我没有使用签名密钥创建散列密钥。我刚刚使用默认签名密钥创建了一个hash密钥

当我使用我的应用发布签名密钥创建一个散列密钥时,这个问题就解决了。如果您还没有这样做,请使用您的签名密钥创建一个新的哈希密钥(用于在市场上上载),并将其添加到应用程序的facebook控制面板中


希望这能有所帮助。

我辛苦了两天终于找到了解决方案,这是获取哈希键的错误方法-

keytool -exportcert -alias *<your _alias_name>* -keystore *<key_store_path>* | [openssl_bin_directory]\openssl sha1 -binary | [openssl_bin_directory]\openssl base64
keytool-exportcert-alias**-keystore**|[openssl_bin_目录]\openssl sha1-binary |[openssl_bin_目录]\openssl base64
正确的方法是键入这三行,在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
keytool-exportcert-alias**-keystore**>[openssl\u bin\u目录]\debug.txt
[openssl\u-bin\u目录]\openssl sha1-binary[openssl\u-bin\u目录]\debug.txt>[openssl\u-bin\u目录]\debug\u-sha.txt
[openssl\u bin\u目录]\openssl base64-在[openssl\u bin\u目录]\debug\u sha.txt>[openssl\u bin\u目录]\debug\u base64.txt中
如果您想了解详细信息,这里介绍了正确的方法-

还是在这里


使用此函数获取哈希键(debug和release apk),并将其放入developer.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();
    }
}

这对我帮助很大。。希望这对您也有帮助。

我已经解决了这个问题。使用
keytool-exportcert-alias-keystore | openssl sha1-binary | openssl base64
获取密钥散列后,我第一次以发布模式成功登录。。。 第二次我发现了一个常见的错误 您的密钥
“************real*密钥*************”
与应用程序设置中指定的允许密钥不匹配

只需使用Facebook在发布模式下成功登录的错误消息中给出的
“************real*键*************”
。 因此,请确保在输入此键时使用完全相同的键。字母I,
小(L)即(L)
会给你带来麻烦。我做了两个键,第一个键是我用的
small(L),即(L)
,第二个键是我用的,并将这些键放在开发者应用程序中。

它正在工作

在我的例子中,问题是当设备上安装facebook应用程序时,即使生成了正确的密钥,用户登录也会被取消

我在登录前添加了以下行,效果非常好

LoginManager.getInstance().logOut();

我在控制面板中添加了散列键,但问题仍然存在。我需要在fb api的某个地方添加哈希键吗?@virusss8:你不需要在应用程序中添加哈希键。按照此步骤操作并告诉我结果。在facebook sdk中打开Util类文件,并将“私有静态布尔ENABLE_LOG=false”更改为“true”。现在,保持手机与开发PC的连接,运行使用已签名的apk创建的应用程序并登录。保持DDMS窗口打开,查看是否生成错误。D/Facebook授权(25124):登录失败:无效密钥:Android密钥不匹配。您的密钥“**********实*密钥*************”与应用程序设置中指定的允许密钥不匹配。在上检查应用程序设置,但我从未在任何地方设置过该键。这是什么键???这是你应该放在应用程序控制面板中的键。复制日志中显示的密钥,并用DDMS日志中的此密钥替换上一次放置的密钥(使用签名密钥)。@anddev:很遗憾,这在新SDK中不起作用。在此处使用解决方案1下列出的方法:。那就行了。为什么你会在文本中发布错误的内容而不是正确的内容?我差点就用上了,哈哈,但是谢谢你给我的链接,谢谢你给我的链接,谢谢你花了3个小时来想办法,这就是我的问题,唯一有效的解决办法!关于小“L”的部分是正确的,还有大“I”(在某些字体中可能看起来像小“L”)。。