如何排查失败的 Amazon SNS 推送通知传输问题?
上次更新时间:2020 年 12 月 21 日
如何确认 Amazon Simple Notification Service (Amazon SNS) 推送通知的传输状态?如何确定某些通知传输失败的原因?
简短描述
当您为平台应用程序启用 Amazon SNS 传输状态日志记录后,Amazon CloudWatch Logs 将记录您的推送通知事务。日志同时包括成功和失败的传输。
解决方法
打开传输状态日志记录
- 打开 Amazon SNS 控制台。
- 打开左侧导航菜单,展开移动应用程序,然后选择推送通知。
- 在平台应用程序中,选择要为其启用传输状态的平台应用程序,然后选择编辑。
- 展开 Delivery status logging – optional(传输状态日志记录 – 可选),然后选择 Create new service role(创建新服务角色)。
- 选择创建新角色。这时将在新的选项卡或窗口中打开 AWS Identity and Access Management (IAM) 控制台。
- 在 IAM 控制台权限请求页面上,选择允许。
- 选择保存更改。
注意:您也可以通过使用 AWS 开发工具包和 AWS 命令行界面 (AWS CLI) 启用传输状态。如果在运行 AWS CLI 命令时收到错误,请确保您使用的是最新版本的 AWS CLI。
查看传输状态日志
- 打开 CloudWatch 控制台。
- 从左侧导航窗格中选择日志。
- 在日志组下,找到您的应用程序的传输状态日志。
注意:在消息发布到终端节点之前,传输状态日志不可用。对于推送通知,在 Amazon SNS 将消息传递给提供商时,即认为发布成功。但是,将消息传递给提供商不能保证通知已传输到设备。
根据应用程序类型,您可能会看到两个日志组:一个用于记录成功的通知,一个用于记录失败的通知。Firebase Cloud Messaging (FCM) 和 Apple Push Notification Service (APNS) 日志存在于名称类似以下示例的日志组中:
sns/us-east-1/123456789012/app/platform_name/application_name/
如果传输不成功,日志条目中会附加“Failure”。例如:
sns/us-east-1/123456789012/app/platform_name/application_name/Failure
有些日志详细信息包括 messageId、statusCode、所用时间 (dwellTimeMs)、目标终端节点 (destination) 和 providerResponse。有关日志示例,请参阅 Amazon SNS 消息传输状态 CloudWatch 日志示例。
通知失败问题排查
在提供商服务中查找 statusCode,如 FCM 或 APNs。有关提供商的确切响应消息,请查看 providerResponse。