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

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模式可能因为初始化时机或混淆问题没生成。

    1. 应用启动时主动创建渠道,比如在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}`)
    );
    
    1. 发送本地通知或处理远程推送时,必须指定channelId参数,和上面创建的ID一致:
    PushNotification.localNotification({
      channelId: "app_notifications",
      title: "测试通知",
      message: "这是一条Release版测试通知",
    });
    
  • 添加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版得主动请求。

    1. 先在AndroidManifest.xml里加权限声明:
    <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
    
    1. 在应用启动时调用权限请求,示例代码:
    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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 10:05:31