签完的 App 收不到推送?先查这四处,别急着怪推送服务

先给结论:签完的 App 能正常收到推送,这件事和「签名」本身不冲突。真正决定能不能收到的是另外两样——签名时有没有把推送相关的权限配置留下来,以及服务端用的是哪一套推送环境。

推送走的其实不是 App 自己的路

iOS 的推送链路是:你的服务器把消息交给 APNs(Apple Push Notification service,苹果推送通知服务),由苹果的服务器再下发到设备,最后交给 App。整条链路上,App 是怎么装进手机的——App Store(苹果官方应用商店)下载、TestFlight(苹果官方测试分发渠道)、企业签名、超级签名——都不参与推送的传输过程。

所以「签名 App 收不到推送」这句话本身是个误诊。签名影响的是 App 有没有资格向 APNs 注册、以及注册到了哪一个环境,不是推送这条路通不通。

最常出问题的四个地方

  • 推送权限声明在重签时丢了。重签名会重写包里的签名信息。如果新证书对应的授权配置里没有带上 aps-environment(推送环境声明,写在签名里的一组权限开关)这一项,App 启动时就拿不到 device token(设备令牌,APNs 用来定位你这台设备的字符串),推送会全丢。这是最常见的一处。
  • 推送环境对不上。APNs 分 sandbox(沙盒,开发测试环境)和 production(生产,正式环境)两套。用个人/公司开发者证书签出来的包,通常落在开发环境;用企业证书签的包,一般落在生产环境。服务端如果只配了生产地址,开发环境拿到的令牌就推不通,反过来也一样。
  • Bundle ID(应用唯一标识)被改了。推送证书是跟 App ID 绑定的,Bundle ID 一变,服务端用的推送证书就和包对不上,APNs 会直接拒绝这条下发请求。
  • 设备令牌没更新。UDID(设备唯一识别码)不会变,但每次卸载重装后 device token 会重新生成。服务端如果缓存了旧令牌又不刷新,后台会显示「发送成功」,用户却一条都收不到。

三种签名方式的差别

企业签名(用企业开发者证书签的包)一般不限制安装台数,走生产环境居多,接推送相对省事;超级签名(按 UDID 绑定设备的签名方式)用的是个人/公司开发者账号的证书,默认落在开发环境,如果服务端只对接了生产环境,就要提前说明;TestFlight(苹果官方测试分发渠道)是苹果自己的通道,推送配置跟正式上架一致,但受 90 天有效期限制。三种路线在推送这件事上都能跑通,差别只在环境参数。

四步自查顺序

第一步,App 首次启动时确认有没有拿到 device token,拿不到就是权限声明的问题;第二步,确认服务端存的是最新一条令牌;第三步,确认服务端连的是哪个环境的 APNs 地址和端口;第四步,核对推送证书绑定的 App ID 与包里的 Bundle ID 是否完全一致。四步里有任意一步对不上,推送就到不了。

小结

签名不会「阉割」推送能力,会出问题的是重签名过程中的权限丢失和环境错配。送签前把「这个包有没有推送、走哪个环境、Bundle ID 是否保持不变」三件事跟服务商讲清楚,比事后从头排查省事得多。


我是本期作者小思,想解决苹果企业签名、超级签名、TF签名问题?可以在微信公众号对话框找到我哦~(QQ:822404920 微信:A-mk5888)

打赏
苹果签名有什么坏处?这几个问题先前就该知道
上一篇
签名后微信登录、Apple 登录用不了?问题出在权限配置上
下一篇

发表评论

注册不是必须的

栏目导航

iOS 签名 · 1 对 1

企业签 / 超级签 / TF 签

微信 A-mk5888在线接单
生成中...
QR code title