体制原理,小编的三星手机接受Wechat来消息提示

问:我的苹果手机收到微信来信息提醒,为什么打开微信等几秒钟才能在微信里看到?

iOS 系统的推送(APNS,即 Apple Push Notification Service)

依托一个或几个系统常驻进程运作,是全局的(接管所有应用的消息推送),所以可看作是独立于应用之外,而且是设备和苹果服务器之间的通讯,而非应用的提供商服务器。你的例子里面,腾讯 QQ 的服务器(Provider)会给苹果公司对应的服务器(APNs)发出通知,然后再中转传送到你的设备(Devices)之上。当你接收到通知,打开应用,才开始从腾讯服务器接收数据,跟你之前看到通知里内容一样,但却是经由两个不同的通道而来。

图片 1

iOS 推送机制流程图

相信大家在使用iPhone版微信的时候都会有这样的经历,微信已经处于关闭状态了(后台进程运行一段时间就被系统杀掉),这时候我们收到了一个消息提醒,打开微信应用,微信显示“连接中…”和“收取中…”,然后再次显示一次刚才系统推送给我的消息通知。对这个现象比较好奇,于是去知乎上查一下资料,发现知乎上的热心人还真多,看了大家的回答之后,总结如下:

图片 2

Android 系统推送机制

Android就不同,更像是传统桌面电脑系统做法。每个需要后台推送的应用有各自的单独后台进程,才能和各自的服务器通讯,交换数据。另外其实 Android 也有类似 APNS 的 GCM(Google Cloud Message),属于开发者可选,非强制。

图片 3

Android 推送机制流程图

Android 上有 GCM (Google Cloud Messaging)

iOS 上有 APNs(Apple Push Notification service)

Windows Phone 上有 MPNs(Microsoft Push Notification service)。

但是由于Windows Phone的市场占比不高,所以一般也就没有人会专门做wp系统的推送。至于Android的GCM在国内基本上是不可用的。原因主要有以下两点:

一、国内大部分Android手机都不带Google服务,也就用不了GCM,这是主要的问题。

二、在国内Google的服务一般都不太稳定,原因你懂的。

所以现在在做消息推送的时候Android平台采用服务器与设备直接拉一条长连接的方式实现功能,而iOS平台则采用苹果自己的APNs服务。

在分别说这两个平台推送原理的时候,先回答一下题主关于服务器如何先找到设备、再找到app的问题。每一个设备都有一个自己的设备号,而设备中的app又都有一个唯一的包名。所以服务器只需要找到设备号与包名就可以定位到某个设备的某个应用,而这设备号与包名会一起构成一个标识符,叫做device_token,因此问题就简化为把device_token与消息内容等信息交给服务器,服务器把内容发到唯一的device_token上。这就好像你在上海要通过顺丰寄送一个快件儿给某某小区的某某房间,那么快件儿首先会邮递到顺丰公司在北京的总站点,之后再根据小区的地址投递/路由到某某房间,这样一个寄件过程就算完成了。在这里,你要寄送的快件儿就是你要发的“消息”,送达房间相当于最终“接收消息的App”,顺丰公司在北京的总站点相当于这里提到的“设备”,送达房间的房间号就相当于这个环节里面提到的“包名”。

首先是IOS平台,IOS的推送是通过苹果自己的APNs服务进行的,用户需要将device_token以及消息内容等推送信息交给APNs服务器,剩下的均由苹果自己来完成。

iOS应用的推送大部分情况下都要依赖苹果生态提供的APNs(Apple Push Notification Service)服务。

*
*

图片 4

iOS推送推送流程

[之所以去知乎查看技术问题,因为我并非技术人员,而知乎上很多开发人员是会用通俗易懂的方式解释好技术问题的,因为里面有不少大牛。]

感谢您的阅读!

先介绍一下两个重要的消息推送服务:

你会发现一个非常有趣的现象,你用iPhone手机和电脑同时登陆微信,你将iPhone关机,结果出现了一个有趣的事情——手机的的微信消息总会比电脑微信消息慢个几秒钟;你也会发现,有时候微信的信息声音出现了,可是总会隔了几秒,微信里才能看到消息。

iOS 的推送:Apple 官方的 APNs (Apple Push Notification service)。

我们必须要知道的第一个知识点——iOS后台的推送机制是什么?我们知道安卓手机和iOS系统因为使用了不同的运行机制,所以手机会在流畅性方面有所区别。

Android 的推送:Google 官方的 GCM (Google Cloud Messaging)。

可是,你会发现安卓系统和iOS 系统有一个类似技术推送原理,其中,安卓是GCM (Google Cloud Messaging);而苹果是APNs(Apple Push Notification service)。

