升级Android API 31后Android 12+设备接收推送时APP崩溃
Android 12+ 接收OneSignal推送时APP崩溃(目标API 31)
将Android目标版本升级到API 31后,在Android 12及以上设备接收推送通知时APP直接崩溃,当前使用的OneSignal相关依赖如下:
依赖配置
Flutter插件
onesignal_flutter: ^2.6.4
根目录build.gradle
buildscript { repositories { maven { url 'https://plugins.gradle.org/m2/'} } dependencies { classpath 'gradle.plugin.com.onesignal:onesignal-gradle-plugin:[0.12.4,0.99.99]' } }
App模块build.gradle
implementation 'com.onesignal:OneSignal:3.13.1'
崩溃日志
E/AndroidRuntime(22706): at android.app.ActivityThread.handleReceiver(ActivityThread.java:4480) E/AndroidRuntime(22706): at android.app.ActivityThread.access$1800(ActivityThread.java:277) E/AndroidRuntime(22706): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2181) E/AndroidRuntime(22706): at android.os.Handler.dispatchMessage(Handler.java:106) E/AndroidRuntime(22706): at android.os.Looper.loopOnce(Looper.java:211) E/AndroidRuntime(22706): at android.os.Looper.loop(Looper.java:300) E/AndroidRuntime(22706): at android.app.ActivityThread.main(ActivityThread.java:8282) E/AndroidRuntime(22706): at java.lang.reflect.Method.invoke(Native Method) E/AndroidRuntime(22706): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:576) E/AndroidRuntime(22706): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1074) E/AndroidRuntime(22706): Caused by: java.lang.IllegalArgumentException: com.myapp: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent. E/AndroidRuntime(22706): 强烈建议使用FLAG_IMMUTABLE,仅当某些功能依赖可变的PendingIntent时才使用FLAG_MUTABLE,例如需要用于内联回复或气泡功能。 E/AndroidRuntime(22706): at android.app.PendingIntent.checkFlags(PendingIntent.java:375) E/AndroidRuntime(22706): at android.app.PendingIntent.getBroadcastAsUser(PendingIntent.java:645) E/AndroidRuntime(22706): at android.app.PendingIntent.getBroadcast(PendingIntent.java:632) E/AndroidRuntime(22706): at com.onesignal.GenerateNotification.getNewActionPendingIntent(GenerateNotification.java:189) E/AndroidRuntime(22706): at com.onesignal.GenerateNotification.createGenericPendingIntentsForNotif(GenerateNotification.java:398) E/AndroidRuntime(22706): at com.onesignal.GenerateNotification.showNotification(GenerateNotification.java:382) E/AndroidRuntime(22706): at com.onesignal.GenerateNotification.fromJsonPayload(GenerateNotification.java:110) E/AndroidRuntime(22706): at com.onesignal.NotificationBundleProcessor.ProcessJobForDisplay(NotificationBundleProcessor.java:107) E/AndroidRuntime(22706): at com.onesignal.NotificationBundleProcessor.ProcessFromGCMIntentService(NotificationBundleProcessor.java:90) E/AndroidRuntime(22706): at com.onesignal.GcmBroadcastReceiver.startGCMService(GcmBroadcastReceiver.java:138) E/AndroidRuntime(22706): at com.onesignal.GcmBroadcastReceiver.processOrderBroadcast(GcmBroadcastReceiver.java:129) E/AndroidRuntime(22706): at com.onesignal.GcmBroadcastReceiver.onReceive(GcmBroadcastReceiver.java:70) E/AndroidRuntime(22706): at android.app.ActivityThread.handleReceiver(ActivityThread.java:4467)
问题原因
从日志可以明确看到,崩溃核心原因是:针对API 31及以上版本时,创建PendingIntent必须指定FLAG_IMMUTABLE或FLAG_MUTABLE标记。当前使用的OneSignal SDK(3.13.1)和Flutter插件(2.6.4)属于旧版本,未适配Android 12的这一新要求,导致创建推送通知的PendingIntent时触发异常。
解决方法
1. 升级OneSignal依赖到兼容版本
这是最彻底的解决方案,旧版本已不再维护,升级到适配Android 12的版本即可解决问题:
- Flutter插件:将
onesignal_flutter升级到3.0.0及以上版本(推荐使用最新稳定版) - 原生SDK:对应的OneSignal Android SDK需升级到4.0.0及以上版本
- Gradle插件:同步升级OneSignal Gradle插件到0.14.0及以上版本
2. 更新配置文件
pubspec.yaml
dependencies: onesignal_flutter: ^3.5.1 # 替换为最新稳定版
执行flutter pub get更新依赖。
根目录build.gradle
buildscript { repositories { maven { url 'https://plugins.gradle.org/m2/'} } dependencies { classpath 'gradle.plugin.com.onesignal:onesignal-gradle-plugin:[0.14.0, 0.99.99]' } }
App模块build.gradle
implementation 'com.onesignal:OneSignal:4.8.3' # 替换为最新兼容版本
3. 临时兼容方案(不推荐长期使用)
如果暂时无法升级依赖,可通过添加AndroidX核心库来临时兼容:
在App模块的build.gradle中添加:
implementation 'androidx.core:core:1.7.0'
该库会自动为旧代码补充PendingIntent的标记,但这只是权宜之计,长期仍需升级OneSignal版本以获得完整的兼容性和安全性。
内容的提问来源于stack exchange,提问作者Mahmoud Sabri
相关产品推荐
相关产品推荐

