苹果APNs2021年3月停用旧二进制协议,ionic3项目如何排查影响
APNs旧版二进制协议适配性排查(Ionic 3 + havesource分支phonegap-push-notification 项目)
先理清核心认知
你在插件代码里找不到相关协议逻辑是完全正常的,因为这次苹果淘汰的旧二进制APNs协议,根本不在手机端插件的代码范围内。
整个iOS推送的通信链路是完全分层的:
- 手机端的
phonegap-push-notification插件,只负责两件事:向苹果系统注册获取设备专属推送token、把收到的推送在本地展示、处理用户点击推送的跳转逻辑 - 插件全程不会直接和苹果的APNs服务器建立网络连接,所以不管你在插件代码里怎么搜,都找不到和APNs通信、协议选型相关的逻辑。
苹果说的要淘汰的旧版二进制协议,是你的业务后端服务器和苹果APNs服务器之间的通信规则,和手机端插件没有任何耦合关系。
具体排查步骤
1. 定位真正受影响的环节
按照完整推送链路逐一排查,把注意力放到后端到APNs的通信段:
你的业务后端服务 → 苹果APNs服务器 → 用户手机上的你的App
判断后端是否在使用旧版二进制协议的方法很直接:
- 查后端发推送的核心代码,只要符合任意一条,就是旧版协议:
- 通过TCP长连接(不是HTTPS)向苹果域名发起请求
- 用二进制字节流组装推送payload(不是JSON格式)
- 走苹果APNs的2195端口通信
- 如果后端代码是通过HTTPS、向
api.push.apple.com的443端口发请求、用JWT做接口认证、返回结构化的JSON格式错误信息,那就是已经在使用符合要求的HTTP/2新版协议,完全不受这次新规影响。
2. 验证你当前使用的havesource版插件的适配性
你不需要靠升级插件来适配这次协议新规,只需要验证插件的两个基础能力正常即可:
- 打开插件iOS端的原生代码目录(一般路径为
platforms/ios/[你的App名称]/Plugins/phonegap-plugin-push/),全局搜索是否存在直连APNs域名(gateway.push.apple.com、api.push.apple.com)的网络请求逻辑——搜不到就说明插件完全不参与APNs通信,不会因为协议淘汰失效 - 确认插件能正常获取设备的APNs token、并把token回传给你的后端,哪怕后端完成协议升级,只要这两个能力正常,就不需要强制升级客户端插件版本。
3. 特殊场景的快速判断
如果你的项目没有自研后端,是依托第三方推送服务商发送通知,那你完全不需要自己排查协议适配问题:这类服务商早在协议正式停服前就全部完成了HTTP/2新协议的迁移,你只需要确认服务商侧没有依赖旧二进制通道即可,和你本地安装的插件版本没有关系。
内容的提问来源于stack exchange,提问作者federico espinosa
相关产品推荐
相关产品推荐