其实两个推送服务的机制是比较接近的,以苹果为例,用一个图示表示如下:

因为iOS系统的优势是,伪后台的机制,甚至于早期的iOS做到了,开启一个App,另外一个App就被冻结,这就是为什么很早有人说,你买iPad干嘛,你看网页的时候,又不能同时听歌。

采用 APNs 或者 GCM 进行消息推送,消息都会经由苹果或者谷歌的服务器,然后再到用户设备上,这样做的好处主要有以下几点:

还有一个关键的内容是:我们熟知的通知问题。如果这种后台管理机制,应该通知是不可能被传送的,因为App被冻结了,而APNs(Apple Push Notification Service)Apple Push服务器通过获得全新的App的通知,然后又服务器统一进行发送,所以能够让你即使手机的App被关闭的,可是通知却能够及时传送,问题就是有延迟。

1)省电

首先进行认证,保证设备里的证书是苹果设备将信息接收并且保存在APNs当中,并且通过APNs从其中注册的列表中查找该IOS设备,并将信息发送到该设备; 设备接收到信息,传给相应的APP,并按照设定弹出推送消息。

这个是最直观的体验。由于这两套推送机制都是用户设备和苹果或谷歌的服务器保持一个长连接,而这个长连接是几乎不会耗损多少电量的,采用统一的连接来接收手机上所有应用的通知消息,耗电量少是显而易见的。

通知是我们自己设定的!这种传送机制,iOS系统基本上目前不会进行更改的。除非,未来5G时代,会不会加速服务器处理速度。

由于苹果采用封闭的策略,因此所有第三方应用都必须采取这种推送方式,因此iPhone设备即使电池电量比Android少也更耐用。但由于国内众所周知的原因,Google 服务的稳定性大受考验,而且 Google 对第三方应用推行 GCM 方式并不是强制性的,因此国内的应用开发者几乎都单独在后台常驻一个进程,来专门处理消息推送。

看看评论就知道全是没用过苹果的在评论!你把后台刷新打开就正常了

2)开发简单

这是消息接收延迟的情况,iOS系统中目前普遍存在。iOS版微信正常打开状态中接收会正常,而这种接收延迟的情况多数出现在于手机锁屏、微信正后台运行等情况中。通常表现就是响铃震动了,然后打开微信要1-2秒左右时间才会显示消息内容。锁屏时微信来新信息,点开微信APP后几秒钟才会提示。

这个是对应用开发者来说的,一般不使用上述的 APNs 或者 GCM 推送机制,就需要自己搭建一条推送服务,可以采用别人开发的成熟协议,或者自己单独开发(如腾讯),这对于开发者来说还是有门槛的。

为什么安卓版微信多数情况都不会接收延迟?而iOS就会延迟?因为它们的后台管理机制不同。

3)利于统一管理

安卓是后台应用常驻,这和系统对进程的调度机制有关系。现如今Android手机的运存做到6G、8G甚至是更大,这更有利于后台程序保留。只要对象所占用的内存没被回收,它就可以在后台常驻。什么时候会被回收?这是JAVA垃圾回收机制的东西,内存调度有个阀值,只要程序内存占用没达到阈值或是没出现内存泄露的情况,通常程序就继续被后台保留。

采用统一的方式来处理就使得系统可以更高效,不会出现多应用同时处理消息卡顿的情况。

这样的好处何在?进程没被关闭,下次启动应用的速度明显是快多了。因而,微信消息能保障及时接收其实就是出于Android系统后台常驻的原因。

当然坏处的话,一个就是稳定性和实效性依赖于苹果或者谷歌的消息服务器,当然这种机制目前正常情况下都能做到5s以内的延迟。如果是第三方应用单独放置一个常驻进程处理,延迟一般在1s内,可以忽略不计。

额外的,有些人说Android也接收延迟?那么你可以检查一下该应用是否有后台活动的权限。优点是保障消息接收及时了,缺点肯定是更耗电些。

以上就是两种常见的消息推送机制。但还有一个情况没有解释,为什么我们打开iPhone应用(如微信),应用还要再次和第三方服务器连接一次,再取回一次消息?

那iOS版微信又怎么回事?iOS消息推送是基于APNs,即苹果推送通知服务。iOS微信客户端没打开的情况下,消息就暂由APNs统一管理。当打开微信后,APNs服务再把消息发送到iPhone应用程序微信上。大量的消息存储和转发将消耗Apple服务器的资源,可能也是成本考虑,APNs的存储-转发能力太弱,缺点就是出现了消息接收延迟。

