Возникает исключение безопасности Google Awareness API

Я использую DetectedActivityFence из API осведомленности Google. Он отлично работает на моих собственных устройствах, но я получил несколько сбоев в Crashlytics из-за SecurityException.

Fatal Exception: java.lang.SecurityException: Invalid API Key for package = [package_name] .Status code received = -1
   at android.os.Parcel.readException(Parcel.java:1540)
   at android.os.Parcel.readException(Parcel.java:1493)
   at com.google.android.gms.common.internal.zzu$zza$zza.zza(Unknown Source)
   at com.google.android.gms.common.internal.zzd.zzqz(Unknown Source)
   at com.google.android.gms.internal.zzpw$zzc.zzapl(Unknown Source)
   at com.google.android.gms.internal.zzpw$zzf.run(Unknown Source)
   at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:422)
   at java.util.concurrent.FutureTask.run(FutureTask.java:237)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
   at com.google.android.gms.internal.zzrn.run(Unknown Source)
   at java.lang.Thread.run(Thread.java:818)

Это произошло без каких-либо корреляций между версиями Android, т.е. затрагивает устройства разных производителей и разные версии Android (5.x-6.x). Эти устройства не имеют root-прав и выглядят так, как будто они работают на Stock ROM. Эта проблема возникает у 10% моих пользователей.

Я уверен, что использую правильный ключ API, иначе я увижу сбой на своем устройстве, не так ли?

Кто-нибудь сталкивался с такой же проблемой?


person andrei_zaitcev    schedule 08.09.2016    source источник
comment
Вы создали ключ API в консоли Google?   -  person Amy    schedule 08.09.2016
comment
@ Эми, да, это работает на моих устройствах, и я предполагаю, что ключ правильный.   -  person andrei_zaitcev    schedule 08.09.2016
comment
@aeinsam Ключ API, который вы сгенерировали с любым имя пакета, имя пакета отличается. Я имею в виду, проверьте имя пакета вашего приложения и тот, который вы ввели в консоли разработчика при создании API Key.   -  person Jay Rathod RJ    schedule 08.09.2016
comment
@jaydroider проверил, это то же самое, что я использую в своем приложении.   -  person andrei_zaitcev    schedule 08.09.2016
comment
@aeinsam, я наблюдаю такое же поведение: работает со всеми сборками отладки и выпуска в доме, для некоторых пользователей Crashlytics сообщает об исключении SecurityException, показанном выше. Удалось ли вам решить проблему?   -  person Florian Barth    schedule 26.09.2016
comment
@FlorianBarth нет, я удалил эту функцию из своего приложения. Знаете ли вы, куда я могу сообщить об ошибке, связанной с сервисами Play?   -  person andrei_zaitcev    schedule 27.09.2016
comment
Я сообщил о проблеме в систему отслеживания проблем AOSP, надеюсь, что это было правильно, или они могут дать подсказку о правильной системе отслеживания ошибок: code.google.com/p/android/issues/detail?id=223751   -  person Florian Barth    schedule 27.09.2016


Ответы (4)


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

На данный момент лучший обходной путь — добавить UncaughtExceptionHandler в поток, который вызывает GoogleApiClient.connect(). Если вы вызываете GoogleApiClient.connect() в основном потоке, вы можете получить экземпляр Thread через Looper.myLooper().getThread().

person mochu    schedule 14.10.2016
comment
Исправление будет выпущено в начале 2017 года. - person mochu; 28.10.2016
comment
Откуда ты это знаешь? - person klimat; 18.01.2017
comment
Кажется, это перефразировано из отчета об ошибке. Я создал новый ответ, на который правильно ссылаются. Важно следить за этой веткой и делать там обновления. Из того, что я читал, существуют разногласия относительно того, работает ли этот лучший обходной путь. Понижение за то, что вы не указываете свой источник. - person Bruno Bronosky; 07.02.2017
comment
@mklimek: mochu был моим коллегой в Google по API осведомленности. - person Dan Dascalescu; 27.02.2017
comment
Эта ошибка исправлена? - person klimat; 03.03.2017

Откуда: https://code.google.com/p/android/issues/detail?id=223751#c2

В наших проверках есть ошибка, из-за которой иногда возникает исключение SecurityException при сетевой ошибке аутентификации. Исправление появится в следующей версии сервисов Google Play.

На данный момент лучшим обходным решением будет настройка UncaughtExceptionHandler в потоке, который вы вызываете GoogleApiClient.connect(). Для большинства людей это будет в основном потоке, который вы можете получить с помощью Looper.myLooper().getThread().

Но вы также заметите, что ответы указывают на то, что это ненадежный обходной путь.

Вы также можете заметить, что OP этого потока ссылается на этот пост SO, но принятый ответ не ссылается на поток, даже если они скопировали его дословно. Очень плохая форма!

person Bruno Bronosky    schedule 06.02.2017

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

person pjapple15    schedule 08.02.2017

Я бился почти сутки и нашел другой ответ. Хотя принятый ответ был правильным в то время.

Единственное, что мне помогло, это создание ключа API в консоли разработчика Google с использованием хранилища ключей отладки для целей тестирования и замена его хранилищем ключей выпуска при переходе к производству.

Как сгенерировать ключ API? Ознакомьтесь с самим словом Google здесь

Надеюсь, это поможет кому-то в будущем.

person Geek    schedule 13.12.2017