React Native中使用AWS Amplify实现Android推送通知报错
解决AWS Pinpoint发送推送消息时的PERMANENT_FAILURE(InvalidRegistration)错误
这个问题我之前帮好几个开发者排查过,核心原因就是你的推送令牌(token)不被FCM(错误里标注的GCM)认可——要么是令牌过期/失效了,要么是配置环节出了疏漏。咱们一步步来解决:
先拆解错误里的关键信息
从你给出的错误响应里,这几个字段直接点明了问题:
DeliveryStatus": "PERMANENT_FAILURE":说明这是不可逆的配置/令牌问题,不是临时网络波动InvalidRegistration:FCM明确表示这个令牌无效Unregistered or expired token:直接指出令牌要么过期,要么设备已经注销了该令牌
具体解决步骤
1. 重新获取有效的设备推送令牌
旧令牌失效的场景非常多:应用卸载重装、设备系统重置、FCM主动刷新令牌等等。你需要:
- 在你的移动应用中重新获取最新的FCM(Android)或APNs(iOS)令牌
- 拿着新令牌,更新AWS Pinpoint对应Endpoint的
Address字段(也就是存储令牌的位置)
2. 验证Pinpoint项目的推送配置是否正确
FCM不认令牌也可能是Pinpoint的配置出错:
- 打开Pinpoint控制台,找到你的项目,进入Settings > Push notifications
- 检查GCM/FCM的Server key是否正确,有没有过期或者和FCM控制台的密钥不一致
- 确认填写的应用包名和你的移动应用包名完全一致,大小写、特殊字符都不能错
3. 检查Endpoint的配置细节
Pinpoint的Endpoint配置错误也会导致推送失败:
- 确保Endpoint的
ChannelType设置正确:Android用GCM,iOS开发环境用APNS_SANDBOX,生产环境用APNS - 检查Endpoint状态是否为
ACTIVE,如果是INACTIVE,Pinpoint会直接跳过该Endpoint的消息发送
4. 用新令牌做小范围测试
更新完令牌和配置后,先别急着用命令行批量测试:
- 在Pinpoint控制台手动创建一个测试Endpoint,填入新获取的令牌,设置正确的ChannelType
- 直接在控制台给这个测试Endpoint发送一条推送消息,确认能成功送达
- 如果控制台测试成功,再把新令牌替换到你的
pinpoint-send-messages.json里,重新执行命令
额外注意事项(针对iOS)
如果是iOS设备,还要注意:
- 严格区分开发环境和生产环境,对应的APNs证书要匹配,不能用开发证书给生产环境设备发消息,反之亦然
- 确保你的设备已经信任了对应的APNs证书,没有被系统拦截
内容的提问来源于stack exchange,提问作者Sahej Maharjan
相关产品推荐
相关产品推荐

