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

@notifee/react-native Trigger通知锁屏状态下延迟问题求助

解决@notifee/react-native锁屏下Trigger通知延迟问题

针对你遇到的锁屏状态下通知延迟4-5分钟的问题,核心原因是Android系统的Doze模式、电池优化策略以及权限限制导致的,结合你的代码给出以下解决方案:

1. 申请精确闹钟权限(Android 12+)

Android 12及以上版本对后台定时任务有严格限制,普通定时触发会被系统延迟。需要先在AndroidManifest.xml中添加权限:

<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM" />

再在代码中动态申请该权限(目标SDK≥31时需要):

import { PermissionsAndroid, Platform } from 'react-native';

async function requestExactAlarmPermission() {
  if (Platform.OS === 'android' && Platform.Version >= 31) {
    const granted = await PermissionsAndroid.request(
      PermissionsAndroid.PERMISSIONS.SCHEDULE_EXACT_ALARM,
      {
        title: '需要精确闹钟权限',
        message: '为确保通知准时触发,请允许精确闹钟权限',
        buttonPositive: '允许',
        buttonNegative: '取消',
      },
    );
    return granted === PermissionsAndroid.RESULTS.GRANTED;
  }
  return true;
}

// 在scheduleNotification执行前调用
await requestExactAlarmPermission();

2. 禁用应用电池优化

Android的Doze模式会在锁屏后限制后台进程,直接导致通知触发延迟。可以通过两种方式处理:

  • 手动设置:系统设置 → 电池 → 电池优化 → 找到你的应用 → 选择「不优化」
  • 代码引导跳转设置:先在AndroidManifest.xml添加权限:
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />

再在代码中引导用户跳转设置页:

import { Platform, Linking } from 'react-native';

async function requestIgnoreBatteryOptimizations() {
  if (Platform.OS === 'android') {
    const packageName = require('react-native').NativeModules.RNDeviceInfo.getPackageName();
    const intent = `android.settings.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS?package=${packageName}`;
    await Linking.openURL(intent);
  }
}

3. 调整通知与Trigger配置

你的代码已有基础高优先级配置,可进一步优化:

  • 确保notificationTimestamp是精确的未来毫秒级时间戳,可通过console.log(new Date(notificationTimestamp))验证时间是否正确
  • 通知category设为AndroidCategory.CALL(你已设置),这类高优先级通知会绕过系统部分限制
  • 统一通知渠道与通知本身的优先级配置,修正铃声参数(小写default)

调整后的核心代码片段:

const trigger = {
  type: TriggerType.TIMESTAMP,
  timestamp: notificationTimestamp,
};

await notifee.createTriggerNotification(
  {
    title: title,
    body: desciption,
    android: {
      channelId: 'default',
      actions: [snoozeAction, dismissAction],
      category: AndroidCategory.CALL,
      fullScreenAction: {
        id: 'default',
        launchActivity: 'com.myapp.CustomActivity',
      },
      importance: AndroidImportance.HIGH,
      visibility: AndroidVisibility.PUBLIC,
      vibration: true,
      loopSound: true,
      sound: 'default',
      timeoutAfter: 6000,
      vibrationPattern: [300, 500],
      priority: AndroidPriority.HIGH,
    },
  },
  trigger,
);

内容的提问来源于stack exchange,提问作者Pankaj

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 15:50:47