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

React Native iOS端应用退出时如何处理通知动作及提升推送送达率

方案1:优先实现「通知类推送交互动作可在App退出状态下处理」(推荐,符合苹果推送规范,稳定性更高)

这个方案的可靠性远高于强行优化纯数据后台通知的送达率,因为苹果本身就对后台通知做了频次限制,聊天场景高频率发送必然会被系统限流。

具体配置步骤:

  1. 调整iOS推送载荷
    你之前已经改成通知+数据的混合类型,现在只需在aps字段内补充category参数,值和你本地定义的分类id对应即可,比如好友请求类推送填invitation,聊天消息类填reply,修改后的apns配置示例:
apns: {
  payload: {
    aps: {
      alert: {
        title: "Friend Request",
        body: oSender.displayname + " invited you to be friends."
      },
      sound: "default",
      category: "invitation"
    },
    // 自定义数据字段直接放在payload根节点,不要包裹在aps内部
    referencetype: "user",
    referenceid: senderid,
    referencename: oSender.displayname,
    receiverid: receiverid,
    type: "friend",
    notificationid: notification.id
  },
  headers: {
    'apns-push-type': 'alert',
    'apns-priority': '10',
    'apns-topic': 'llc.attebyte.partyme'
  }
}
  1. 原生层补充通知代理配置
    你现在收不到退出状态下的动作回调,是因为react-native-push-notification的默认配置没有在App启动时就接管通知响应,需要在iOS原生工程的AppDelegate.m/AppDelegate.mm中补充以下代码:
  • 先导入依赖头文件:
#import <UserNotifications/UserNotifications.h>
#import <RNCPushNotificationIOS.h>
  • 在didFinishLaunchingWithOptions启动方法中注册通知代理:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  // 保留原有启动逻辑,在return前添加以下代码
  UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
  center.delegate = self;
  return YES;
}
  • 补充通知响应的回调方法,将事件传递到RN层:
// 处理所有通知动作点击,包含App完全退出状态下的点击
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler
{
  [RNCPushNotificationIOS didReceiveNotificationResponse:response];
  completionHandler();
}

// 处理App前台运行时的通知展示
- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler
{
  completionHandler(UNNotificationPresentationOptionSound | UNNotificationPresentationOptionAlert | UNNotificationPresentationOptionBadge);
}
  1. RN层逻辑适配
    原有onNotification回调即可接收全状态下的通知动作事件,包含App退出后的点击,可通过message.action字段判断用户点击的动作按钮,快捷回复的输入内容可以从message.userInput字段获取,不需要额外修改现有RN逻辑。

方案2:优化纯数据后台通知送达率(不推荐,仅作参考)

苹果对后台通知的限制是系统级的,无法100%保证送达,仅可通过参数调整提高投递概率:

  • 将apns的priority从5改为10,高优先级会被系统优先投递,但若App后台活跃度过低仍会被限流
  • 纯后台通知仅保留content-available: 1,不要同时携带alert相关字段
  • 控制单用户的后台通知发送频次,短时间内大量发送会被系统直接丢弃
  • 提前确认用户开启了App的后台刷新权限,关闭该权限后所有后台通知都无法接收

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 17:42:02