登录错误:登录此应用程序时出现错误。请稍后再试。

90

我遇到了这个错误。当我试图使用Facebook登录我的应用程序时,出现了问题。 第一次进行身份验证时,它能够正常工作。但是在我卸载应用程序后,现在尝试使用Facebook登录时,我会遇到这个错误。

另一个问题:在设备1上进行身份验证并尝试在设备2上使用Facebook登录时,也会遇到相同的错误。

我找到的解决方案:从Facebook应用程序设置中删除应用程序身份验证,可以解决上述情况,但这不是一个好的解决方案,我们如何告诉用户执行此操作呢?

btnFbLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(accessToken != null) {
                    boolean expires = accessToken.isExpired();
                    if(!expires) {
                        performFbLoginOrSignUp(accessToken);
                    }
                } else {
                    LoginButton loginButton = (LoginButton) findViewById(R.id.login_button);
                    callbackManager = CallbackManager.Factory.create();

                    if (loginButton != null) {
                        loginButton.setReadPermissions("public_profile", "email", "user_friends");

                        if (CommonUtil.isConnectingToInternet(LoginActivity.this)) {
                            loginButton.performClick();

                            loginButton.setPressed(true);

                            loginButton.invalidate();

                            loginButton.registerCallback(callbackManager, mCallBack);

                            loginButton.setPressed(false);

                            loginButton.invalidate();
                        } 
                    }
                }
            }
        });

错误页面

在Facebook示例中也存在问题: Facebook示例的GitHub链接

重现步骤

  1. 启动应用并使用Facebook登录认证FB个人资料。

  2. 卸载该应用并重新安装。

  3. 现在尝试使用Facebook登录。

  4. 以上错误将会发生。因为我们已经进行了身份验证,所以不需要访问fb个人资料。但是在这里我们遇到了问题。

  5. 这里已经验证的页面没有显示。

  6. 我正在使用小米红米Note 3设备上的Native FB应用程序


2
这似乎是Facebook SDK的一个错误。自从过去几天以来,许多开发人员都面临着同样的问题。https://developers.facebook.com/bugs/297086380683342/ - Android Mason
我遇到了这个问题。删除应用程序似乎可以解决一次,但是错误会再次发生。 - Patrick Jackson
1
今天早上出现了同样的问题,我的客户现在快要把我踢出去了。 - Ram Mandal
还没有解决。我在 developers.facebook.com/bugs/297086380683342 上附上了屏幕截图。 - Naveen Kumar M
我遇到了这个问题,有解决方案吗?在facebook.com上工作正常。 - tinto mathew
显示剩余2条评论
21个回答

86

错误是由于无效的哈希密钥导致的。

我们可以使用以下命令创建哈希密钥,并在“设置 -> 基本 -> Android哈希密钥”下这里更新相同的内容。

keytool -exportcert -alias ADD_RELEASE_KEY_ALIASE_HERE -keystore ADD_UR_KEYSTORE_PATH_HERE | openssl sha1 -binary | openssl base64

如果需要,可以使用以下命令查找密钥库的发布密钥别名:

keytool -list -keystore ADD_UR_KEYSTORE_PATH_HERE

我也曾经遇到过这样的问题,使用上述的 HashKey 时,如果我直接将发布 APK 安装到设备中,则登录功能能够正常运行。但当我从 Play Store 上载并安装此应用程序时,它会显示相同的登录失败错误。解决方法如下:

  1. 前往发布管理

  2. 选择“发布管理→应用签名”

  3. 您可以在十六进制格式的“应用签名证书”中查看 SHA1 密钥。

  4. 将十六进制格式的 SHA1 密钥复制到剪贴板,并将其转换为 base64 格式。您可以使用此链接来完成转换而不需要包含十六进制 SHA1 的部分。

  5. 前往 Facebook 开发者控制台,在“设置→基本信息→密钥哈希”中添加转换后的密钥。


