生产环境调试APNS的方式(测试同学说线上APP突然接收不到通知了。)

我们的推送使用的是阿里云的推送服务。(移动推送)

【分析】:测试包的推送功能是正常的,线上使用不了。说明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];
}

生产环境调试APNS的方式(测试同学说线上APP突然接收不到通知了。)_第1张图片

2、打包AdHoc,把.ipa文件使用【音乐】 装到测试机上

3、装好APP后,启动APP操作一下。

4、去XCode,导出沙盒(会导出一个 .xcappdata文件)

生产环境调试APNS的方式(测试同学说线上APP突然接收不到通知了。)_第2张图片

5、打开沙盒(右键.xcappdata,点击【显示包内容】)沿着路径(AppData/Documents)找到我们的日志文件(我这里是APNStestfile.text)

 生产环境调试APNS的方式(测试同学说线上APP突然接收不到通知了。)_第3张图片

6、打开文件查看我们的信息。可以看到,我们的APP的APNS注册是没有问题的,成功拿到了deviceToken,并且绑定成功。拿到这个deviceToken去阿里云控制台测试一下,验证我们的生产推送证书是否有问题。

 生产环境调试APNS的方式(测试同学说线上APP突然接收不到通知了。)_第4张图片

 7、去阿里云控制台测试证书可用性。

生产环境调试APNS的方式(测试同学说线上APP突然接收不到通知了。)_第5张图片

我测试的结果是成功的,控制台显示推送成功,而且安装AdHoc的手机收到了推送信息。

 生产环境调试APNS的方式(测试同学说线上APP突然接收不到通知了。)_第6张图片

 【注意】:我们的推送是绑定了APP账号信息的,指定账号推送,不会影响线上其他用户

【总结】:生产环境的推送证书是正常的,所以,问题应该出现在后端。后来经过排查的确是后端那边写死了推送环境为DEV环境。

其他参考文档:

1、iOS实时查看App运行日志 - 简书

2、iOS端推送通知失败的排查步骤

你可能感兴趣的:(经验总结,xcode,APNS,iOS,推送,阿里云推送)