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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 00:00:56