如何向AWS Pinpoint提供iOS设备令牌?直接消息发送失败求助
解决AWS Pinpoint直接消息推送失败的问题
我之前也踩过一模一样的坑!你遇到的Failed to submit push notification to...错误,大概率就是deviceToken的字符串转换方式不对导致的——用[deviceToken description]转字符串再手动去括号空格的方法,很容易出现隐性格式问题,APNs根本不认这个令牌。
正确的iOS DeviceToken转字符串方法
别再用description方法了,直接通过字节遍历生成标准十六进制字符串才是正确姿势。给你一段Objective-C的实现代码:
- (NSString *)validDeviceTokenStringFromData:(NSData *)deviceToken { if (!deviceToken || deviceToken.length == 0) return nil; const unsigned char *tokenBytes = deviceToken.bytes; NSMutableString *tokenString = [NSMutableString stringWithCapacity:deviceToken.length * 2]; for (NSUInteger i = 0; i < deviceToken.length; i++) { [tokenString appendFormat:@"%02x", tokenBytes[i]]; } return tokenString; }
这段代码会把deviceToken的每个字节转换成两位十六进制字符,最终得到一个纯小写、无任何额外符号的字符串,完全符合APNs和AWS Pinpoint的要求。
后续验证步骤
- 用上面的方法获取到正确的deviceToken字符串后,复制到Pinpoint控制台的对应字段
- 确认你的Pinpoint应用已经配置了对应环境的APNs证书(测试设备用沙箱证书,正式设备用生产证书,别搞混)
- 检查目标设备的推送通知权限是否已经开启(设置→通知→你的应用,确认允许通知)
- 查看Pinpoint里对应的Endpoint状态是否为
ACTIVE,如果是INACTIVE可能需要重新注册
按这个流程来,应该就能解决推送失败的问题了!
内容的提问来源于stack exchange,提问作者David U




