Android 12下react-native-push-notification本地定时推送Release模式失效?
解决react-native-push-notification v8.1.1在Android 12 Release版不显示通知的问题
针对Debug模式正常、Release版通知失效的情况,结合Android 12的特性,给你几个排查和解决方向:
强制配置通知渠道(Android 12必选)
Android 12及以上版本要求所有通知必须绑定已创建的渠道,Debug模式下库可能自动帮你创建了渠道,但Release模式可能因为初始化时机或混淆问题没生成。- 应用启动时主动创建渠道,比如在App组件的
useEffect或者index.js里加这段代码:
PushNotification.createChannel( { channelId: "app_notifications", // 自定义唯一ID,后续发通知要对应此ID channelName: "应用通知", channelDescription: "接收应用推送通知", soundName: "default", importance: 4, // 对应Android的IMPORTANCE_HIGH,保证通知能弹出 vibrate: true, }, (created) => console.log(`渠道创建状态:${created}`) );- 发送本地通知或处理远程推送时,必须指定
channelId参数,和上面创建的ID一致:
PushNotification.localNotification({ channelId: "app_notifications", title: "测试通知", message: "这是一条Release版测试通知", });- 应用启动时主动创建渠道,比如在App组件的
添加ProGuard混淆规则
Release模式的R8/ProGuard混淆可能会移除推送库的关键类,导致功能失效。在android/app/proguard-rules.pro里加上这些规则:-dontwarn com.dieam.reactnativepushnotification.** -keep class com.dieam.reactnativepushnotification.** { *; } -keep class com.google.firebase.messaging.** { *; }主动申请通知权限
Android 12开始需要用户手动授予通知权限,Debug模式可能默认开启,但Release版得主动请求。- 先在
AndroidManifest.xml里加权限声明:
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />- 在应用启动时调用权限请求,示例代码:
import { Platform, PermissionsAndroid } from 'react-native'; async function getNotificationPermission() { if (Platform.OS === 'android' && Platform.Version >= 33) { const result = await PermissionsAndroid.request( PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS, { title: "通知权限申请", message: "应用需要通知权限来推送消息", buttonPositive: "允许", buttonNegative: "拒绝", } ); return result === PermissionsAndroid.RESULTS.GRANTED; } return true; } // 启动时调用 getNotificationPermission();- 先在
检查FCM配置(如果用远程推送)
要是集成了Firebase推送,Release版的google-services.json必须对应Release签名,而且Firebase控制台里要添加Release包的SHA-1/SHA-256指纹,否则远程推送会失败。调整通知优先级
Android 12对通知优先级限制更严,确保推送时设置足够高的优先级:PushNotification.localNotification({ channelId: "app_notifications", title: "测试通知", message: "这是一条Release版测试通知", priority: "high", visibility: "public", });
内容的提问来源于stack exchange,提问作者Anjali Deshmukh
相关产品推荐
相关产品推荐

