invalid key hash. the key hash does not match any

2019-02-07 15:30发布

I'm developing an Android application that uses Facebook Authentication. In debug mode, i use the debug key hash generated by the code:

try {
            PackageInfo info = getPackageManager().getPackageInfo(
                    "com.org.package", PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                String sign = Base64
                        .encodeToString(md.digest(), Base64.DEFAULT);

                    Log.e("MY KEY HASH:", sign);

            }
        } catch (NameNotFoundException e) {
        } catch (NoSuchAlgorithmException e) {
        }

Now I want to publish my app in Google play store, so i need to generate a release key hash. I used the method mentioned in facebook developers doc which is:

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64

For the RELEASE_KEY_PATH it's the path of kaystore generated when exporting project to apk.

I added the hey hash generated to facebook app but i still have the error:

invalid key hash. the key hash does not match any stored key hashes facebook android.

When i add the hey hash generated by java code it works, but i can't do it for each device, i need to publish my app so that every one can use it.

What is the solution? Please help me.

1条回答
爷的心禁止访问
2楼-- · 2019-02-07 16:25

I have solved my problem :D

So to have the release key hash, you need to install the apk file in your Android emulator, and add the key generated by the following code to your Facebook app:

try {
            PackageInfo info = getPackageManager().getPackageInfo(
                    "com.org.package", PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                String sign = Base64
                        .encodeToString(md.digest(), Base64.DEFAULT);

                    Log.e("MY KEY HASH:", sign);

            }
        } catch (NameNotFoundException e) {
        } catch (NoSuchAlgorithmException e) {
        }

Good luck!!

查看更多
登录 后发表回答