Ответ 1
Возможно, у вас есть два файла google_maps_api.xml, один в папке app/src/debug/res/values, а другой в папке app/src/release/res/values, но только отладочный содержит ваш ключ API.
Приложение google map отлично работает на устройстве с помощью отладочной карты Google Maps API KEY, но когда я создаю подписанный apk для своего приложения с выпуском API карты Google Maps, он не отображает карту. Чтобы создать режим выпуска google API KEY, я использую отпечаток SHA1 с моим хранилищем ключей. И я также определяю "подписи и создания типов" в моих настройках проекта, как объясняется разработчиком .android.com(http://developer.android.com/tools/publishing/app-signing.html).
Пробовал все возможные решения (удаление apk и повторная установка его снова, перезапуск устройства, очистка проекта). ничего не получилось. У кого-нибудь есть хорошее решение моей проблемы, пожалуйста, помогите. FYI Использование платформы для Android.
Возможно, у вас есть два файла google_maps_api.xml, один в папке app/src/debug/res/values, а другой в папке app/src/release/res/values, но только отладочный содержит ваш ключ API.
Ключ API должен быть жестко закодирован в манифесте Android, и он не работает, если он находится в отдельном XML файле ресурсов.
Сертификат отладки отличается от вашего производственного сертификата. Вам нужно добавить оба к своей ключевой записи в Google Maps в консоли API в качестве seaparate row - каждый с одним и тем же packageId, но, естественно, другой хэш SHA1.
ИЗМЕНИТЬ
Нет ограничений на то, сколько отпечатков пальцев сертификата и имен пакетов назначается одному ключу Google Maps, поэтому, если вам не нужно, это разделение отлично подходит для создания и создания сборки с использованием того же ключа. В консоли Google это будет так (один sha1 из сертификата отладки, который будет одинаковым для всех приложений, которые вы создаете с помощью этой IDE, а другой - с сертификатом производства):
83:10:58:52:EF:3B:59:70:2B:28:9E:AE:4F:5E:1D:F0:7E:19:FB:F1;com.foo.bar
AE:4F:5E:1D:F0:7E:19:FB:83:10:58:52:EF:3B:59:70:2B:28:9E:AA;com.foo.bar
или даже (но я не рекомендую использовать тот же ключ для разных приложений):
83:10:58:52:EF:3B:59:70:2B:28:9E:AE:4F:5E:1D:F0:7E:19:FB:F1;com.foobar.myapp
AE:4F:5E:1D:F0:7E:19:FB:83:10:58:52:EF:3B:59:70:2B:28:9E:AA;com.foo.bar
EF:3B:59:7E:19:FB:83:10:58:57:AE:4F:5E:1D:F0:2B:28:DE:9E:01;net.something.otherapp
У меня была эта проблема и я выполнял эти шаги, я думаю, что этот путь является совершенным и полным
Для Android Studio:
Прошу прощения за ответ. Надеюсь, это поможет в будущем. Я использую это решение для решения одной и той же проблемы Когда мы используем карты Google во время разработки, используется debug.keystore по умолчанию, у которого нет пароля. Когда мы создаем файл apk для загрузки в Play Store, создается новый ключ SHA-1, поэтому для этого нужно создать новый debug.keystore. Мы должны создать новый ключ API для этого SHA-1. Согласно решению Как получить сертификат отпечатка сертификата подписки (SHA1) для OAuth 2.0 на Android?, мы можем получить SHA-1 для экспортированного файла apk.
После этого используйте этот новый ключ API в Android Manifest как предыдущий, и вы закончили.
РЕДАКТИРОВАТЬ 1 -
Шаги для этого
1) Создайте файл apk, используя "Использовать мастер экспорта" в файле Android Manifest вашего проекта.
2) После вставки ключа и перед завершением показаны клавиши MD5 и SHA1, как показано на рисунке: pic- (http://i.stack.imgur.com/SldEv.png)
3) Создайте новый API-ключ для Android-проекта в https://console.developers.google.com для нового SHA1, который извлекается в пункте 2).
4) Используйте этот ключ API в файле манифеста, как показано ниже.
5) Очистите проект и снова создайте файл APK в соответствии с точкой 1).
6) Теперь вы можете видеть карты Google в этом apk.
Есть две вещи, которые нужно запомнить и заставить работать.
Отладка варианта сборки
Вариант выпуска версии
В AndroidManifest.xml добавьте следующую строку:
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="@string/google_maps_key" />
Следуйте обычной процедуре для отладки и выпуска. Он должен работать без проблем.
create another Maps API key (to put in your manifest) corresponding with you release
keystore for release.
вы не можете использовать тот же ключ, который вы использовали при отладке в выпуске, у них разные работы. Чтобы решить эту проблему, вам нужно создать новый ключ API карты Google KEY из хранилища ключей, который вы используете в своем выпуске. см. это видео для получения более подробной информации https://www.youtube.com/watch?v=xLJ0jDFdUZ0
для фьючерсов refs --- my case --- есть два файла google_maps_api.xml, где вам нужно поместить ключ google go. Вы можете очень легко сделать ошибку, чтобы заменить YOUR_API_KEY только в одном из них (особенно если вы просто удалили приложение api/app google и создали новые)
В консоли Google Api, где мы создали API KEY, у нас есть возможность добавить несколько отпечатков пальцев к одному и тому же ключу. То, что я сделал, это добавить два отпечатка пальца SHA1 для моего отладочного хранилища ключей и освободить хранилище ключей, и для меня работал тот же самый ключ API.
Обратите внимание: ниже для Ubuntu:
Получить SHA1 для отладки, используя следующую команду
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
Для получения SHA1 для выпуска команда изменится на
keytool -list -v -keystore /home/atul/Desktop/Learnings/Projects/TestApp/keystore.jks -alias test -storepass password -keypass password
где
/home/atul/Desktop/Learnings/Projects/TestApp/keystore.jks
- это путь, в котором присутствует мой файл ключей для подписанного apk
test
- это ключевое имя псевдонима, используемое при генерации подписанного хранилища ключей
и password
- это пароль, используемый при подписании apk
Надеюсь, это поможет. Счастливое кодирование:)
Как получить отпечаток api SHA1 для выпуска:
установите подписанный APK, из Playstore или просто скопируйте его на телефон.
Подключите USB-кабель, если он является реальным телефоном, и откройте Android Studio.
В первый раз, когда вы пытаетесь получить карты, запись в журнале будет выглядеть примерно так:
E/Google Maps Android API: In the Google Developer Console (https://console.developers.google.com)
Ensure that the "Google Maps Android API v2" is enabled.
Ensure that the following Android Key exists:
API Key: AIzaS<YOUR KEY YOUR KEY YOUR KEY YOUR KEY>
Android Application (<cert_fingerprint>;<package_name>): 56:AF:B2:<THIS IS WHAT YOU ARE LOOKING FOR>;br.com.tinx.<your package>
просто следуйте этим инструкциям, создав новую запись в консоли разработчика.
Если вы создали код SHA1 из пользовательского хранилища ключей, используйте тот же режим выпуска. или сгенерировать apk, подписавшись с тем же хранилищем ключей и тестом.
Перед этим вам нужно очистить данные приложения (Настройка- > Приложение-выберите приложение-Очистить данные- > удалить) и попробуйте. это сработало для меня. Убедитесь, что имя пакета совпадает с именем в консоли разработчика Google.
У меня была аналогичная проблема, и проблема заключалась в том, что я сгенерировал apk из Android Studio без предварительного выбора правильного вкуса. Это означает, что мой манифест по-прежнему использовал ключ API Google Maps, который я создал для отладочного вкуса.
Пожалуйста, убедитесь, что вы выбрали аромат выпуска в своей студии Android. Смотрите снимок экрана ниже:
У меня была аналогичная проблема: после создания нескольких новых вариантов сборки с тем же типом ( "release" ), но с некоторыми новыми вариантами ( "бесплатно" и "премиум" ) фрагмент Google Maps больше не показывал карты и экран оказался совершенно пустым. В logcat я мог видеть только следующее сообщение об ошибке "Неожиданный код ответа 400 для https://clients4.google.com/glm/mmap/api", который, вероятно, указывал на некоторые проблемы с Картами Google Доступ к API.
Конечно, я снова просмотрел весь процесс Google Cloud API, чтобы проверить, не пропало ли что-то в моих учетных данных ключа API, но я не нашел ничего плохого. Фактически для нового APK указывается добавление информации о строках (имя + отпечаток пальца) к существующим учетным данным Project, чтобы наследовать тот же самый ключ API, который все еще действителен.
Инструкции, которые мы можем прочитать, очень понятны: "Добавьте имя своего пакета и отпечаток пальца подписывающего сертификата SHA-1, чтобы ограничить использование ваших приложений для Android. Получите имя пакета из файла AndroidManifest.xml. Затем используйте следующую команду для получения отпечатка пальца: keytool -list -v -keystore mystore.keystore".
В моем случае проблема заключалась в том, что мои новые варианты "имена пакетов" были не такими, которые существуют в имени пакета Manifest ( "com.example.app_name.release" ). Фактически, из-за моих новых вкусов у меня было одно имя манифеста, но два новых "реальных" имени пакета: "com.example.app_name.free.release" и "com.example.app_name.premium.release". Эти имена не отображаются в файле манифеста, как они соответствуют конфигурации Gradle, где определены флайеры (в моем случае с атрибутом "applicationIdSuffix" ). Для меня это довольно сбивает с толку, поскольку id приложения Gradle не должен перекрывать имя пакета Manifest. Но когда мы внимательно изучаем всю документацию на Android, мы можем прочитать "если имя пакета манифеста отличается от Gradle applicationId, build будет копировать идентификатор приложения в файле окончательного манифеста". Конечно, оба варианта имеют один и тот же отпечаток пальца, поскольку оба имеют один и тот же тип сборки ( "release" ).
Таким образом, решение заключалось в том, чтобы добавить в те же учетные данные Project два новых варианта, чтобы наследовать один и тот же ключ API:
оригинальная запись (не нужно ее удалять): Имя пакета = "com.example.app_name.release" - сертификат SHA-1 fingerprint = "xxxxx"
новая запись 1: Имя пакета = "com.example.app_name.free.release" - сертификат SHA-1 fingerprint = "xxxxx" без изменений, так же, как и до сих пор
Новая запись 2: Имя пакета = "com.example.app_name.premium.release" - сертификат SHA-1 fingerprint = "xxxxx" без изменений, так же, как и до сих пор
Наконец, может потребоваться очистить сборку, чтобы убедиться, что вы действительно наблюдаете за правильным обновленным поведением в вашем фрагменте или активности карты.
О других рекомендациях, в моем случае я не должен был их применять: - нет необходимости жестко кодировать ключ API в манифесте - нет необходимости создавать новый ключ API для новых вариантов APK - не нужно использовать файлы google_maps_api.xml