我的问题是,在一些设备上可以运行,而在其他设备(三星,红米)上无法运行。在将密钥放入开发者控制台后,应用程序会在特定设备(三星,红米)上崩溃。 - jack_07
2
我的应用程序还没有发布,它仍在开发中。我正在创建发布版本并创建发布Keystore,并使用发布Keystore生成sha1哈希密钥。但是,如果安装了Facebook应用程序,则仍无法登录,而在Web登录对话框中没有Facebook应用程序则可以正常工作。请帮助我解决这个问题。@SumiSadic - Krunal Shah
我需要把我的 upload-keystore.jks 文件放在应用程序文件夹里吗? - Ali Yar Khan
我花了几天时间解决这个问题。这个评论非常有用,我建议在Github上也留下这个评论。 https://github.com/AntonioCuevaUrraco/nativescript-facebook-login/issues/14#issuecomment-283402551。尝试在Android根项目中运行gradlew signingReport./gradlew signingReport,找到一些xx-release,然后将SHA1与Github上面的方法进行比较,当你看到它时,你就会明白。这可能会对你有所帮助。 ;) - Junkkung HangHeng
谢谢你,这个救了我!请注意,只有在选择让Google为您处理应用签名(这是推荐的方式)时,您才需要按照前往发布管理→应用签名的步骤进行操作。 - Narcis

68

答案

这里为仍在经历此问题的人提供一些建议。

我通过keytool创建的哈希值似乎是不正确的。 我通过以下方法进行了修复:

如果您已经将应用程序上传到Play商店并启用了“Google Play应用签名”,则有解决方案(至少对我有效):

  1. 登录Google Play控制台
  2. 点击要从中获取哈希的应用程序
  3. 现在,打开左侧的导航栏
  4. 发布下点击设置 > 应用完整性 Navigation drawer in the Google Play Console
  5. 应用签名证书下复制SHA-1证书指纹
  6. 转到http://tomeko.net/online_tools/hex_to_base64.php
  7. 在第一个字段中粘贴SHA-1
  8. 复制输出(base64)下输入字段中的文本
  9. 现在打开developer.facebook.com/apps
  10. 导航到您应用程序的仪表板(我的应用 > 您的应用程序名称
  11. 在左侧导航到设置 > 基本信息
  12. 在此处将Base64文本粘贴到密钥散列enter image description here

这样应该可以解决问题。


更新

上述步骤仍然完全有效。

但如果您不想将密钥粘贴到该网站上,请参考下面的第6,7,8步骤中的替代方法:

以下是一个Node.js单行命令,可以完成相同的操作:

node -e 'console.log(Buffer.from(process.argv[1].split(":").map(hex => parseInt(hex, 16))).toString("base64"))' '5E:8F:16:06:2E:A3:CD:2C:4A:0D:54:78:76:BA:A6:F3:8C:AB:F6:25'

贡献者:mifi



按照您提到的步骤解决了这个问题。非常感谢,您节省了我的时间 :-) - Abhijit Kurane
这是唯一解决我的问题的答案。我正在执行Facebook入门指南中所说的步骤,但仍然失败。我有这个问题已经好几年了,直到今天,唯一有效的代码是那个将十六进制转为Base64的网站提供的代码。 - Otuyh
你的回答解决了我的难缠Facebook错误问题。 - Odai A. Ali
基本上,如果您将aab上传到Google Play并由Google Play签名,则生产签名密钥将与使用本地构建中的密钥的dev不同。因此,您需要添加哈希密钥:一个用于dev,另一个用于生产。 - Xin Meng

38

我也遇到了这个问题。请在 Facebook 上更新你的密钥哈希。


2
但对我来说问题还没有解决。请查看此链接 https://developers.facebook.com/bugs/297086380683342/,这里有很多成员面临同样的问题。我提供了重现步骤,请按照步骤进行重现。 - Naveen Kumar M
1
你使用的是哪个SDK版本? - Lokesh Mehta
1
我刚刚评论了@Naveen提供的链接中的错误。 "其他遇到这个错误的人是否需要输入密码来获取调试密钥哈希?当我按照Facebook教程时,我在使用Mac时不需要输入密码。然后我回家,在Linux上查找如何获取哈希。这次我必须输入密码“android”,在将此密钥放入Facebook开发者控制台后,我能够正确地使用登录/注销功能。" - NineToeNerd
@NineToeNerd,感谢您的评论。但是这个问题与哈希密钥无关。它完全与Facebook原生应用程序有关。它目前在某些设备上正常工作,例如Nexus、三星。但是红米手机存在问题。 - Naveen Kumar M
在Facebook修复了错误。实际的错误信息是从Facebook发送错误。现在他们找到并修复了,会发送“无效哈希密钥”错误。我为调试和发布创建了一个新的哈希密钥,现在它可以正常工作。谢谢你的答案。 - Naveen Kumar M
显示剩余4条评论