这个可以解释为,当应用处于后台关闭状态时,由iOS系统推送一个消息通知给我们。当我们打开应用后,我们的设备就直接和第三方应用的消息服务器通信了,不需要再经由苹果消息服务器传递。

好处也是有的,省电嘛!目前只有微信正在运行状态中不会出现消息延迟的情况,除非网络问题这些额外因素影响。而锁屏时、后台运行这些状态,点开微信APP后可能你要等几秒钟才会有消息。

但为了保证消息传递的完整性,刚才系统推送的消息并没有在应用里面显示,所以应用再与第三方服务器建立连接后,再重新把刚才那条消息取回来,这就造成了系统通知一次消息,应用打开后再显示一次消息。当然这种做法可能在使用体验上有些许瑕疵(也许强迫症患者会这么认为吧),但消息的完整性是必须要保证的。

是手机旧了,苹果手机就是这样,用久了的手机,虽然不这么感觉卡,但接收已经变慢

苹果设备统一采用 APNs 推送机制,至少很省电,而安卓设备几乎每个应用都单独设置一个常驻进程来收发消息,造成的情况是,安卓设备将会非常耗电(即使你不使用,后台却同时开着那么多进程),一方面是由于谷歌服务不稳定造成的,但更重要的是,国内开发者都是自私的,只管自己的应用功能正常,而不会顾用户的手机电池会不会耐用。苹果的推送机制别无选择,但安卓系统在国内是存在稳定的推送服务提供商的,一旦采用也能达到iOS设备的效果,但几乎很少开发者会采用。

这个好像是苹果的一个后台管理机制,手机退出软件回到桌面,信息会由APNS(Apple Push Notification Service,Apple Push服务器)来统一管理,当接收到新信息,服务器再发送给手机,以此来达到平衡耗电和app后台的作用,缺点是会有一定延迟

另外要穿插一个小插曲就是,微信曾经出现过大范围的宕机情况,消息收发出现严重延迟,实际上是网络服务提供方(如移动、联通、电信)在网络上捣鬼,导致消息传递出现大范围延迟。身处国内,即使强大如腾讯,也要对三大运营商忌惮三分啊!当时明明对运营商暗中使坏切齿痛恨,但仍然咬牙向外部宣称“这是由我们的技术故障造成的……”,当时好像还找了个特别无厘头的解释——施工被挖断光缆。好吧,QQ都活了15年,容灾备份机制会没有,怎么可能出现那么严重的事故呢?!

问题:我的苹果手机收到微信来信息提醒,为什么打开微信等几秒钟才能在微信里看到?

回答:信息是苹果的服务器发的,这也是为什么苹果的内存能够做到这么小的原因。


苹果的APNs

苹果推送通知服务,该技术由苹果公司提供APNs的服务。

首先,APNs会对用户进行物理连接认证,和设备令牌认证;

然后,将服务器的信息接收并且保存在APNs当中,APNs从其中注册的列表中查找该IOS设备并将信息发送到该设备;

最后,设备接收到数据信息给相应的APP,并按照设定弹出推送信息。

也就是说,如果你iPhone上的微信在后台被冻结了,冻结原因可能是你在做其他事情,也有可能是关闭了屏幕了。

所以,信息是先放在你的苹果的服务器上的,然后再统一推送到你的iPhone的APP,所以会有一些延迟。

有什么优势?

我们知道iPhone的内存不大,但是为什么呢?就是因为iPhone把后台的APP都冻结了,不给他们资源运行。

但是,怎么接受信息呢?那就是通过苹果的服务器统一推送,那就不用做大内存,让APP常驻后台了。

为什么安卓不可以?安卓本身是可以做到的,所以你看国外的安卓的内存都不大,即使是旗舰机都是4G左右的。这不是因为iPhone的内存有多先进,而是他们能够使用谷歌的GMS服务。

国内,小米、华为、OPPO、vivo这些厂商都打算要做一个,但是要推广的难度太大了,一直在推广,但是一直很难做到。

二种情况,一种是移动网络不稳定一种是你更新了手机系统和之前的App还不完美匹配。

正常,它是按时间排序,假设你12点关闭屏幕或者不在微信运行的界面,当你1点收到推送的时候,12点~12:59分被你设置成不提醒的消息一直在接收,最后才到1点时候真正你需要的消息。

另外的因素就是网络速度 + 手机处理器处理的速度

正常,新款打开时会更快。

没事 我的也这样 我已经喜欢了

我其实一直认为是我的网不好,我也不专业不是很懂哎

一样的感受。视频接了。可是视频提示音还在想

本文由必赢56net在线登录发布于必赢娱乐官方网站,转载请注明出处:体制原理,小编的三星手机接受Wechat来消息提示

相关阅读