通知(消息)机制
技术博客http://www.cnblogs.com/ChenYilong/
新浪微博http://weibo.com/luohanchenyilong

技术博客http://www.cnblogs.com/ChenYilong/新浪微博http://weibo.com/luohanchenyilong


通知(消息Notification)机制基本概念
• iOS中提供了两种通知机制: - 本地通知
- 推送通知
• 本地通知和推送通知可以让不在前端运行的应用程序告知用户应用程 序内部发生的信息。这些信息可以是一条消息,也可以是即将要发生 的事件,亦或者是远程服务器上有新的数据等
• 通知的展现方式:- 显示一个UIAlertView或者横幅 -更新应用程序图标上的数字 - 播放声音

本地通知--示意图


技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong
本地通知
• 本地通知是一个UILocalNotification的实例,包含以下三个重要属性: - 调度时间:要使用本地通知,必须指定通知触发的日期以及时间,
还可以设置通知的重复间隔,例如按周重复或者按月重复
- 通知类型:用于指定提示文字信息,操作按钮的标题,应用程序 图标上的数字以及要播放的声音
- 自定义数据:本地通知还可以包含一个自定义数据的字典 • iOS允许最多允许的本地通知数量为:64

调度本地通知的步骤

1. 2. 3.
4.
实例化UILocalNotification对象 通过fireDate属性,设置操作系统触发通知的日期和时间
如果将timeZone属性设置被当前地区对应的NSTimeZone对象,系统会自动 根据所在时区调整通知触发时间
设置通知的属性:- alertBody:信息内容- alertAction:消息标题- applicationIconBadgeNumber:图标上的数字-soundName:要播放的声音-UILocalNotificationDefaultSoundName:使用默认系统声音
通过userInfo属性还可以将一个数据字典附加到本地通知 调度并提交本地通知
5. 6.
提示:通过userInfo可以在用户通过通知进入系统时定位到所需的位置
消息推送机制原理
• 苹果提供了一堆服务器,每个ios设备和这些服务器保持了一个长连接, ios版本更新提示、手机时钟校准等操作都是通过这个连接实现
• 消息推送服务简称为APNS(Apple Push Notification Service),是该长 连接中的一个服务,如果要向用户发消息,必须通过APNS进行中转
• 消息推送不支持群发,只能一个一个发
• 消息包一般由两部分组成:标示用户手机的id(32个字节)+消息体
(<=256Bytes),消息体是json字符串,传输过程使用SSL加密
• 标示用户手机的ID又被称为Device Token,每个手机都不一样,Device Token非常重要!

技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong




技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong
消息推送机制示意图


Device Token
消息推送机制示意图


Device Token
• 每台机器的Device Token都不一样,但不是硬件编码(UDID)
• 如果重新安装操作系统,Device Token可能会发生变化
• Device Token是在用户手机发起请求时由ASPN生成的
- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken: (NSData *)deviceToken!
• 方法可以获取到用户设备的Device Token!
• 注意:DeviceToken的生成机制可能随时变化,最好方法每次获取 到deviceToken后,与之前(如果有)的deviceToken进行比较, 如果发生变化,及时更新自己数据服务器上的记录

技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong
deviceToken处理流程


消息推送的实现步骤
• 在苹果开发者中心注册并下载一份cer文件
• 新建并下载一个Provisioning Profile
• 编写代码
- (BOOL)application: didFinishLaunchingWithOptions:!
注册允许接收远程通知及通知类型!
!
- (void)application: didRegisterForRemoteNotificationsWithDeviceToken:!
记录deviceToken并提交至服务器! !
-(void)application:didReceiveRemoteNotification:fetchComple tionHandler:!
接收到远程通知处理方法! !
提示:发送通知消息的工作由后台服务器完成,客户端开发不需要考虑

技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong
设置应用程序远程推送的许可证


允许应用程序接收远程通知


从证书颁发机构请求证书


在开发中心申请通知推送服务验证字


技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong
选择验证字使用的App ID


上传CSR文件


下载生成的验证字文件


技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong
将验证字文件导入到钥匙串管理器


新建开发许可证文件


选择App ID



技术博客http://www.cnblogs.com/ChenYilong/ 新浪微博http://weibo.com/luohanchenyilong
Thanks! Q & A

© chenyilong. Powered by Postach.io