通知那些事儿(一):简介

本文译自《Introduction》

关于本地与远程推送

本地通知远程通知就是所谓的用户通知的两种类型,区别于广播通知(由NSNotificationCenter类管理)与键值观察通知用户通知在应用不在前台运行时,仍能让用户获取到新信息。比如,这些信息可以是一条短信、一件即将发生的日历事件或者从远程服务器获取的新数据。用户通知不管来源是本地还是远程,都由操作系统来呈现,且两者视觉和听觉效果一致。它们能显示一个提示消息或者在应用图标显示角标,也能在弹出提醒或者显示角标的同时,播放提醒音

当用户收到通知后,可以点击通知启动关联应用,查看详细的通知详情。当选择忽略通知,应用不会被激活。

一览

本地通知远程通知在呈现给用户的层面是一致的,但是它们服务于不同的情景,并且配置和管理上是存在差异的。

本地与远程通知的比较

许多应用运营是在应用不在前台的时候,基于用户感兴趣事件的发生时间或者内在联系。当这些事件发生的时候,本地或者远程推为应用通知他们的用户提供了一种途径。

本地和远程通知应用于不同的场景,如下:

  • 本地通知是由应用自身有计划发送给用户的,不需要联网;
  • 远程通知,也叫推送通知,从你的设备外部到达应用。它来源你管理的服务器——也叫应用 Provider,通过Apple Push Nofification service(APNs)推送到你设备上的应用。

更多细节请参考:深度剖析本地与远程通知

注册、调度以及处理用户通知

系统要在将来某一刻触发本地通知,应用在iOS8.0以上系统,需要先注册通知类型(notification types),创建一个本地通知对象(使用UILocalNotificationNSUserNotification),设定通知的日期和时间,指定显示的内容。

而对于接受远程通知,应用也必须要注册通知类型,然后将从操作系统获取的应用特定的设备令牌(device token)发送给Provider

当系统在应用不在前台的时候分发一个本地通知或者远程通知给目标应用,可以通过提示消息、应用角标数字或者提醒音来展示给用户。如果用户点击或按下提示消息操作按钮(或者移动操作侧边栏),应用将会启动并且调用一个方法,将本地通知对象(local-notification object)或者远程通知数据(remote-notification payload)传递给该方法。如果应用正在前台运行时,那么通知就会被App delegate接收。

在iOS8.0之后,用户通知可以包括自定义操作(custom actions)。而且可以无论何时,在用户到达某一地理位置时,推送基于地理位置的本地通知。

更多请参考:注册、调度及处理用户通知

Apple Push Nofitication Service

Apple Push Nofitication Service(APNs)传送远程通知给那些注册过远程通知的应用安装的设备上。设备上每个应用建立一个和服务器可信任和加密过的IP连接,并且通过这个长连接接受通知。Provider通过一个持久、安全的通道连接到APNs,来监控将要推送给应用的数据。当要推送给应用的新数据到到达,Provider通过通道准备并且发送需要推送给目标应用的通知给Apns。

APNs Provider API支持异步,并且在2015年12月开始,支持你的Provider利用HTTP/2协议来发送远程通知给APNs。Provider压缩每个需要推出去的通知,然后通过通道发送给APNs。

更多请参考:Apple Push NotificationAPNs Provider API

远程推送的安全证书

在为你的应用开发和部署远程通知的Provider server,你必须要从会员中心获取一个或多个SSL证书。从2015年12月开始,基于HTTTP/2APNs Provider API让你可以在开发和生成环境中只需要配置一个证书即可。另外,这唯一的证书不但可以用于之前的应用(根据bundle ID 来标识),也允许你关联到Apple Watch和后台运行的VoIP服务。

证书相关请参考:Provisioning and Development

更多参考

关于后台:

关于本地和远程推送的实现:

issues:Troubleshooting Push Notifications