推送是解决轮询所造成的流量消耗和电量消耗的一个比较好的解决方案,在Android上,虽然Google提供了GCM(之前为C2DM),但在国内基本等于没用,各大Android应用基本都自己架设推送Server或是使用第三方推送平台,例如新浪微博使用第三方推送平台“个推”(非广告)。今天要学习的是苹果提供的推送服务APNs(Apple Push Notification services)基本原理和工作流程。
苹果的推送服务APNs基本原理简单来说就是苹果利用自己专门的推送服务器(APNs)接收来自我们自己应用服务器的需要被推送的信息,然后推送到指定的iOS设备上,然后由设备通知到我们的应用程序,设备以通知或者声音的形式通知用户有新的消息。推送的前提是装有我们应用的设备需要向APNs服务器注册,注册成功后APNs服务器会返给我们一个device_token,拿到这个token后我们将这个token发给我们自己的应用服务器,当有需要被推送的消息时,我们的应用服务器会将消息按指定的格式打包,然后结合设备的device_token一并发给APNs服务器,由于我们的应用和APNs维持一个基于TCP的长连接,APNs将新消息推送到我们设备上,然后在屏幕上显示出新消息来。整个过程基本就这样,下面我们看一下设备注册APNs的流程图:
上图完成了如下步骤:
1.Device连接APNs服务器并携带设备序列号
2.连接成功,APNs经过打包和处理产生device_token并返回给注册的Device
3.Device携带获取的device_token向我们自己的应用服务器注册
4.完成需要培推送的Device在APNs服务器和我们自己的应用服务器注册
执行顺序如下所示:
这里要提到的一点是,我们的设备和APNS服务器之间的通讯是基于SSL协议的TCP流通讯,二者之间维持一个长连接,当从APNS服务器注册成功后,一定要将device_token发送给我们的应用服务器,因为在推送过程中,首相是由我们的应用服务器(上图中Provider)将需要推送的消息结合device_token按指定格式(后面会提到)打包然后发送给APNS服务器,然后由APNS服务器推送给我们的设备。
好了,注册设备的过程完成了,接下来就是如何推送了:
推送的过程经过如下步骤:
1.首先,安装了具有推送功能的应用,我们的设备在有网络的情况下会连接苹果推送服务器,连接过程中,APNS会验证device_token,连接成功后维持一个长连接;
2.Provider(我们自己的服务器)收到需要被推送的消息并结合被推送设备的device_token一起打包发送给APNS服务器;
3.APNS服务器将推送信息推送给指定device_token的设备;
4.设备收到推送消息后通知我们的应用程序并显示和提示用户(声音、弹出框)
比较直观的流程参照下图:
上图显示了我们的应用服务器将消息推送到我们的App的完整路径,其实真正完成推送的是APNS服务器,我们自己的应用服务器只是将需要推送的消息告诉苹果服务器,至于如何维护消息队列或如何保证消息能被推送到指定的设备上,这些都由苹果APNS给我们做完了。
上面提到了将device_token和推送消息打包的过程,那么,接下来就看看这个信息包结构是怎样的:
上图显示的这个消息体就是我们的服务器(Provider)发送给APNS服务器的消息结构,APNS验证这个结构正确并提取其中的信息后,再将消息推送到指定的设备。这个结构体包括五个部分,第一个部分是命令标示符,第二个部分是我们的device_token的长度,第三部分是我们的device_token字符串,第四部分是推送消息体(Payload)的长度,最后一部分也就是真正的消息内容了,里面包含了推送消息的基本信息,比如消息内容,应用Icon右上角显示多少数字以及推送消息到达时所播放的声音等。接下来我们拆解看一下Payload(消息体)的结构:
这其实就是个JSON结构体,alert标签的内容就是会显示在用户手机上的推送信息,badge显示的数量(注意是整型)是会在应用Icon右上角显示的数量,提示有多少条未读消息等,sound就是当推送信息送达是手机播放的声音,传defalut就标明使用系统默认声音,如果传比如“beep.wav”就会播放在我们应用工程目录下名称为beep.wav的音频文件,比如当手机锁屏时QQ在后台收到新消息时的滴滴声。
有这么一种情况,当我们将应用从设备卸载后,推送的消息改如何处理呢。我们知道,当我们将应用从设备卸载后,我们是收不到Provider给我们推送的消息的,但是,如何让APNS和Provider都知道不去向这台卸载了应用的设备推送消息呢?针对这个问题,苹果也已经帮我们解决了,那就是Feedback service。他是APNS的一部分,APNS会持续的更新Feedback service的列表,当我们的Provider将信息发给APNS推送到我们的设备时,如果这时设备无法将消息推送到指定的应用,就会向APNS服务器报告一个反馈信息,而这个信息就记录在feedback service中。按照这种方式,Provider应该定时的去检测Feedback service的列表,然后删除在自己数据库中记录的存在于反馈列表中的device_token,从而不再向这些设备发送推送信息。连接Feedback service的过程同样使用Socket的方式,连接上后,直接接收由APNS传输给我们的反馈列表,传输完成后断开连接,然后我们根据这个最新的反馈列表在更新我们自己的数据库,删除那些不再需要推送信息的设备的device_token。从Feedback service读取的数据结构如下:
结构中包含三个部分,第一部分是一个时间戳,记录的是设备失效后的时间信息,第二个部分是device_token的长度,第三部分就是失效的device_token,我们所要获取的就是第三部分,跟我们的数据库进行对比后,删除对应的device_token,下次不再向这些设备发送推送信息。
本篇主要介绍了苹果推送机制APNS的基本原理和响应的组件及服务,下篇将介绍如何在我们自己的项目中集成APNS服务实现消息的推送!
相关推荐
该项目是一款基于Java语言实现的苹果推送服务APNS客户端库——APNS4J的设计源码,共包含37个文件,主要包括31个Java源文件、1个Git忽略文件、1个YAML配置文件、1个LICENSE文件、1个README文本文件、1个Markdown文件...
`iOS苹果推送apns测试工具.zip`文件包含的资源显然是为了帮助开发者测试APNs的功能和配置。以下是对APNs和相关测试工具的详细解释。 **苹果推送通知服务(APNs)** 1. **工作原理**:当应用程序注册APNs时,苹果...
苹果推送通知服务(Apple Push Notification service,简称APNS)是苹果公司为iOS、iPadOS、watchOS、tvOS等设备提供的一项功能,允许应用程序在未运行时接收消息。这些消息可以是提醒、通知或者数据,使得开发者...
苹果推送服务(Apple Push Notification service,简称APNs)是苹果公司提供的一项服务,允许开发者将实时的通知信息推送到iOS、macOS以及watchOS等设备上。这个“APNS 苹果消息推送项目源码,运行即用”包含了实现...
APNs(Apple Push Notification service)是苹果公司提供的推送服务,允许开发者将消息推送到用户的iOS设备上。本教程将重点讲解如何使用Java实现基于HTTP/2协议的APNS推送,并假设你已经对JDK 11及以上版本有一定的...
Apple Push Notification service(APNS)是苹果提供的一个远程推送服务,它允许服务器端向运行iOS、macOS的应用发送推送通知。以下是APNS的工作流程: 1. **获取证书**: 开发者在Apple Developer Portal中生成APNS...
**苹果推送通知服务(Apple Push Notification service,简称APNS)** APNS是苹果公司提供的一项服务,用于向iOS、iPadOS、watchOS、tvOS以及macOS设备推送通知。通过APNS,应用开发者可以在他们的应用不在前台运行...
APNs是苹果提供的一项服务,允许开发者将实时消息推送到用户的iOS设备上,如应用更新、消息提醒等。在Java环境中实现APNs推送,我们需要理解其工作原理,并掌握相应的API和技术。 首先,APNs推送的基本流程包括以下...
Java进行苹果APNS(Apple Push Notification Service)消息推送是一项在iOS和macOS应用程序中实现远程通知功能的关键技术。本文将详细介绍如何使用Java实现这一过程,同时关注`javapns`库和`bcprov-jdk`加密组件的...
接着,你需要获取Apple的推送证书,这通常是一个.p12文件,包含了APNs认证信息。在Apple Developer Portal中创建并下载这个文件,然后在Java代码中加载它: ```java FileInputStream p12File = new FileInputStream...
本篇文章将探讨的是如何使用Apple Push Notification Service (APNS) 在Android平台上实现推送技术。尽管APNS是苹果公司的服务,主要为iOS设备提供推送,但有一些情况,例如目标用户群体包含iOS设备用户或者开发者...
苹果推送通知服务(Apple Push Notification service,简称APNs)是苹果公司为iOS设备提供的一种实时推送通知服务。它允许开发者向用户的iOS设备(如iPhone、iPad和iPod Touch)发送推送通知。这种通知可以在应用...
本文将深入探讨iOS APNS推送消息的实现,包括iPhone端和服务端的设置和交互。 首先,让我们从iPhone端开始。在iOS应用中集成APNs推送功能,开发者需要做以下几件事: 1. **获取设备Token**:当用户安装并首次运行...
此外,对于推送通知中的语言偏好,苹果推送通知服务也提供了一种机制,允许提供者向APNs传达当前的语言偏好设置。 通过上述内容的学习,开发者可以系统地掌握苹果推送服务的各个方面,并在实际的应用开发中运用这些...
苹果推送通知服务(APNs,Apple Push Notification service)是苹果公司提供的一项允许应用程序开发者向其iOS、iPadOS、watchOS、macOS设备用户发送实时通知的服务。通过APNs,开发者可以构建应用程序,使得用户在不...
总结,C#结合APNS推送技术,可以实现实时、高效地向苹果设备发送通知。在VS2008和SQL2008环境中,我们需要管理Device Tokens,构建推送消息,连接APNS服务器并处理可能出现的错误。通过不断优化和调试,可以构建出...
【苹果APNS2推送DEMO】是针对Apple Push Notification service(APNs)第二版的一个示例项目,旨在帮助开发者理解和实现iOS与macOS应用的远程通知功能。APNs是苹果公司提供的服务,允许应用程序在后台接收来自服务器...
`PushSharp.Apple.dll`和`PushSharp.Common.dll`是PushSharp库的一部分,这是一个强大的跨平台APNs推送服务,它支持多种推送服务,包括Apple的APNs,使得推送消息的实现更为便捷;`IOSPush.Toolkit.pdb`是程序的调试...
苹果消息推送(Apple Push Notification service, APNs)是苹果公司为开发者提供的一项服务,用于向iOS、iPadOS、watchOS、tvOS以及macOS设备发送远程通知。在Java环境中实现APNs推送,需要掌握以下几个核心知识点:...
在iOS应用开发中,苹果推送服务(Apple Push Notification service,简称APNs)是苹果公司提供的一项功能,允许开发者向已安装其应用的用户发送实时通知。为了提高推送效率和响应速度,多线程技术常常被引入到APNs的...