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

SNS对接FCM端点推送通知投递失败及乱序问题求助

SNS 对接 FCM 推送通知投递异常排查求助

我在测试SNS与Firebase Cloud Messaging(FCM)端点的推送通知投递情况时遇到以下问题:

  • 应用后台状态:发送10条通知,SNS返回全部发送成功,但应用仅收到2条
  • 应用前台状态:发送10条通知,遗漏1条,且收到的通知存在乱序问题

发送通知的脚本如下:

import boto3
import json  # 原脚本遗漏该导入,需补充
from datetime import datetime

sns_client = boto3.client('sns')

def send_message_to_endpoint(endpoint_arn, message):
    response = sns_client.publish(
        TargetArn=endpoint_arn,
        Message=json.dumps(message),
        MessageStructure='json'
    )
    return response

def send_multiple_notifications(endpoint_arn, start_id, num_notifications):
    for i in range(num_notifications):
        current_timestamp = datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S +00:00")
        message = {
            "GCM": json.dumps({
                "data": {
                    "sentAt": current_timestamp,
                    "userId": 10,
                    "orgId": 1,
                    "notificationType": "ACCESS_CHANGE_NOTIF",
                    "notificationId": start_id + i
                }
            })
        }
        response = send_message_to_endpoint(endpoint_arn, message)
        print(f"Notification {start_id + i} sent: {response}")

endpoint_arn = "application arn"
send_multiple_notifications(endpoint_arn, start_id=80, num_notifications=10)

排查思路

1. 核对FCM端投递数据

  • 登录Firebase控制台,查看Cloud Messaging的性能报告,对比SNS发送量和FCM实际接收/投递量,定位丢包环节是SNS→FCM还是FCM→设备
  • 查看FCM的错误日志,排查是否存在设备令牌失效、请求限流、权限配置错误等问题

2. 调整消息结构与优先级

  • 当前仅使用data字段,Android后台状态下FCM对纯data消息的投递优先级较低,容易被系统拦截。建议添加notification字段或设置高优先级:
    "GCM": json.dumps({
        "notification": {
            "title": "权限变更通知",
            "body": "您的权限已更新"
        },
        "data": {
            # 原data字段内容
        },
        "priority": "high"
    })
    
  • 注意:纯data消息需要客户端自行处理唤醒逻辑,若应用进程被系统回收,可能无法接收

3. 排查SNS侧传输问题

  • 检查SNS端点状态,确认Endpoint ARN是否有效,未被禁用
  • 开启SNS的投递状态日志,查看每条通知的投递详情,获取FCM返回的错误码或失败原因
  • 脚本短时间内批量发送通知可能触发限流,尝试在循环中添加time.sleep(1)降低发送频率,测试丢包是否缓解

4. 解决通知乱序问题

  • FCM不保证消息投递顺序,需在客户端通过notificationId或sentAt字段自行排序后展示
  • 检查客户端消息接收逻辑,是否存在异步处理导致的顺序错乱(如网络延迟使后发消息先到达)

5. 客户端接收逻辑排查

  • 前台状态:确认FCM消息接收回调方法实现正确,无逻辑异常导致消息遗漏
  • 后台状态:检查设备是否开启省电模式(Android Doze/iOS低电量模式),这类模式会限制后台消息接收,测试关闭省电模式后的投递情况
  • 确认客户端FCM SDK版本为最新,旧版本可能存在已知的投递bug

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 18:15:14