Пожалуйста, проголосуйте за трекер задач https://issuetracker.google.com/issues/330368298
Я только что заметил некоторые сбои в своем приложении, просматривая Firebase Crashlytics, который, похоже, связан с библиотекой Google AdMob, которая пытается использовать SharedPreferences, но не может получить предпочтение из-за исключения приведения:
Текст кода:
Fatal Exception: java.lang.ClassCastException
java.lang.Integer cannot be cast to java.lang.String
android.app.SharedPreferencesImpl.getString (SharedPreferencesImpl.java:302)
com.google.android.gms.ads.internal.scionintegration.a.onSharedPreferenceChanged (:com.google.android.gms.policy_ads_fdr_dynamite@[email protected]:73)
com.google.android.gms.ads.internal.scionintegration.m.a (:com.google.android.gms.policy_ads_fdr_dynamite@[email protected]:106)
com.google.android.gms.ads.nonagon.a.s (:com.google.android.gms.policy_ads_fdr_dynamite@[email protected]:439)
com.google.android.gms.ads.nonagon.a.b (:com.google.android.gms.policy_ads_fdr_dynamite@[email protected]:5)
com.google.android.gms.ads.ChimeraMobileAdsSettingManagerCreatorImpl.getMobileAdsSettingManager (:com.google.android.gms.policy_ads_fdr_dynamite@[email protected]:52)
com.google.android.gms.ads.internal.client.bx.bR (:com.google.android.gms.policy_ads_fdr_dynamite@[email protected]:40)
m.ajn.onTransact (:com.google.android.gms.policy_ads_fdr_dynamite@[email protected]:21)
android.os.Binder.transact (Binder.java:1173)
obj.gL (:com.google.android.gms@[email protected] (190400-607434947):8)
com.google.android.gms.ads.internal.client.ay.getMobileAdsSettingManager (:com.google.android.gms@[email protected] (190400-607434947):12)
com.google.android.gms.ads.MobileAdsSettingManagerCreatorImpl.getMobileAdsSettingManager (:com.google.android.gms@[email protected] (190400-607434947):42)
com.google.android.gms.ads.internal.client.az.fL (:com.google.android.gms@[email protected] (190400-607434947):40)
obk.onTransact (:com.google.android.gms@[email protected] (190400-607434947):101)
android.os.Binder.transact (Binder.java:1173)
com.google.android.gms.internal.ads.zzavg.zzbh (com.google.android.gms:play-services-ads-base@@22.6.0:1)
com.google.android.gms.ads.internal.client.zzcp.zze (zzcp.java:169)
com.google.android.gms.ads.internal.client.zzeq.zza (zzeq.java:169)
com.google.android.gms.ads.internal.client.zzaq.zzc (com.google.android.gms:play-services-ads-lite@@22.6.0:169)
com.google.android.gms.ads.internal.client.zzax.zzf (com.google.android.gms:play-services-ads-lite@@22.6.0:126)
com.google.android.gms.ads.internal.client.zzax.zzd (com.google.android.gms:play-services-ads-lite@@22.6.0:126)
com.google.android.gms.ads.internal.client.zzej.zzA (com.google.android.gms:play-services-ads-lite@@22.6.0:17)
com.google.android.gms.ads.internal.client.zzej.zzm (zzej.java:53)
com.google.android.gms.ads.MobileAds.initialize (com.google.android.gms:play-services-ads-lite@@22.6.0:53)
com.MY_APP_PACKAGE.ads.AdMob.initAdmob (AdMob.kt:128)
Есть ли у кого-нибудь эта проблема?
У меня есть другие приложения, которые используют версию Admob 22.6.0, и я не заметил таких сбоев для них, а для этого приложения это произошло только для 6 пользователей (из ~ 230 тысяч пользователей), но все же... почему это могло произойти...
Обновлять:
Обнаружил, что та же проблема возникает и у других: https://groups.google.com/g/google-admob-ads-sdk/c/88UHAaWElsc
Обновлено 2:
Теперь у меня стало больше сбоев, и теперь это влияет на другие приложения.
п.с. также Admob Dashboard API сегодня не работал, так что, мб, это что-то связанное
Временное решение: если у вас настроен Firebase Remote Config для ваших приложений, он отключит рекламу, что также предотвращает вызов MobileAds.initialize(), если для этого вы добавили специальный параметр. В моем случае, к сожалению, у меня есть параметры для включения/отключения типов рекламы только на экранах моих приложений (баннеры, межстраничные объявления), но нет параметров для предотвращения загрузки информации о согласии (библиотека UMP) и MobileAds.initialize(), но я добавлю их сейчас для будущие дела...
@OzShabat да, это имеет смысл, я думаю, нам просто нужно дождаться их ответа и обновлений
Я также сообщил об этой же проблеме здесь: Issuetracker.google.com/issues/330368298 Надеюсь, они смогут решить проблему удаленно. Заставлять всех пользователей обновляться до новой версии определенно неприемлемое решение. Мы видим гораздо больше аварий с нашей стороны ~60 тысяч...
@SimonMarquis омг... ~60 тысяч...
@OzShabat Я получаю это исключение в версиях 23.0.0 и 22.6.0
да, @sagis, я так и думал. Сейчас нет смысла обновляться до последней версии.
Мне то же самое. Тысячи аварий из ниоткуда. Я выпустил быстрое и грязное обновление, а пока просто перехватываю исключение ClassCastException в MobileAds.initialize(), пока Google не исправит эту проблему...
Хм... @ToniKaufmann Простая попытка и ловля на MobileAds.initialize(this) {} остановит этот сбой? Аварии продолжают расти, Иисус Христос
@Оз Шабат Я почти уверен, что это работает. Обновление еще не доступно. Но мне не нравится это решение. Затронутые пользователи не видят никакой рекламы, но, по крайней мере, никаких сбоев...
Я добавил это решение в трекер. Любая помощь будет оценена по достоинству, становится немного страшно, ха-ха
@OzShabat Я был бы осторожен с перезаписью полной строки согласия. Это приведет к удалению любого согласия, которое пользователь дал в прошлом, и может привести к тому, что реклама не будет заполняться или станет неперсонализированной. Я надеюсь, что Google скоро исправит эту проблему...
Давайте продолжим обсуждение в чате.
Я тоже начал видеть это сегодня: очистка данных приложений Play Store и игровых сервисов, а также данных кэша исправила это для одного пользователя. Также добавлен пластырь для помощи при попытке поймать...
Происходит и здесь. Может ли это иметь какое-либо отношение к новому программному ограничению рекламы с согласия UMP/GDPR? Google объявил, что эта функция будет запущена к концу первого квартала. Я отключил их в пользовательском интерфейсе AdMob, чтобы отслеживать сбои (Настройки -> Учетная запись -> Управление учетной записью -> Программное ограничение рекламы -> Выкл.).
@ Джо, это имело бы смысл. Я вижу процент сбоев в старых версиях без согласия пользователя. В этой версии должна быть ограничена реклама. Также объясните, почему только ограниченный процент наших пользователей сталкивается с этим сбоем (каждый пользователь из ЕС без согласия).
Google занимается решением этой проблемы. Подробные обновления можно найти в отчете об инциденте: Статус Google Ads. Согласно их последнему обновлению: «Мы ожидаем решить проблему, затрагивающую большинство пользователей AdMob, к 21 марта 2024 года, в 21:00 по всемирному координированному времени. ... Проблема, вызывающая сбой приложения при инициализации Google Mobile Ads для Android. SDK обнаружен и исправлен. В настоящее время мы ожидаем, пока изменения вступят в силу на устройствах конечных пользователей».
Я только что увидел тот же сбой сегодня, и это внезапный всплеск Firebase-Crashlytics. Я использую play-services-ads:21.2.0.


