1.由App向iOS设备发送一个注册通知,用户需要同意系统发送推送。
2.iOS向APNs远程推送服务器发送App的Bundle Id和设备的UDID。
3.APNs根据设备的UDID和App的Bundle Id生成deviceToken再发回给App。
4.App再将deviceToken发送给远程推送服务器(自己的服务器), 由服务器保存在数据库中。
5.当自己的服务器想发送推送时, 在远程推送服务器中输入要发送的消息并选择发给哪些用户的deviceToken,由远程推送服务器发送给APNs。
6.APNs根据deviceToken发送给对应的用户。
· APNs 服务器就是苹果专门做远程推送的服务器。
·deviceToken是由APNs生成的一个专门找到你某个手机上的App的一个标识码。
· deviceToken 可能会变,如果你更改了你项目的bundle Identifier或者APNs服务器更新了可能会变。
消息推送可以说是目前除各类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条)