Подписание приложения Google Play - несоответствие KeyHash

Я использую новую подписку на Google Play, чтобы подписать мое приложение, и есть хэш-код несоответствия.

Я включил Facebook Login в свое приложение и сказал, что keyhash недействителен. Выпуск keyhash моего APK отличается от выпуска Keyhash, созданного процессом подписи в Google Play.

EDIT: Шаг, который я сделал:

1) Создал файл keystore jks.

2) Создана версия apk, подписанная с файлом jks.

3) Импортировал APK в Google Console Developer с подпиской на подписку на Google Play, которая изменила подписанный ключ.

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 на панель инструментов Facebook, это не сработает. Кажется, Google Play App Signing изменяет hashkey во время процесса подписания. У вас есть идея решить эту проблему?

Ответ 1

У меня была такая же проблема, и похоже, что, как вы говорите, Google Play Store повторно подписывает ваш apk новым ключом, и это то, что вы должны предоставить Facebook как ключевой хэш (не тот, который генерируется с помощью keytool).

Вторая половина этого ответа полезна fooobar.com/questions/724490/....

В основном вам нужно предоставить Facebook хэш на основе сертификата подписки на сертификат SHA-1, сгенерированного Google, вместо использования keytool и вашего локального ключа (который, кажется, сейчас используется только для загрузки в Google).

Ответ 2

Вы должны использовать ключ SHA-1, сгенерированный Google. Следующие шаги это исправят.

1). Перейдите в консоль Google => Управление релизами => Подписание приложения => Сертификат подписи приложения.

2). Скопируйте сертификат SHA-1 оттуда и в шестнадцатеричном виде, так как он нужен Facebook в base64, поэтому используйте команду, показанную на шаге 3

3). эхо-ключ SHA-1 из шага 2 (шестнадцатеричный) | xxd -r -p | openssl base64
Эта команда не работает в командной строке, используйте bash для windows или git cli.

4). Вставьте ключ base64 в консоль Facebook => Настройки => basic => Хеши ключей

Ответ 3

Вы можете преобразовать хеш SHA-1 в шестнадцатеричном формате (как это найдено в консоли Play) в хеш base64, используя следующую команду (возможно, в Git Bash):

echo 33:4E:48:84:19:50:3A:1F:63:A6:0F:F6:A1:C2:31:E5:01:38:55:2E | xxd -r -p | openssl base64

Выход:

M05IhBlQOh9jpg/2ocIx5QE4VS4=

Этот хеш можно использовать, например, при настройке приложения Facebook. Источник ответа

Ответ 4

Я предполагаю, что вы можете использовать хэш-ключ, созданный для 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. Расположите apk своими jks. Скачайте и установите на свой телефон для тестирования.

Попробуйте это и дайте мне знать. Всего наилучшего. :)

Ответ 5

Недавно нашел это приложение Hasher, которое помогает извлекать хеш-код из sha1 (из консоли Google Play Store) и наоборот.