# #android #firebase-cloud-messaging #android-pendingintent #android-api-31
Вопрос:
Недавно я обновил свое приложение до целевого API 31 и заметил сообщение о новом сбое в консоли Google Play, которое для меня не имеет смысла.
Сбой, вызванный, exception.class.missing._Unknown_: Strongly consider using FLAG_IMMUTABLE...
для которого есть несколько ответов на SO и в других местах, однако из того, что я прочитал, этот сбой должен быть связан PendingIntent
только с использованием.
Отчеты о сбоях имеют смысл в том смысле, что я видел сообщение о сбое только в Android 12 (API 31), поскольку именно здесь было введено явное НЕИЗМЕНЯЕМОЕ или ИЗМЕНЯЕМОЕ требование, но я просмотрел весь свой проект и не могу найти никакого использования PendingIntent
.
Время сбоев, похоже, связано с отправленным мной push-уведомлением FCM, которое снова связано с причиной сбоя PendingIntent
, но если я не могу найти это в своем источнике, то как я могу явно установить FLAG_IMMUTABLE
?
Мои зависимости от проекта такие, как показано ниже:
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
implementation 'androidx.appcompat:appcompat:1.4.0-beta01'
implementation 'com.google.android.material:material:1.4.0'
implementation 'com.google.code.gson:gson:2.8.6'
implementation 'androidx.constraintlayout:constraintlayout:2.1.1'
// billing for in-app purchases
implementation 'com.android.billingclient:billing:3.0.2'
// For in-app review flow
implementation 'com.google.android.play:core:1.10.2'
// Import the Firebase BoM
implementation platform('com.google.firebase:firebase-bom:26.1.1')
implementation 'com.google.firebase:firebase-messaging'
}
Комментарии:
1. Точно такая же проблема. Также не используется какое-либо ожидающее намерение. У меня еще не было времени изучить это, хотя
2. Что ж, я рад, что это не только я, но я изо всех сил пытаюсь разобраться, потому что единственное устройство Android 12 8 находится в эмуляторе, и, похоже, оно даже не хочет получать push-уведомления FCM в данный момент, поэтому мне нужно сначала это исправить. Было бы неплохо узнать, что вы найдете, когда у вас появится возможность провести расследование — я боюсь отправлять уведомления в мое приложение в данный момент из-за сбоя.
Ответ №1:
Это известная проблема с Admob, как упоминалось в https://developers.google.com/admob/android/quick-start
androidx.work:work-runtime: 2.1.0, извлеченный из play-services-ads, содержит ошибку при использовании PendingIntent без FLAG_IMMUTABLE или FLAG_MUTABLE и приведет к сбою в приложениях, ориентированных на S .
Решение также упоминается в файле app / build-gradle:
dependencies {
implementation 'com.google.android.gms:play-services-ads:20.4.0'
// For apps targeting Android 12, add WorkManager dependency.
constraints {
implementation('androidx.work:work-runtime:2.7.0') {
because '''androidx.work:work-runtime:2.1.0 pulled from play-services-ads
has a bug using PendingIntent without FLAG_IMMUTABLE or
FLAG_MUTABLE and will fail in apps targeting S .'''
}
}
}
Комментарии:
1. Интересно, но мое приложение не использует AdMob, поэтому сбой происходит не оттуда.
2. Я добавил зависимости из моего build.gradle к вопросу. Интересно, имеет ли что-то еще, что я использую, ту же проблему, что и код AdMob….
3. Можно попробовать пометить раздел ограничений в разделе зависимости: ограничения { реализация (‘androidx.work:work-runtime:2.7.0’) { потому что «‘androidx.work:work-runtime: 2.1.0, извлеченный из play-services-ads, содержит ошибку при использовании PendingIntent без FLAG_IMMUTABLE или FLAG_MUTABLE и приведет к сбою в таргетинге приложенийS .»‘ } }
4. Можно попробовать * добавить 🙂
5. Я надеюсь попробовать это, но тестирование является проблемой. Мне нужно выяснить, почему мой эмулятор Android 12 не получает уведомлений, а затем воспроизвести проблему там (наряду с созданием категории тестовых уведомлений, чтобы не влиять на реальных пользователей)… Сложно проверить, исправляет ли это, когда я не могу воспроизвести в своем тестовом AVD.