iOS 和 Android 的后台推送原理各是什么?有什么区别

iOS 和 Android 的后台推送原理各是什么?有什么区别,第1张

iOS 和 Android 的后台推送原理各是什么?有什么区别?2013-12-11 17:42| 发布者: zouqun |原作者: 李楠|来自: 知乎摘要: iOS 的推送iOS 在系统级别有一个推送服务程序使用 5223 端口。使用这个端口的协议源于 Jabber 后来发展为 XMPP ,被用于 Gtalk 等 IM 软件中。所以, iOS 的推送,可以不严谨的理解为:苹果服务器朝手机后台挂的一个 iOS 的推送
iOS 在系统级别有一个推送服务程序使用 5223 端口。使用这个端口的协议源于 Jabber 后来发展为 XMPP ,被用于 Gtalk 等 IM 软件中。所以, iOS 的推送,可以不严谨的理解为:
苹果服务器朝手机后台挂的一个 IM 服务程序发送的消息。
然后,系统根据该 IM 消息识别告诉哪个 Apps 具体发生了什么事。
然后,系统分别通知这些 Apps 。应该说,苹果这种方式在技术上没有什么创新。但是,整个架构是很了不起的。 因为:
1 使用久经考验的协议,技术风险小。
2 苹果勇于承担责任:
他需要维护一个代价不小的服务器集群,而且要为服务器的 down 机负责。
选择低风险的技术方案 Bug 更少,减轻了用户的痛苦,这是构架师的功劳。
苹果承担责任,尽可能的减少了不可控的意外,保证了用户体验。
这,只能说是公司决策者的功劳。
(从侧面说明有个懂技术的 VP 是多重要。。。而 Scott 走人了。。)
他们带给用户的好处也是实实在在的。
1 安全。
只有登录过的开发者可以通过苹果的服务器推送。
2 快速,稳定,可靠。
苹果掌控推送服务器和 OS 。
3 更省电。
4 让整个系统的体验更统一和简单。
不会出现杀后台这种脑残事。(不用大量 Apps / Apps 的服务为了推送挂后台)。
也不会出现 Apps 被杀就收不到推送这种脑残事(早一点的新浪微博 Android 版仍然如此)。
5 开发容易。
当然,开发者还是要做些事情,比如维护个服务器什么的: >iOS 系统的推送(APNS,即 Apple Push Notification Service)依托一个或几个系统常驻进程运作,是全局的(接管所有应用的消息推送),所以可看作是独立于应用之外,而且是设备和苹果服务器之间的通讯,而非应用的提供商服务器
所以, iOS 的推送,可以不严谨的理解为:苹果服务器朝手机后台挂的一个 IM 服务程序发送的消息。
然后,系统根据该 IM 消息识别告诉哪个 App 具体发生了什么事。
然后,系统分别通知这些 App
而 Android每个需要后台推送的应用有各自的单独后台进程,才能和各自的服务器通讯,交换数据。
其实 Android 也有类似 APNS 的 GCM(Google Cloud Message)的服务,如果一个应用的推送采用这种模式的话,就和iOS推送一个样了。
GCM相关的程序应该是集成在所谓的Gapps中,但国内的 Android 手机上 GCM 处于基本不可用的状态,而且Android 因为后台可以长驻,所以,App们各显神通。
聊天类应用的话,大多数直接借用 XMPP 规范里的一些成果。少量如微信有IM底子的,自己开发协议。这些在实现原理上与 APNs / GCM 没有本质的区别,但有一定的技术门槛。
而大多数普遍应用,要使用推送的话,则使用轮询的方式简单实现,就是定时去服务器上查询数据,也叫Polling,还有一种手机跟服务器之间维护一个 TCP 长连接,当服务器有数据时,实时推送到客户端,也就是我们说的 Push。
轮询的方式不论怎么优化都比较费电费流量,长连接的方式在网络不稳定的情况下,Socket比较容易断开推送数据失败,
安卓推送可以考虑使用第三方推送工具,比如极光推送

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

一般大型企业对于服务器的运维并不在意,大型企业更偏向于把东西放在自己的服务器上,与apns对接不是问题。小型公司注重成本,这些不必要的支出,就用第三方服务器解决,开发也省事省力。苹果推送适合大型公司拥有自己的服务器,足够的人力物力来研究。
和原生APNs相比,优势:
1、减少开发维护成本。不需要后台服务器与APNs做对接。不需要后台服务器维护更新 device token。可以直接通过极光官网发送消息。 2、可以向iOS、Android、网页发送消息。 3、可以发送透传消息。
大多数企业选择极光传送。极光推送个性化推送满足用户多种推送需要,有效提升用户体验,利用大数据人工智能技术,实现智能用户分群 ,提升消息点击率,推送安全包确保推送内容准确,拒绝运营事故。

1APNS的推送机制

首先我们看一下苹果官方给出的对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、 采用第三方的后台服务程序,比如:百度云推送、极光推送、友盟推送


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/12941235.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-29
下一篇 2023-05-29

发表评论

登录后才能评论

评论列表(0条)

保存