You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 14:55:28