我的android应用程序中的Facebook登录在发布apk时工作正常,但在play store上发布相同的apk后工作不正常

我的android应用程序中的Facebook登录在发布apk时工作正常,但在play store上发布相同的apk后工作不正常,android,facebook,android-facebook,Android,Facebook,Android Facebook,在我的android应用程序中,我使用了facebook登录。这是我第一次用它 登录功能在版本apk文件中运行良好。此外,我还使用keytool openssl生成了密钥哈希:- keytool -exportcert -alias "MyAppAlias" -keystore "Path to keystore" | openssl sha1 -binary | openssl base64 我在我的Facebook开发者帐户上添加了应用程序设置中生成的密钥哈希。现在,当我生成签名的apk

在我的android应用程序中,我使用了facebook登录。这是我第一次用它

登录功能在版本apk文件中运行良好。此外,我还使用keytool openssl生成了密钥哈希:-

keytool -exportcert -alias "MyAppAlias" -keystore "Path to keystore" | 
openssl sha1 -binary | openssl base64
我在我的Facebook开发者帐户上添加了应用程序设置中生成的密钥哈希。现在,当我生成签名的apk时,Facebook登录工作正常,但在Play Store上发布相同的apk后,Facebook登录不工作,它只是从调用它的位置重定向到活动(我的应用程序的登录活动),没有任何崩溃或响应消息


谢谢。

最后,我解决了这个问题

这个问题背后的原因 在向play商店发布应用程序时,我从Google play进行了应用程序签名,因此在那里创建了新的SHA-1密钥

要查看此键,请转到Google Play控制台,选择您的应用程序,然后发布管理->应用程序签名

在这个页面上,我在“应用程序签名证书”部分获得了新的SHA-1密钥 "

所以,关键是Google Play签名创建了一个新的证书,如上图所示

在Facebook开发者帐户中,我们需要添加密钥库生成的密钥散列。但在这种情况下,我们还需要添加与此应用程序签名证书对应的密钥哈希。现在的问题是,如何获取此证书/SHA-1指纹的密钥哈希

如何从Google Play应用程序签名的SHA-1密钥创建密钥哈希?

要从SHA-1密钥生成密钥散列,请执行一个小型Java程序

// GOOGLE PLAY APP SIGNING SHA-1 KEY:- 65:5D:66:A1:C9:31:85:AB:92:C6:A2:60:87:5B:1A:DA:45:6E:97:EA
            byte[] sha1 = {
                    0x65, 0x5D, 0x66, (byte)0xA1, (byte)0xC9, 0x31, 0x85, (byte)0xAB, (byte)0x92, (byte)0xC6, (byte)0xA2, 0x60, 0x87, 0x5B, 0x1A, (byte)0xDA, 0x45, 0x6E, (byte)0x97, (byte)0xEA
            };
            System.out.println("keyhashGooglePlaySignIn:"+ Base64.encodeToString(sha1, Base64.NO_WRAP));
输出:-

keyhashGooglePlaySignIn: ZV1dkSgxvc2p4aCtFx9tcaQr8N4=
复制此密钥散列并将其粘贴到应用程序的Facebook开发者帐户设置中。我的问题就是这样解决的


感谢所有开发者的评论。:)

我把@vchaps的答案提高了一点。只需将SHA1字符串传递给下面的函数

public void hashFromSHA1(String sha1) {
    String[] arr = sha1.split(":");
    byte[] byteArr = new  byte[arr.length];

    for (int i = 0; i< arr.length; i++) {
        byteArr[i] = Integer.decode("0x" + arr[i]).byteValue();
    }

    Log.e("hash : ", Base64.encodeToString(byteArr, Base64.NO_WRAP));
}
public void hashFromSHA1(字符串sha1){
字符串[]arr=sha1.split(“:”);
byte[]byteArr=新字节[arr.length];
对于(int i=0;i
执行与上述代码相同的操作。

Kotlin代码:

        import android.util.Base64
        import android.util.Log

        fun hashFromSHA1(sha1: String) {
            val arr = sha1.split(":".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
            val byteArr = ByteArray(arr.size)

            for (i in arr.indices) {
                byteArr[i] = Integer.decode("0x" + arr[i])!!.toByte()
            }

            Log.e("hash : ", Base64.encodeToString(byteArr, Base64.NO_WRAP))
        }

在这里复制粘贴SHA1键以减少所有头痛。
在内部,它将十六进制转换为Base 64。

要获得基于Google Play signIn的哈希值,只需将Play Console中的SHA-1键转换为Base 64,然后粘贴到开发者Facebook android配置中即可。
您可以使用此在线转换器:

您是否已在开发者帐户中将您的应用公开?是,我已经公开了。你能确认你是选择通过Google Play应用程序签名还是手动签名发布应用程序吗?试试这个@vChamps,它可能会帮助你确保你已经将你的密钥哈希作为well@Mani我使用我创建的密钥库从android studio生成了签名的apk。然后在Play store上发布时,我发现了一个名为APP SIGNING的链接,所以也在那里签名了。嗨,你能发布完整的java代码来将SHA-1转换为密钥散列吗。我是java新手,在执行上面的代码时几乎没有困难。它非常简单,只有2-3行代码。观察我在答案中所写的字节数组,在每个SHA1键部分前面加上0x。创建此字节数组后,可以使用Base64编码打印它。这一行也是用我上面的代码写的。找不到符号Base64错误即将出现。我已经导入了java.util.Base64I如果您使用@mehmet提到的在线转换器,我发现了一个在线转换器,然后从控制台下载证书并上传它以生成密钥哈希谢谢,这对我有效,而不是对我有效
        import android.util.Base64
        import android.util.Log

        fun hashFromSHA1(sha1: String) {
            val arr = sha1.split(":".toRegex()).dropLastWhile { it.isEmpty() }.toTypedArray()
            val byteArr = ByteArray(arr.size)

            for (i in arr.indices) {
                byteArr[i] = Integer.decode("0x" + arr[i])!!.toByte()
            }

            Log.e("hash : ", Base64.encodeToString(byteArr, Base64.NO_WRAP))
        }