iOS中FCM推送通知前台不显示问题求助
FCM前台推送通知不显示的解决方法
问题分析
你已实现userNotificationCenter:willPresentNotification:withCompletionHandler:方法,且确认收到消息时该方法会被调用,但App前台时仍无通知展示,大概率是以下几个原因导致:
1. 修正CompletionHandler的参数写法
iOS 10+中UNNotificationPresentationOptions是位掩码类型,正确的合并方式是用按位或运算符|,而非算术加法+。虽然部分场景下+能得到相同数值,但这属于不规范写法,可能导致系统无法正确识别展示选项:
-(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler { NSLog(@"前台收到通知"); // 用|替代+ completionHandler(UNNotificationPresentationOptionAlert | UNNotificationPresentationOptionSound); }
2. 确认前台通知权限已授权
检查你的权限请求代码,必须明确请求alert和sound权限,且用户已完成授权:
// 在App启动阶段请求通知权限 UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; [center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert | UNAuthorizationOptionSound) completionHandler:^(BOOL granted, NSError * _Nullable error) { if (granted) { NSLog(@"通知权限已授权"); } }];
3. 区分FCM消息类型
如果收到的是FCM数据消息(仅包含data字段,无notification字段),FCM不会自动触发系统通知,需要手动创建通知请求进行展示:
-(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler { NSDictionary *userInfo = notification.request.content.userInfo; // 判断是否为FCM数据消息 if (userInfo[@"data"]) { // 手动构建通知内容 UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init]; content.title = userInfo[@"data"][@"title"] ?: @"系统通知"; content.body = userInfo[@"data"][@"body"] ?: @"您有一条新消息"; content.sound = [UNNotificationSound defaultSound]; // 创建并添加通知请求 UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:@"FCM_Data_Notification" content:content trigger:nil]; [center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) { if (!error) { NSLog(@"手动通知已成功展示"); } }]; } // 统一指定前台展示选项 completionHandler(UNNotificationPresentationOptionAlert | UNNotificationPresentationOptionSound); }
4. 检查系统通知设置
进入iOS系统设置→你的App→通知,确认允许通知已开启,且横幅/提醒样式未设置为“无”。
内容的提问来源于stack exchange,提问作者Ross
相关产品推荐
相关产品推荐

