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

Golang实现Firebase FCM推送iOS端失效,Android正常求助

iOS设备无法接收FCM推送的排查与修复方案

针对你用Golang开发FCM跨平台推送时iOS收不到消息的问题,结合FCM/iOS推送特性,给出以下具体修复和排查步骤:

1. 修正消息的APNS配置(关键)

iOS对APNs的payload格式和参数有严格要求,以下是补充完整APNSConfig的消息构建代码:

var messages []*messaging.Message
for _, receiver := range receivers {
    // 构建APNs专用配置
    apnsConfig := &messaging.APNSConfig{
        Payload: &messaging.APNSPayload{
            Aps: &messaging.Aps{
                Alert: &messaging.ApsAlert{
                    Title: title,
                    Body:  msgBody,
                },
                Sound: "default", // 必须指定声音才能触发iOS通知提示
                // 若需后台静默推送,开启以下字段
                // ContentAvailable: true,
            },
            // 自定义业务字段可添加到CustomData
            // CustomData: map[string]interface{}{"custom_key": "custom_value"},
        },
        Headers: map[string]string{
            "apns-push-type":    "alert", // iOS 13+必填,对应普通通知
            "apns-environment": "production", // 开发环境改为"development",必须与iOS打包环境匹配
        },
    }

    msg := &messaging.Message{
        Notification: &messaging.Notification{
            Title:    title,
            Body:     msgBody,
            ImageURL: imageURL,
        },
        Token:      receiver,
        APNSConfig: apnsConfig,
        // AndroidConfig可保留原有配置
        // AndroidConfig: &messaging.AndroidConfig{...},
    }
    messages = append(messages, msg)
}

2. 排查推送结果的错误详情

利用BatchResponse返回的单条消息结果,直接定位失败原因:

// 调用PostMessages后遍历响应结果
resp, err := yourClient.PostMessages(messages)
if err != nil {
    log.Printf("批量推送整体错误: %v", err)
}
for idx, result := range resp.Responses {
    if result.Error != nil {
        log.Printf("第%d条消息推送失败,令牌: %s,错误: %v", idx, receivers[idx], result.Error)
        // 常见错误处理参考:
        // - Unregistered: 令牌已失效,需从数据库移除
        // - InvalidToken: 令牌格式错误,检查客户端获取逻辑
        // - MismatchSenderId: 发送者ID与客户端配置不匹配
    }
}

3. 关键配置匹配检查

  • APNs环境一致性:iOS用开发证书打包时,apns-environment设为development;用生产证书(含TestFlight)时设为production,不匹配会被APNs直接拒绝。
  • iOS客户端权限:确认用户已授予通知权限,且Xcode项目中开启Background Modes下的Remote notifications选项。
  • 令牌有效性:用同一令牌在FCM控制台手动发送测试推送,若仍收不到,说明令牌本身无效或客户端配置有问题。

4. SendMulticast使用注意事项

若使用MulticastMessage,需确保Tokens数组中的iOS令牌正确,且APNSConfig按上述要求配置,示例:

multicastMsg := &messaging.MulticastMessage{
    Notification: &messaging.Notification{
        Title:    title,
        Body:     msgBody,
        ImageURL: imageURL,
    },
    Tokens: receivers,
    APNSConfig: apnsConfig, // 同样需要正确配置APNSConfig
}
resp, err := c.fcmClient.SendMulticast(context.Background(), multicastMsg)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 03:46:05