2017-06-28 118 views
1

我正在使用新的Google Play应用签名来签署我的应用,并且存在不匹配的密钥哈希。Google Play应用签名 - KeyHash不匹配

我整合Facebook登录在我的应用程序,它说keyhash无效。 我的APK的keyhash版本与Google Play应用签名过程中创建的keyhash版本不同。

编辑:第一步我做:

1)创建一个JKS密钥库文件。

2)创建了一个用jks文件签名的apk版本。

3)在Google控制台开发人员中导入APK,并订阅Google Play App签名以修改签名密钥。

4)一旦网上,我下载并打开应用程序,Facebook的初始化说:无效的密钥哈希

当我检查中通过下面的代码的应用程序的hashkey,散列键是无效hashkey的不同表示通过Facebook:

try { 
     PackageInfo info = getPackageManager().getPackageInfo(
       "com.package", 
       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 (PackageManager.NameNotFoundException e) { 

    } catch (NoSuchAlgorithmException e) { 

    } 

即使我把Facebook上的hashkey说在Facebook的仪表板,它不工作。 似乎Google Play App Signing在签名过程中修改了hashkey。 你有想法解决它吗?

+0

您应该使用单独的密钥散列进行制作,这可以使用您的发行密钥库文件生成。:) – SripadRaj

+0

事实上,我首先使用.jks文件通过android studio签署我的应用程序。它会创建一个APK版本,我将其导入Google Play控制台。我没有看到我错过了什么。 –

+0

我的意思是,您必须使用发行密钥库文件生成Facebook api密钥,就像您获取调试证书的api密钥一样。 – SripadRaj

回答

5

我有同样的问题,看起来像你说的,谷歌Play商店重新签署你的apk与一个新的密钥,这是你必须提供给Facebook的关键哈希(不是生成的使用keytool)。

这个答复的后半部分https://stackoverflow.com/a/44448437/2640599很有用。

基本上,您需要向Facebook提供基于Google生成的SHA-1应用签名证书的哈希,而不是使用keytool和您的本地密钥(它似乎现在仅用于上传到Google)。

+0

非常感谢,它会帮助很多人:) –

0

我猜你可能正在使用为debug.keystore生成的密钥散列。

您必须遵循的步骤

1.生成发行证书的密钥散列。

转到命令行并执行此命令。用适当的值替换<*..*>中的占位符。

keytool -exportcert -alias <*provide an alias here. I recommend to use the same alias that you use for google play app signing*> -keystore _<*your path to the jks certificate*> | openssl sha1 -binary | openssl base64 

该命令将生成密钥散列。

2.复制上述命令生成的密钥哈希值,并将其粘贴到您的Facebook应用程序控制台中,如下所示。

3.签署与您的jks apk。下载并安装在手机上进行测试。

试试这个,让我知道。祝一切顺利。 :)

+0

是的,我在我的步骤中做到了这一点,但是当您使用新的Google Play应用程序时,看起来有点不同https://developer.android.com/studio/publish/app-signing.html –