我们的推送使用的是阿里云的推送服务。(移动推送)
【分析】:测试包的推送功能是正常的,线上使用不了。说明APP的集成是没有问题的,问题出在生产环境配置证书或者后端配置上。【我主要先确认APP能否正确获取到deviceToken并上传。然后验证生产环境的推送证书是否生效(需要用到deviceToken)】
关键是要获取到deviceToken。要获取到deviceToken,只要添加NSLog代码,并找到日志就可以查看。这里主要是记录一下调试APNS时候获取日志的方式(有两种方式)。
方式一:日志保存在文件里并存储到沙盒
(在重写APNS API的方法/阿里云SDK集成的方法里)添加一些日志打印代码,将APNS相关输出信息保存一个文件里,并存储到沙盒里。 打一个AdHoc的包,安装到测试机上。然后启动APP,在XCode里获取到手机里的沙盒,找到我们的APNS日志文件。
方式二:在XCode日志控制台直接查看。
这个方法【更方便】,亲测有效。附上另一个博主的博客:iOS何获取生产环境的 Device Token,进行APNS测试? - 简书
======================================================================
==================【以下是记录方式一】===================================
1、添加调试代码。在APNS相关方法添加一些NSLog输出想要的信息到本地文件
代码我用了另一个博主([iOS]iOS写入文本时追加而不是覆盖_张三李四的张三的博客-CSDN博客_ios 追加写入文本)的代码片段很好用(这时候是快速定位问题,就没有自己写)
- - (void)writefile:(NSString *)string
- {
- NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
- NSString *homePath = [paths objectAtIndex:0];
- NSString *filePath = [homePath stringByAppendingPathComponent:@"APNStestfile.text"];
- NSFileManager *fileManager = [NSFileManager defaultManager];
- if(![fileManager fileExistsAtPath:filePath]) //如果不存在
- {
- NSString *str = @"姓 名/手 机 号/邮 件";
- [str writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];
- }
- NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:filePath];
- [fileHandle seekToEndOfFile]; //将节点跳到文件的末尾
- NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
- [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
- NSString *datestr = [dateFormatter stringFromDate:[NSDate date]];
- NSString *str = [NSString stringWithFormat:@"\n%@\n%@",datestr,string];
- NSData* stringData = [str dataUsingEncoding:NSUTF8StringEncoding];
- [fileHandle writeData:stringData]; //追加写入数据
- [fileHandle closeFile];
- }
2、打包AdHoc,把.ipa文件使用【音乐】 装到测试机上
3、装好APP后,启动APP操作一下。
4、去XCode,导出沙盒(会导出一个 .xcappdata文件)
5、打开沙盒(右键.xcappdata,点击【显示包内容】)沿着路径(AppData/Documents)找到我们的日志文件(我这里是APNStestfile.text)
6、打开文件查看我们的信息。可以看到,我们的APP的APNS注册是没有问题的,成功拿到了deviceToken,并且绑定成功。拿到这个deviceToken去阿里云控制台测试一下,验证我们的生产推送证书是否有问题。
7、去阿里云控制台测试证书可用性。
我测试的结果是成功的,控制台显示推送成功,而且安装AdHoc的手机收到了推送信息。
【注意】:我们的推送是绑定了APP账号信息的,指定账号推送,不会影响线上其他用户
【总结】:生产环境的推送证书是正常的,所以,问题应该出现在后端。后来经过排查的确是后端那边写死了推送环境为DEV环境。
其他参考文档: