AdMob: MobileAds.initialize() — «java.lang.Integer не может быть преобразован в java.lang.String» для некоторых устройств

Пожалуйста, проголосуйте за трекер задач 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 сегодня не работал, так что, мб, это что-то связанное

Тема на Reddit

Google IssueTracker

Временное решение: если у вас настроен Firebase Remote Config для ваших приложений, он отключит рекламу, что также предотвращает вызов MobileAds.initialize(), если для этого вы добавили специальный параметр. В моем случае, к сожалению, у меня есть параметры для включения/отключения типов рекламы только на экранах моих приложений (баннеры, межстраничные объявления), но нет параметров для предотвращения загрузки информации о согласии (библиотека UMP) и MobileAds.initialize(), но я добавлю их сейчас для будущие дела...

Похоже, это новая проблема, связанная с изменениями в Google. Я использую com.google.android.gms:play-services-ads:22.2.0 и пытаюсь обновиться до 23.0, но не уверен, что это будет исправлено. Я думаю, что тот факт, что это произошло с нами обоими без каких-либо изменений с нашей стороны, означает, что это какое-то внешнее изменение, внесенное на серверах Google. Я не думаю, что версия 23.0 это исправит, но попробовать стоит.

Oz Shabat 19.03.2024 20:25

@OzShabat да, это имеет смысл, я думаю, нам просто нужно дождаться их ответа и обновлений

user924 19.03.2024 20:26

Я также сообщил об этой же проблеме здесь: Issuetracker.google.com/issues/330368298 Надеюсь, они смогут решить проблему удаленно. Заставлять всех пользователей обновляться до новой версии определенно неприемлемое решение. Мы видим гораздо больше аварий с нашей стороны ~60 тысяч...

Simon Marquis 19.03.2024 20:54

@SimonMarquis омг... ~60 тысяч...

user924 19.03.2024 20:55

@OzShabat Я получаю это исключение в версиях 23.0.0 и 22.6.0

sagis 19.03.2024 21:19

да, @sagis, я так и думал. Сейчас нет смысла обновляться до последней версии.

Oz Shabat 19.03.2024 21:31

Мне то же самое. Тысячи аварий из ниоткуда. Я выпустил быстрое и грязное обновление, а пока просто перехватываю исключение ClassCastException в MobileAds.initialize(), пока Google не исправит эту проблему...

Toni Kaufmann 19.03.2024 23:03

Хм... @ToniKaufmann Простая попытка и ловля на MobileAds.initialize(this) {} остановит этот сбой? Аварии продолжают расти, Иисус Христос

Oz Shabat 19.03.2024 23:19

@Оз Шабат Я почти уверен, что это работает. Обновление еще не доступно. Но мне не нравится это решение. Затронутые пользователи не видят никакой рекламы, но, по крайней мере, никаких сбоев...

Toni Kaufmann 19.03.2024 23:29

Я добавил это решение в трекер. Любая помощь будет оценена по достоинству, становится немного страшно, ха-ха

Oz Shabat 19.03.2024 23:40

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

Toni Kaufmann 19.03.2024 23:57

Давайте продолжим обсуждение в чате.

Oz Shabat 20.03.2024 00:00

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

Tyler V 20.03.2024 01:03

Происходит и здесь. Может ли это иметь какое-либо отношение к новому программному ограничению рекламы с согласия UMP/GDPR? Google объявил, что эта функция будет запущена к концу первого квартала. Я отключил их в пользовательском интерфейсе AdMob, чтобы отслеживать сбои (Настройки -> Учетная запись -> Управление учетной записью -> Программное ограничение рекламы -> Выкл.).

Joe 20.03.2024 01:31

@ Джо, это имело бы смысл. Я вижу процент сбоев в старых версиях без согласия пользователя. В этой версии должна быть ограничена реклама. Также объясните, почему только ограниченный процент наших пользователей сталкивается с этим сбоем (каждый пользователь из ЕС без согласия).

Toni Kaufmann 20.03.2024 01:54

Google занимается решением этой проблемы. Подробные обновления можно найти в отчете об инциденте: Статус Google Ads. Согласно их последнему обновлению: «Мы ожидаем решить проблему, затрагивающую большинство пользователей AdMob, к 21 марта 2024 года, в 21:00 по всемирному координированному времени. ... Проблема, вызывающая сбой приложения при инициализации Google Mobile Ads для Android. SDK обнаружен и исправлен. В настоящее время мы ожидаем, пока изменения вступят в силу на устройствах конечных пользователей».

y2ducky 20.03.2024 06:47

Я только что увидел тот же сбой сегодня, и это внезапный всплеск Firebase-Crashlytics. Я использую play-services-ads:21.2.0.

Fisher 20.03.2024 16:10
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
59
17
3 197
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Google активно расследует сбой и утверждает, что проблема уже решена. Более подробную информацию вы можете найти здесь: https://ads.google.com/status/publisher/incidents/ZDDr9AsgkrNxd7zHjU4c?hl=ru

Некоторые из моих пользователей все еще сталкиваются с проблемой. 20 марта 2024 г., 13.30 UTC.

MMC 20.03.2024 14:30

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

Blodhgard 21.03.2024 18:26

Похоже, что использование блоков try-catch в настоящее время является наиболее жизнеспособным подходом (он доказал свою эффективность в нашей производственной среде). Эта практика служит прагматичным решением, особенно для обработки некритических компонентов, таких как инициализация рекламы, загрузка..., где сбои не должны нарушать основные функции приложения.

Обернув эти необязательные операции в блоки try-catch, мы можем корректно обрабатывать любые потенциальные ошибки, которые могут возникнуть, не ставя под угрозу общее впечатление пользователя. Это соответствует передовой практике изоляции и управления потенциальными точками сбоя.

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

Однако важно отметить, что этот подход может время от времени вызывать сбои, особенно из-за внутренних операций в отдельных потоках.

Этот пользователь сообщает, что попытка-ловушка не является эффективным решением этой проблемы. Я думаю, что вместо этого он просто выходит из строя при первой загрузке рекламы (я пытался пропустить вызов MobileAds.initialize, поскольку он не является обязательным, но в итоге произошел сбой из-за другого стека вызовов).
Columbo 21.03.2024 12:56

Другие вопросы по теме