首先我们看一下苹果官方给出的对ios推送机制的解释。如下图
Provider就是我们自己程序的后台服务器,APNS是Apple Push Notification Service的缩写,也就是苹果的推送服务器。
上图可以分为三个阶段:
APNS推送通知的详细工作流程
下面这张图是说明APNS推送通知的详细工作流程:
根据图片我们可以概括一下:
1. 什么是远程消息推送?
3. 实现消息推送的步骤
总结下大致流程
1.设备打开某个App后,会生成唯一的 一个token ,并把这个token上传给我们自己的服务器,我们的服务器有了token,就可以向我们的app推送通知了,这个是前提。但是这个通知并不能直接推送给我们的设备,而是要推送给苹果的服务器。
2.我们的服务器会将token和推送的内容,一起推送给苹果的服务器。
3.苹果服务器会根据token定位到设备,将push推送给设备。
4.设备拿到这个push,就会知道是哪个app。然后就可以将这个通知推送到具体的app。
推送的实现方式:
想要收到推送消息 ,就必须要有后台服务器(下面的1、2)往 苹果的APNs的服务器发请求。
1、公司自己开发后台服务器程序
2、 采用第三方的后台服务程序,比如:百度云推送、极光推送、友盟推送
消息推送可以说是目前除各类App除自身功能之外 最重要的功能之一 。小到闹钟、 日程提醒 ,大到各种 社交软件 、资讯类软件的消息推送都离不开这一功能。
不过对于不少在iPhone用户可能都遇到过因为消息推送与消息刷新加载、延迟或者 错过微信电话等情况 。想了解iPhone推送消息的 原理以及如果解决 ,不妨接着往下看。
苹果推送服务(Apple Push Notification service,简称APNS)是在随着iOS 3.0就开始推出的一项服务,推送过程大致分为三个阶段。
第一阶段:App会把要发送的消息、接收端iPhone的标识 打包 , 发给APNS 。第二阶段:APNS在自身的已注册Push服务的iPhone列表中, 查找有相应标识的iPhone ,并把消息 发送 到iPhone。第三阶段:iPhone把发来的消息 传递给相应的应用程序 ,并且按照设定弹出Push通知。
简而言之,只要用户开启了推送权限,业务服务器就可以 随时 通过 调用 APNS服务向用户推送通知,而 不需要App常驻后台 。
其实原生的安卓也有类似的谷歌推送服务GMS(google massages service)。但是目前国产手机的操作系统并没有加入这一功能,基本都是使用 各自的消息推送平台 。比如小米的Mi push和华为的push kit等等。
在这之外仍旧有一些应用不通过这一类推送服务,而是App自身通过后台服务与业务服务器维持长连接通信,即通过 App驻留在后台的方式 正常推送消息。
相比之下,苹果可以消息通知上比较集中和统一。iPhone的消息推送不需要有后台进程常驻的,内存使用更少, 电量也更少 。而安卓设备因为消息推送不同意容易造成一些App关闭后台后无法接收到消息、或者App后台 自启动 造成的 额外耗电问题 。
但在实际体验上,用户对于这一差别产生的耗电量liang差距可能 感知并不明显 。而多数iPhone用户因为 推送机制导致 有时候虽然已经收到消息通知,但是打开App需要 等待几秒钟的加载消息 ,甚至可能因此错过一些重要的微信电话。
理论上 通过打开“后台 App 刷新” 可以解决 先收到消息推送再加载显示内容的问题,但是 实际的使用中 可能对微信这一类社交软件 不起作用 。
目前iPhone在消息推送方面主要存在着两个问题,其中一个就是 消息推送延迟 ,主要影响因素有 消息通知设置 、网络延迟以及 服务器稳定性 。
目前针对苹果的推送服务,苹果提供了及时提醒, 延迟提醒 (通知摘要)以及不提醒的方式。而如果选择了 定时摘要 的就会出现消息推送延迟的问题。
网络延迟 这一因素应该 不难理解 ,而服务器稳定性这一因素其实在这些年已经 有所好转 。像前些年我们可能时不时就看到App Store 加载失败 ,iCloud无法同步等问题,这可能就是跟早期苹果在国内的服务器(云上贵州)不稳定有关。
消息推送延迟的解决办法。进入“设置>通知”,将推送消息可能存在延迟的 通知全部关闭 , 手机重启 后找到通知设置,把刚才关闭的 重新打开 。
针对另一个可能会遇到的消息 加载时间较长 的问题,都有相对应的影响因素,比如网络速度、手机性能以及 App的后台是否被关闭 。
加载时间一定程度上取决于当前 手机的性能 、 可用运行内存 、以及磁盘加载速度。
但这更重要的其实是 避免退出常用软件的后台 。 频繁关闭手机后台不会影响手机本身的消息推送,但是收到新消息后打开该应用还 需要时间加载 。因此 最明显有效的方法,就是针对性地关掉软件的后台。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)