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

iOS后台/退出状态下Remote Notification代理未触发问题求助

iOS后台/退出状态下Remote Notification代理未触发的解决配置

针对你遇到的iOS应用后台/退出状态下didReceiveRemoteNotification:fetchCompletionHandler:不触发的问题,需要补充以下关键配置和注意事项:

1. 开启后台推送权限

在Xcode项目中配置后台模式:

  • 打开项目Target → 切换到Signing & Capabilities标签
  • 点击+ Capability,添加Background Modes
  • 勾选Remote notifications选项

注意:iOS模拟器对后台推送的支持有限,部分唤醒逻辑无法触发,建议优先用真机测试。

2. 推送Payload必须包含content-available: 1

后台发送的推送消息必须携带该字段,告知系统唤醒应用处理推送:

{
  "aps": {
    "alert": "测试推送内容",
    "badge": 1,
    "sound": "default",
    "content-available": 1
  },
  "customData": "自定义业务数据"
}
  • 若使用第三方推送平台(如Firebase、JPush),需确保平台配置正确传递该字段,且字段值为整数1而非字符串。

3. 实现UNUserNotificationCenter的点击代理方法

应用处于后台/退出状态时,点击推送通知不会触发didReceiveRemoteNotification,而是触发didReceiveNotificationResponse,需补充实现该方法:

- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)(void))completionHandler {
    NSDictionary *userInfo = response.notification.request.content.userInfo;
    NSLog(@"后台/退出状态下点击推送");
    [RNCPushNotificationIOS didReceiveNotificationResponse:response];
    completionHandler();
}

同时要在didFinishLaunchingWithOptions中设置代理:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // 其他初始化逻辑
    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    center.delegate = self;
    
    // 请求通知权限
    [center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert | UNAuthorizationOptionSound | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error) {
        if (granted) {
            [[UIApplication sharedApplication] registerForRemoteNotifications];
        }
    }];
    
    return YES;
}

4. 处理退出状态下的启动推送

应用完全退出时,点击推送会直接启动应用,需在didFinishLaunchingWithOptions中处理启动参数里的推送信息:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // 其他初始化逻辑
    if (launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]) {
        NSDictionary *userInfo = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey];
        NSLog("从推送启动应用");
        [RNCPushNotificationIOS didReceiveRemoteNotification:userInfo fetchCompletionHandler:^(UIBackgroundFetchResult result) {}];
    }
    
    return YES;
}

5. iOS 17额外注意事项

  • iOS 17对后台活动限制更严格,确保应用未被系统标记为"后台受限"(可在设置→通用→后台App刷新中检查)
  • 若使用模拟器测试,可通过Xcode的Debug → Simulate Background Fetch模拟后台唤醒,或用终端命令发送推送(需提前获取设备token)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 02:05:05