Подписание приложения 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) и наоборот.