• 生产环境调试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 追加写入文本)的代码片段很好用(这时候是快速定位问题,就没有自己写)

    1. - (void)writefile:(NSString *)string
    2. {
    3. NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
    4. NSString *homePath = [paths objectAtIndex:0];
    5. NSString *filePath = [homePath stringByAppendingPathComponent:@"APNStestfile.text"];
    6. NSFileManager *fileManager = [NSFileManager defaultManager];
    7. if(![fileManager fileExistsAtPath:filePath]) //如果不存在
    8. {
    9. NSString *str = @"姓 名/手 机 号/邮 件";
    10. [str writeToFile:filePath atomically:YES encoding:NSUTF8StringEncoding error:nil];
    11. }
    12. NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:filePath];
    13. [fileHandle seekToEndOfFile]; //将节点跳到文件的末尾
    14. NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    15. [dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
    16. NSString *datestr = [dateFormatter stringFromDate:[NSDate date]];
    17. NSString *str = [NSString stringWithFormat:@"\n%@\n%@",datestr,string];
    18. NSData* stringData = [str dataUsingEncoding:NSUTF8StringEncoding];
    19. [fileHandle writeData:stringData]; //追加写入数据
    20. [fileHandle closeFile];
    21. }

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

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

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

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

     

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

     

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

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

     

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

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

    其他参考文档:

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

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

  • 相关阅读:
    CA数字证书
    设计模式再探——适配器模式
    使用Piwigo管理您的照片
    【三维点云】2-三维点云表征
    python re模块
    物联网卡的计费方法,初入物联网的小白需要掌握的
    Qt自定义日志输出
    黑猫带你学Makefile第13篇:Makefile编译问题合集
    P2524 Uim的情人节礼物·其之弐 [洛谷]
    MATLAB未定义函数或变量‘polyadd‘的解决办法
  • 原文地址:https://blog.csdn.net/jifaliwo123/article/details/127792533