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

React Native开发iOS端本地推送通知无法触发问题求助

问题原因及解决步骤

你遇到的iOS本地推送不弹出的问题,是缺失了权限申请、库初始化和iOS原生端配置导致的,按以下步骤排查修改即可:

1. 缺失推送权限申请与库初始化

你只导入了推送相关包,没有初始化配置也没有申请iOS通知权限,iOS系统默认禁止未授权的app弹出通知。在你现有代码的useEffect(页面首次加载的钩子)中添加初始化逻辑:

useEffect(() => {
    getData();
    dispatch(getCities());
    // 新增推送配置
    PushNotification.configure({
        ios: {
            alert: true,
            badge: true,
            sound: true,
        },
        onNotification: function (notification) {
            notification.finish(PushNotificationIOS.FetchResult.NoData);
        },
        popInitialNotification: true,
        requestPermissions: true, // 自动向用户申请通知权限
    });
}, []);

2. 原生端配置未完成

仅安装npm包无法生效,需要完成iOS侧的原生配置:

  • 进入项目ios目录,执行pod install安装原生依赖
  • 用Xcode打开iOS项目,进入Signing & Capabilities标签,点击+ Capability添加两项能力:
    • Push Notifications
    • Background Modes,勾选其中的Remote notifications
  • 打开AppDelegate.m文件,添加以下配置代码:
    1. 头部引入依赖:
    #import <RNCPushNotificationIOS.h>
    #import <UserNotifications/UserNotifications.h>
    
    1. 在didFinishLaunchingWithOptions方法末尾添加注册逻辑:
    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    center.delegate = self;
    
    1. 在文件末尾添加通知代理方法:
    - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
     [RNCPushNotificationIOS didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];
    }
    
    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
    fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
      [RNCPushNotificationIOS didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];
    }
    
    - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
      [RNCPushNotificationIOS didFailToRegisterForRemoteNotificationsWithError:error];
    }
    
    - (void)userNotificationCenter:(UNUserNotificationCenter *)center
    willPresentNotification:(UNNotification *)notification
    withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler {
      completionHandler(UNNotificationPresentationOptionSound | UNNotificationPresentationOptionAlert | UNNotificationPresentationOptionBadge);
    }
    

3. 调整通知触发逻辑,添加iOS适配参数

你现有的触发通知的参数仅适配安卓,需要补充iOS专属参数:

const handleNotification = (item) => {
    PushNotification.localNotification({
        title: 'Push Notification',
        message: 'You clicked on' + item.country,
        playSound: true,
        soundName: 'default',
        alertAction: 'view',
    })
}

额外注意事项

  • 如果之前启动app时拒绝了通知权限,需要到系统设置-通知中找到你的app,手动打开通知权限
  • 配置完成后建议卸载原有app重新安装,避免缓存影响
  • 优先用真机测试,部分旧版本Xcode模拟器对本地推送支持存在异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 04:54:03