|:-|
![]() |
---|
iOS集成友盟推送
1.iOS集成“友盟推送”后,友盟服务响应的deviceToken = 32bytes,这时,我们还需要对此数据进行规则化转换一下成为长度位64的字符串。
经过多方尝试:
- 使用“友盟官网”方案,未能解决😭
- 使用网上技术的人员提供的方案,得到了长度位64的字符串,但是:此数值经过验证是无效的!究其原因是:转换的规则在iOS13已经不适用了,是无效的长度位64的字符串!
- 天昏地暗..... 最终找到解决行之有效的解决方案,记录下来,希望能将有效的方案帮助更多像我一样需要帮助的...
Objective-C
NSMutableString *deviceTokenString = [NSMutableString string];
const char *bytes = deviceToken.bytes;
NSInteger count = deviceToken.length;
for (int i = 0; i < count; i++) {
[deviceTokenString appendFormat:@"%02x", bytes[i]&0x000000FF];
}
Swift?
var deviceTokenString = String()
let bytes = [UInt8](deviceToken)
for item in bytes {
deviceTokenString += String(format:"%02x", item&0x000000FF)
}
print("deviceToken:\(deviceTokenString)")
2.在友盟web官网‘测试模式’下进行测试推送时出现“发送失败”?
- 这种情况基本是推送证书不合适导致的,重新走一遍创建证书、上传证书流程,更新证书文件(操作证书流程,按照友盟官网即可;PS:由于友盟官网维护不够及时,导致友盟官网的操作流程文档与实战操作有些出入,这个需要开发者具备一定的iOS开发经验来应变处理!)
3.在友盟web官网‘测试模式’下进行测试推送时“设备名称为‘红色’字样”?
- 这种情况主要是初始化失败导致,请检查代码初始化流程与友盟官方文档描述的初始化进行对比来查缺补漏!(主要是友盟没有收到app初始化成功后的反馈导致的)
4.获取到64位的deviceToken + 证书创建成功 + 初始化成功,依然发送失败?
- 这种情况有可能是“64位的deviceToken无效”:由于网上某些算法计算出的64位的deviceToken并不符合友盟算法,这就导致了算出了64位的deviceToken是无效的;值得注意的是“友盟官方平台在添加deviceToken设备进行测试时,平台只校验了deviceToken是不是64位的,并没有校验64位的deviceToken是不是有效的”因此,只要是64位的deviceToken友盟就认为是有效的,这就会导致:使用了某些算法计算出的64位的deviceToken是无效的,但是友盟测试模式是无法识别它是无效的,友盟测试模式下推送消息时会出现‘推送失败’,这时开发者在检查了各种流程后还是发现不了问题,这是隐藏很深的一个坑.....如果遇上这种情况,大家先确定下是不是计算出的64位deviceToken无效的这种情况,(这是个难以被发现、被排查的点)
网友评论