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 NotificationsBackground Modes,勾选其中的Remote notifications
- 打开
AppDelegate.m文件,添加以下配置代码:- 头部引入依赖:
#import <RNCPushNotificationIOS.h> #import <UserNotifications/UserNotifications.h>- 在
didFinishLaunchingWithOptions方法末尾添加注册逻辑:
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; center.delegate = self;- 在文件末尾添加通知代理方法:
- (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
相关产品推荐
相关产品推荐

