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

Android升级One UI 4.1后Pushy.me API推送通知失效问题

问题根因

报错日志已经明确给出原因:Android 12(API 31,对应你升级的One UI 4.1系统)新增强制规则:targetSdk为31及以上的应用,创建PendingIntent时必须显式声明FLAG_IMMUTABLE或FLAG_MUTABLE标志,缺失则直接抛出IllegalArgumentException。
你原有代码创建PendingIntent时仅传入了FLAG_UPDATE_CURRENT,未满足系统新版本要求,导致Pushy SDK接收到推送、反射调用你的PushReceiver时直接崩溃,通知无法弹出。

修复方案

你的使用场景是点击通知跳转固定的MainActivity,不需要后续修改PendingIntent内容,按照官方推荐使用FLAG_IMMUTABLE即可,仅需修改通知构建代码中setContentIntent对应的PendingIntent创建逻辑。

原生兼容写法(无额外依赖,适配全版本)

将原有创建PendingIntent的代码替换为版本适配逻辑:

// 初始化基础flag
int pendingIntentFlags = PendingIntent.FLAG_UPDATE_CURRENT;
// API 23及以上系统追加IMMUTABLE标志,兼容API31+的强制要求
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    pendingIntentFlags |= PendingIntent.FLAG_IMMUTABLE;
}

// 替换原有setContentIntent调用
.setContentIntent(PendingIntent.getActivity(
        context,
        0,
        new Intent(context, Main.class),
        pendingIntentFlags
))

AndroidX简化写法

如果项目已经引入AndroidX Core依赖(绝大多数AndroidX项目默认集成),可以直接用PendingIntentCompat自动完成版本适配,不需要手动判断系统版本:
先确认模块级build.gradle中存在依赖(纯Java项目去掉-ktx后缀即可):

dependencies {
    implementation "androidx.core:core-ktx:1.9.0"
}

直接替换代码:

.setContentIntent(PendingIntentCompat.getActivity(
        context,
        0,
        new Intent(context, Main.class),
        PendingIntent.FLAG_UPDATE_CURRENT,
        false // 传入false即为使用FLAG_IMMUTABLE
))
补充说明
  • 只有当你需要后续更新PendingIntent携带的Intent数据、实现通知内联回复、通知气泡这类特殊功能时,才需要使用FLAG_MUTABLE,普通跳转场景一律使用FLAG_IMMUTABLE,符合官方安全规范。
  • 修改后重新编译安装应用,推送即可正常展示。

内容的提问来源于stack exchange,提问作者Newbie Net Doc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 22:06:51