Google активно расследует сбой и утверждает, что проблема уже решена. Более подробную информацию вы можете найти здесь: https://ads.google.com/status/publisher/incidents/ZDDr9AsgkrNxd7zHjU4c?hl=ru
Некоторые из моих пользователей все еще сталкиваются с проблемой. 20 марта 2024 г., 13.30 UTC.
Чтобы ускорить исправление, вашему пользователю следует перезагрузить устройство или очистить кеш и данные Google Play.
Похоже, что использование блоков try-catch в настоящее время является наиболее жизнеспособным подходом (он доказал свою эффективность в нашей производственной среде). Эта практика служит прагматичным решением, особенно для обработки некритических компонентов, таких как инициализация рекламы, загрузка..., где сбои не должны нарушать основные функции приложения.
Обернув эти необязательные операции в блоки try-catch, мы можем корректно обрабатывать любые потенциальные ошибки, которые могут возникнуть, не ставя под угрозу общее впечатление пользователя. Это соответствует передовой практике изоляции и управления потенциальными точками сбоя.
На прикрепленном изображении вы можете увидеть, как в нашем сценарии этот сбой обрабатывается как нефатальное событие, что еще раз иллюстрирует эффективность этого подхода.
Однако важно отметить, что этот подход может время от времени вызывать сбои, особенно из-за внутренних операций в отдельных потоках.
Похоже, это новая проблема, связанная с изменениями в Google. Я использую com.google.android.gms:play-services-ads:22.2.0 и пытаюсь обновиться до 23.0, но не уверен, что это будет исправлено. Я думаю, что тот факт, что это произошло с нами обоими без каких-либо изменений с нашей стороны, означает, что это какое-то внешнее изменение, внесенное на серверах Google. Я не думаю, что версия 23.0 это исправит, но попробовать стоит.