10
  1. 生成 .apk 文件
  2. 打开包含 .apk 文件的终端
  3. 要记住,您必须为发布版和调试版分别生成两个不同的 SHA1 密钥。例如,只需使用 debug.apk 和 release.apk 运行以下命令:
  4. 运行 keytool -list -printcert -jarfile yourapkname.apk
  5. 您将得到以下内容:

MD5:00:00:A0:00:00:00:72:00:00:B9:00:00:00:3D:00:00

SHA1: 00:00:94:00:67:00:FA:00:4E:00:CE:80:00:1A:00:00:00:00:00:00

SHA256:00:00:00:34:00:00:00:00:00:00:00:00:00:00:00:00:56:00:F5:00:00:49:00:4A:00:00:00:00:00:00:00:00

  1. 复制SHA1,打开http://tomeko.net/online_tools/hex_to_base64.php
  2. 粘贴到十六进制字符串中,您的密钥哈希值将在输出(base64)
  3. 复制您的密钥哈希值并添加到developers.facebook.com上的应用程序设置中

3
谢谢 @Rasheed Qureshi,我尝试了所有方法,但是你的方法救了我。 - Arun Wilson
1
确认在2022年11月可用 - 我最初是在本地计算机上生成的,但Facebook不喜欢它们。我使用了这种方法,立即解决了问题!BOOYA。 - Andy

6

我通过替换密钥散列值解决了相同的问题。

如何为发布生成密钥散列值。 打开Chrome浏览器控制台,将十六进制地图键转换为base64

从Google Play控制台复制SHA1密钥。

> btoa('a1:43:d4:27:c8:04:rr:fr:2g:3b:tg:b5:et:c1:4a:1t:fr:f5:54:5f'.split(':').map(hc => String.fromCharCode(parseInt(hc, 16))).join(''))
< "g5fGIBgB6noFO9ur78BdEr73KG6="

我尝试了其他所有方法,但都没有成功。最终,在经过数小时的努力后,我找到了您的解决方案,这对我很有效。感谢@Sujeet Kumar。 - Zeeshan Ali

6
  • 大家好,我遇到了这个问题已经两个月了

最后我找到了解决方案。

  • Follow the Steps and Say in last. "Hurrey"

     1. Complete all process of facebook integration in android.
     2. Create your ***Hashkey (SHA1 key)*** from android 
        - steps : Go to left of Android studio screen and double click on this selected option.
    

enter image description here

    3. Then select SHA1 key from *"debug"* or *"release"* Variant.
       - If you want to do in live app then use *"release"* Varient.
       - other wise use *"debug"* Variant's SHA1 Key.
    4. Then Open the following link: http://tomeko.net/online_tools/hex_to_base64.php and paste SHA1 key.

点击此处

以转换十六进制编码为Base64编码。
    5. Select Output(base64) key which has "=" sign in end of line.
    6. Open your `Developer Facebook` site and Select Integrated App 
       then Go to -> Settings -> Basic -> Key hashes. Add these new key here. 

enter image description here

     7. Done Keep Code.

4

这是来自Facebook的问题。已被Facebook团队确认。

enter image description here

我们预计解决时间为:3天内


你确定吗?这个问题现在解决了吗? - Ganesh AB
是的,那个问题在那个实例上已经解决了。但现在不确定。如果您有任何问题,请在https://developers.facebook.com/bugs/上报告错误。 - Naveen Kumar M

3
  1. Remove app from user settings in Facebook (account).

  2. Uninstall the app.

  3. Get the new hash using the release or new debug keystore. Use this command:

    keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64
    
  4. Add the new hash on Facebook dashboard.


有人知道在 Facebook 上生成发布哈希密钥后,我是否应该删除旧的调试哈希密钥吗? - jerbotron
2
更新了新的哈希密钥后仍然存在相同的问题。 - Naveen Kumar M

3

对我而言,这个错误是由于无效的权限字符串导致的。在iOS和Android上发生过。


这是完美的答案,它就发生了。 - Kishore Kumar
如果此页面列出的解决方案均无法解决问题,请尝试此解决方案:https://dev59.com/3mIj5IYBdhLWcg3waEVe#59316144 - Ketan Ramani

3
我也遇到了同样的问题。
这是我自己的错误。
keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64

当输入此命令时,它提示 输入密钥库密码:。我输入了 keyPassword 而不是 storePassword,但没有生成任何错误消息,而是生成了一个不同的哈希值!

这一定是个玩笑,同样的问题我在这里解决了,谢谢你的解决方案! - ACAkgul

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