关于
本地通知和推送通知是两种通知应用程序的方法(通知时不需要程序在后台运行)。通知可能是一条消息,一个将要发生的日历事件,或者来自远程服务器的数据。当操作系统收到通知时,本地通知和推送通知看起来(听起来)没有区别。它们会显示一个告警消息对话框,或者在应用程序的徽标中显示,同时发出声音提示。
注意:推送通知在iOS3.0中引入,本地通知在iOS4.0中引入。早先的文档叫做苹果推送通知服务编程指南(ApplePush Notification Service Programming Guide)。
当用户想查看应用程序收到的消息、事件或其他数据时,可以打开程序并读取它们。或者选择忽略收到的通知,这样程序不会被激活。
注意:推送通知和本地通知跟广播通知或键-值观察通知不相关。
本地/推送通知概览
推送通知使你能更灵活地与用户交互,同时不需要程序处于运行状态。
本地/推送通知要解决的问题
任何时候,iPhone,iPad,或者iPod中只能有一个程序在前台运行。许多实时性要求高、或者是交互式环境中运行的程序,要求当程序未在前台运行时能让用户知道发生了什么事情。本地通知和推送通知允许这些程序通知用户某些事情发生了。
相关章节:深入本地和推送通知
本地/推送通知与原来不同的地方
本地/推送通知为不同的需要而设计。本地通知对于iPhone,iPad或iPod来说是本地的。而推送通知——来自于设备外部。它们来自远程服务器——也叫做远程通知——推送给设备上的应用程序(使用APNs)同时可以查看消息或下载数据。
相关章节:深入本地和推送通知
本地通知的调度,推送通知注册,及两者的处理
要让操作系统在稍后发送一条本地通知,应用程序需要创建UILocalNotification对象,设置它的发送日期/时间,指定呈现的细节,然后把它放到任务列表中。要想接收推送通知,应用程序必须注册接收该通知,并把设备token告诉通知提供者。
在操作系统发送本地/推送通知时,目标程序并没有在前台运行,它通过告警窗口,徽标上的数字,声音的方式进行提示。如果在告警窗口中用户点击了action按钮(或者拖动了action的滑动条),该程序将启动并调用 UIApplicationDelegate 的 application:didFinishLaunchingWithOptions:方法,并在方法参数中传递一个本地通知对象或者远程通知载体。 如果通知发送时程序正在前台运行, 则会调用application:didReceiveRemoteNotification: 或者 application:didReceiveLocalNotification: 方法。
相关章节:通知的调度,注册及处理
推送通知服务是推送通知网关
苹果推送通知服务(APNs)发送推送通知到设备的接收程序上。每个设备内建了一个通向APNs的可信任的加密ip连接。提供者通过可靠的安全链接连接APNs,同时监控客户短程序关注的数据。当应用程序消息到达,提供者就通过这个链接向APNs发送消息,然后APNs把通知推送给设备。
相关章节:苹果推送通知服务
你必须获取安全信任链接
要开发和部署提供者,必须从iOS Developer Program portal取得SSL证书。一个证书只限于一个iOS应用使用,以bundle ID进行区分;而且仅限于“沙盒”(针对开发和测试)和生产两种环境之一。这些环境拥有固定的ip地址,需要不同的证书。此外还需要针对每个环境获得provisioningprofile。
相关章节:激活和部署
提供者通过二进制接口与APNs交互
这个二进制接口是异步的并使用socket流将推送通知以二进制方式发送至APNs。分别针对沙盒环境和生产环境有不同的接口,每个接口使用不同的地址和端口。对每个接口,你需要使用TLS(或SSL)以及你从苹果iOS开发者程序门户获得的SSL证书建立到APNs的安全链接。通过该安全链接,提供者组装通知并进行发送。
APNs提供feedback服务——对于未能成功下发通知的设备,APNs维护了一个发送失败的设备列表 。提供者应该定期连接APNs,通过feedback服务了解哪些设备始终不能下发成功,以便此后不再向其发送通知。
相关章节:苹果推送通知服务-提供者与APNs的连接
必备条件
对于本地通知和推送通知的客户端实现,需要你熟悉iOS应用部署。对于提供者的实现,需要你有TLS/SSL和流socket的背景知识。
参考
你可以参考以下资源:
- UIApplication和UIApplicationDelegate UILocalNotification 参考文档介绍了客户端程序开发用到的本地/推送通知API。
- Security Overview 介绍了iOS和Mac平台下的安全技术。
- RFC 5246 ,TLS协议规范。提供者和APNs之间的通信使用TLS及其实现SSL。关于这些加密协议的具体信息,请查阅和打印相关文档。