Я создал подписанный APK с помощью Android Studio и добавил в консоль разработчика Google и консоль Facebook свой отпечаток SHA1 и относительные ключи API в своем приложении. Все работает хорошо, если я загружаю свой подписанный apk через USB, после установки API карт и facebook API работают хорошо. Если я загружаю тот же apk в Play Store, когда я пытаюсь войти в систему через Facebook, он говорит: «Неверный хэш ключа. Хеш ключа blablabla не совпадает ни с одним из сохраненных ..». Поэтому, если я войду без Facebook, я даже не смогу получить свои карты Google; это наводит меня на мысль, что apk, загруженный в магазин игр, меняет его отпечаток пальца или что-то в этом роде. Я проверил все материалы на Android Developers и Stackoverflow, но не могу заставить его работать, потому что странно то, что этот подписанный apk-релиз работает хорошо, пока я не загружу его в Play Store.
Опубликованное приложение в Play Store не может обмениваться данными с Google Maps API и Facebook API.
Ответы (6)
Вдохновленный @Andy Developer, я смог отобразить карту после того, как мое приложение было загружено в Google Play. Это были шаги:
- Загрузите свое приложение в Google Play (подписанный APK-файл)
- После отправки и утверждения приложения выберите его в консоли Google Play.
- Перейдите в раздел Инструменты разработки -> Управление версиями -> Подписание приложений.
- Скопируйте первый сертификат SHA-1, выданный Google Play после загрузки приложения.
- Перейдите в Google Console и выберите свой проект.
- Выберите свой API-ключ, ограничьте свой ключ и вставьте SHA-1 после имени пакета.
- Нажмите Сохранить, подождите пару минут. и ваше приложение должно показывать Карты Google.
Вот ответ, почему вы не видите Карту Google.
Недавно я загрузил APK в магазин Google Play и столкнулся с той же проблемой после проверки консоли Play. Я нашел решение этой проблемы.
У них нет проблем с вашим ключом, но проблема с вашим SHA-1. Вы подписали свой APK с помощью SHA-1, это нормально, а затем загрузили APK, это тоже нормально.
Но согласно новому обновлению для Play Console, когда вы подписываете свой APK с помощью SHA-1 и загружаете APK, он подписан только вами, но согласно новому обновлению он также подписывается Google Play для большей безопасности. Посмотрите здесь часть раздела Google Play:
С помощью подписи приложения Google Play: вы подписываете свое приложение своим ключом загрузки. Затем Google проверяет и удаляет подпись ключа загрузки. Наконец, Google повторно подписывает приложение с помощью исходного ключа подписи приложения, который вы предоставили, и доставляет ваше приложение пользователю.
Вы можете найти документацию здесь.
Теперь ответ на ваш вопрос. После успешной загрузки APK вы можете видеть, что в разделе с двумя SHA-1 1-й SHA-1 создан Google самостоятельно, а 2-й SHA-1 это ваше.
Поэтому просто скопируйте Google SHA-1 и вставьте его в свою консоль, где вы сгенерируете ключ Google Map API.
Я, наконец, решил, проблема, вероятно, заключалась в том, что файл google_maps_api.xml, предоставленный API, не был загружен в выпуске, поэтому i
я сделал так:
buildTypes {
debug {
manifestPlaceholders = [mapsKey: "AIzaSyB8o9KzQ5YN8U8AFS************"]
}
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
manifestPlaceholders = [mapsKey: "AIzaSyApLacqgkdIR7uEpcf*****************"]
}
}
а затем в моем AndroidManifest
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="${mapsKey}" />
Ссылка: https://stackoverflow.com/a/33917692/3235560
затем я зарегистрировал 2 разных ключа, каждый с правильным отпечатком sha1, один отладочный, а другой предоставленный консолью Google Play (не сертификат загрузки, а другой, сгенерированный Google).
Очень-очень большое спасибо Zuhad и Andy Developer за вдохновение.
Типы сборки отладки и выпуска вашего приложения подписываются двумя разными ключами.
Вам необходимо зарегистрировать оба ключа в Google Maps и Facebook, чтобы они разрешили доступ к своим сервисам.
cat deployment_cert.der |openssl sha1 -binary | openssl base64
, и она дала мне ключ API для входа в Facebook, который теперь работает, но я не могу заставить работать Карты. В файл под /app/src/release/res/values/google_maps_api.xml я добавил ключ, предоставленный из консоли Карт, в котором я также зарегистрировал отпечаток sha1 из моего собственного сертификата (сгенерированный из студии Android) и отпечаток sha1 из консоль play store, но она не работает
- person exrezzo; 21.06.2017
Да, очевидно, что карта не будет загружаться в подписанном APK.
Решение:
Когда вы генерируете ключ API в консоли Google API, вам необходимо ограничить ключ с помощью ключа SHA.
Но после создания подписанного APk вам нужно взять ключ SHA режима выпуска и добавить в консоль API для API< img src="https://i.stack.imgur.com/dhFb9.png" alt="введите здесь описание изображения">
Я прикрепил изображение, посмотрите
Надеюсь, поможет.
buildTypes { debug { manifestPlaceholders = [google_map_key: "AIzaSyB8o9KzQ5YN8U8AFSxbTJLheFiubF****"] } release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' manifestPlaceholders = [google_map_key: "AIzaSyApLacqgkdIR7uEpcf7EDuGvsQlgh*****"] signingConfig signingConfigs.config }
- person exrezzo; 21.06.2017
Чтобы Facebook сгенерировал хэш-ключ, используйте следующий код:
try {
PackageInfo info = getPackageManager().getPackageInfo(
"YOUR PACKAGE NAME",
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 и двигайтесь вперед.
Надеюсь, поможет:)