Ключ Google Places для Android не работает в приложении из Play Store - PullRequest
0 голосов
/ 03 июля 2018

Я недавно запустил приложение для Android , которое использует виджет / API автозаполнения Google Адресов. Как часть конфигурации для этого, я добавил ключ API в файл манифеста моего Android:

<application>
    ...
    <meta-data
        android:name="com.google.android.geo.API_KEY"
        android:value="MY_KEY_HERE"/>
</application>

Кроме того, в консоли разработчиков Google я включил этот ключ API только для устройств Android, но не ограничивался каким-либо конкретным API. Я также ввел правильное имя пакета и хэш SHA-1 для своего приложения. Теперь у меня есть следующая проблема:

  • Когда я внедряю приложение на телефон Android прямо из Android Studio, все API Google работают. Это верно, использую ли я вариант режима отладки или выпуска.
  • Когда я публикую APK с таким же точным кодом в Play Store, а затем установлю приложение, все работает, кроме API автозаполнения Google. При попытке доступа к нему он сразу закрывается.

Я уверен, что то, что я развернул в Play Store, на самом деле является тем же приложением, работающим локально, потому что я также недавно сделал несколько небольших исправлений пользовательского интерфейса, которые также появились в версии магазина. Я несколько раз проверял, что в файле манифеста указан правильный ключ.

Я затрудняюсь объяснить это. Эта проблема особенно сложна, потому что все работает из Android Studio, поэтому я не могу сделать что-то вроде перехода в отладку и попытки перехватить исключение.

Если у вас есть опыт работы с Android и автозаполнения, и вы столкнулись с проблемой, подобной этой, тогда я приветствую ваш ответ.

Ответы [ 5 ]

0 голосов
/ 12 июля 2018

Ответ @NullPointer является функционально правильным и действительно решает мою проблему. Но чтобы дать более прямой ответ на мой собственный вопрос, основная причина проблемы связана с существенно различными процедурами настройки API-интерфейсов Google для локальной отладочной версии приложения Android и версии выпуска того же приложения.

Часть путаницы здесь связана с самой консолью Google, которая говорит:

Затем используйте следующую команду для получения отпечатка пальца (SHA-1):

keytool -list -v -keystore mystore.keystore

При локальном создании и тестировании приложения в режиме отладки, фактически запуск keytool для файла хранилища ключей отладки и вставка хеша SHA-1 в консоль Google заставит API работать. Посидев на базе кода в течение нескольких месяцев или дольше, и API-интерфейсы выглядят очень стабильными, становится неожиданностью, что произойдет после повторения этих шагов с выпуском APK.

Это сюрприз, потому что выполнение тех же шагов не будет работать для релизного приложения. Это связано с тем, что Google Play Store фактически передает ваш APK другим ключом, который поэтому имеет другой хэш SHA-1. Чтобы найти хеш SHA-1, который нужно использовать, можно зайти на Release management -> App signing в консоли Google Play. Сделайте это после публикации приложения и подождите 10-15 минут, чтобы оно обновилось. Затем просто вставьте этот SHA-1 обратно в консоль Google API, и все готово.

Кстати, мой вопрос очень похож на Опубликованное приложение в Play Store не может взаимодействовать с API Карт Google и Facebook API , хотя там не уделялось особого внимания тому, почему API Google может быть работает в режиме отладки, но не в магазине Play. Кстати, я благодарен @RohitChauhan, который вставил комментарий, содержащий ссылку на этот вопрос.

0 голосов
/ 12 июля 2018

Вы можете попробовать это разные решения, может быть, это работает для вас

Раствор - 1

попытаться сохранить текстовый файл журнала для каждого события, например onError , OnPlaceSelected , onConnectionFailed , OnConnection а затем загрузить свое приложение в playstore, теперь запустите приложение и проверьте файл журнала. Я уверен, что если он не работает, тогда я должен отобразить некоторые проблемы в файле журнала

Решение - 2

Выпуск APK и отладка APK имеют разные SHA1 и разные ключи API для сервисов Google. Оба они должны быть добавлены в консоль

Решение - 3

или теперь вы можете использовать намерение для автозаполнения

int PLACE_AUTOCOMPLETE_REQUEST_CODE = 1;
...
try {
Intent intent =
        new PlaceAutocomplete.IntentBuilder(PlaceAutocomplete.MODE_FULLSCREEN)
                .build(this);
startActivityForResult(intent, PLACE_AUTOCOMPLETE_REQUEST_CODE);
} catch (GooglePlayServicesRepairableException e) {
// TODO: Handle the error.
} catch (GooglePlayServicesNotAvailableException e) {
// TODO: Handle the error.
} 

Подробнее смотрите здесь - https://developers.google.com/places/android-sdk/autocompleteand внимательно прочитайте

Решение - 4 наконец попытайтесь отобразить название места как Toast с пользовательской широтой и долготой без автозаполнения, чтобы проверить, получаем ли мы данные с сервера или нет

Надеюсь, это будет полезно для вас

0 голосов
/ 12 июля 2018

Вы можете попробовать этот пример проекта, где я использую карту и размещаю api, а также wikipedia geo api.

https://github.com/XinyueZ/wikipedia-google-place-together

Из-за, вы должны заполнить строку @string/google_maps_key

Могу вам помочь.

0 голосов
/ 12 июля 2018

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

Для генерации SHA-1 в андроид студии есть скрипт gradle. Нажмите на панель Gradle, которая находится на правой стороне Android Studio. Выберите название вашего приложения, откройте tasks>android>signingReport. Он выведет все ключи SHA-1.

enter image description here

0 голосов
/ 12 июля 2018

Ваше заявление в вопросе ===> Я также ввел правильное имя пакета и хэш SHA-1 для своего приложения

Проблема: На самом деле до сих пор вы просто подписываете свое приложение с помощью ключа загрузки , но для игрового магазина вам необходимо созданный Google SHA-1 .

Вот более подробное объяснение

Как работает подписание приложений в Google Play. [ Ссылка на документ ]

Шаг 1. Создание ключа загрузки

Шаг 2. Подготовьте релиз

Шаг 3: Загрузить подписанное приложение

Шаг 4. Зарегистрируйте ключ подписи приложения у провайдеров API

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

Это означает, что вы подписываете свое приложение с помощью ключа загрузки. Затем Google проверяет и удаляет подпись ключа загрузки. Наконец, Google переподписывает приложение с оригинальным ключом подписи, который вы предоставили, и передает его пользователю.

Таким образом, чтобы решить вашу проблему, вы должны были выполнить эти дополнительные действия после загрузки приложения в Google Play, когда приложение было отправлено и одобрено

  1. Выберите ваше приложение в консоли Google Play, перейдите в Инструменты разработки -> Управление релизами -> Подписание приложения.

  2. Скопируйте первый сертификат SHA-1, выданный Google Play после загрузки приложения.

  3. Перейдите в консоль Google и перейдите к своему проекту.

  4. Выберите свой API-ключ и вставьте SHA-1 после имени пакета.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...