iPhone的Push功能原理浅析

heqingshan

贡献于2012-07-13

字数:2538 关键词: iPhone开发 移动开发

iPhone的Push功能原理浅析 内容概要 一、Push机制概括说明 二、PUSH机制详细说明 三、PUSH认证阶段是难点 四、PSUH使用方法   一、Push机制概括说明 Provider是指某个iPhone软件的Push服务器 APNS是Apple Push Notification Service(Apple Push服务器)的缩写,下文统一使用该缩写。  假设Provider为QQ服务器,我们登陆QQ,其实软件是先把登录信息发送到QQ服务器,再通过其服务器来登陆QQ。因此,当我关闭了QQ,QQ服务器会继续为我登陆QQ,此时如果有人对我的QQ账户发送了消息,那么就会触发Push。此时: 第一阶段:QQ服务器把要发送的消息、目的iPhone的标识打包,发给APNS。 第二阶段:APNS在自身的已注册Push服务 的iPhone列表中,查找有相应标识的iPhone,并把消息发到iPhone。 第三阶段:iPhone把发来的消息传递给相应的应用程序, 并且按照设定弹出Push通知。 多个推送机制同理可证。 2. 整体流程大体分为五个步骤:   1: Device --> 连接-->  APNs  获取 DeviceToken 2: Device -->连接-->  Provider 提供DeviceToken 3: Provider侦测需要push的消息生成Notification信息 4:  Provider侦把要push的消息推送到APNs 5:   APNs把该消息推送到手机   三、PUSH认证阶段是难点 iPhone PUSH认证机制,实际上包含两层。一层是物理连接上的认证,另一层则才是涉及到iPhone 设备令牌的认证。 物理连接上的认证:SSL/TLS链接 (如果你了解TLS,那么这里我几乎无需介绍。) iPhone在开启Push的时候,会连接APNS建立一条TLS加密链接。每一台正常的iPhone都有一个独有的设备证书,而APNS也有一个服务器证书。两者建立的时候,会验证彼此的证书有 效性。 TLS链接一旦建立,在没有数据的情况下,只需要每隔15分钟进行一次保活的握手,因此几乎不占流量。而 一旦因为意外原因导致链接中断,iPhone会不断重新尝试建立TLS链接,直到成功。 基于token(令牌)的认证 在机制 简介里,我提到过APNS判断Push推送消息该发给哪台iPhone的依据是一个“目的iPhone的标识”,这个 标识就是device token(设备令牌)。设备令牌是怎么生成的呢?是每次建立TLS 连接时,APNS通过前一层次(TLS层)里我们提到的每台正常的iPhone唯一的设备证书(unique device certificate),并用令牌密钥(token key)加密生成的。 在令牌生成了之后,APNS会把设备令牌(device token)返回给iPhone,而对应的Push应用程序(如QQ),则把返回来的设备令牌(device token)直接发送给Provider(如QQ服务器)。这样,当Provider有Push消息要发送时,就会把对应 帐号的设备令牌(device token)和消息一起发送给APNS,而APNS再依据设备令牌(device token),找到相应TLS链接的iPhone,并发送相应的Push消息。 四、PSUH使用方法 第一步:获取证书 获取认证书Certificates.p12   [注释:.p12 文件,文件名可以随便取] 该Certificates.p12认证书 是用于服务器与APNs服务器SSL 连接时的认证,而获取p12的前提是获取APNs Assistant 1:每个程序都要在apple开发中心生成  App ID. 2:单击app id 的后面的 Configure 3:在新的页面中,勾选Enable Push NotificationServices , 而后点击Configure ,随后出现APNs Assistant,APNs助手会引导生成你的程序与APNs服务器进行SSL连接的认证书App ID specific Client SSL certificate[注释:一般文件名为“aps_developer_identity.cer” 可修改] 4:APNs助手会引导你保存SSL certificate到你的硬盘,保存好后双击,安装到你的keychain 5:  执行完以上四步,可以点击Done,关闭APNs助手。 6:启动Keychain Access程序,查看刚才安装的认证,name 为appleDevelopment/Production  push Services。。。 导出--即获得Certificates.p12 保存好给Provider 服务器使用 第二步:iPhone 端 iPhone provisioning  以开启了PUSH功能App ID 生成相应的provisioning。 iPhone需要用到的方法函数如下: //注册启用push [[UIApplication sharedApplication]registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert |UIRemoteNotificationTypeBadge /*|UIRemoteNotificationTypeSound*/)]; //用该判断 程序是不是通过push消息启动的 - (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions //iPhone 从APNs服务器获取deviceToken后激活该方法 - (void)application:(UIApplication *)appdidRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken //注册push功能失败 后 返回错误信息,执行相应的处理 - (void)application:(UIApplication *)appdidFailToRegisterForRemoteNotificationsWithError:(NSError *)err

下载文档,方便阅读与编辑

文档的实际排版效果,会与网站的显示效果略有不同!!

需要 3 金币 [ 分享文档获得金币 ]
0 人已下载

下载文档

相关文档