一、消息推送原理
在实现消息推送之前先提及几个于推送相关概念,如下图1-1:
1、provider:就是为指定ios设备应用程序提供push的服务器,(如果ios设备的应用程序是客户端的话,那么provider可以理解为服务端[消息的发起者]);
2、apns:apple push notification service[苹果消息推送服务器];
3、iphone:用来接收apns下发下来的消息;
4、client app:ios设备上的应用程序,用来接收iphone传递apns下发的消息到制定的一个客户端app[消息的最终响应者];
上图可以分为三个阶段:
阶段一:provider[服务端]把要发送的消息,目的ios设备标识打包,发送给apns;
阶段二:apns在自身的已注册push服务的ios设备列表中,查找有相应标识的ios设备,并将消息发送到ios设备;
阶段三:ios设备把发送的消息传递给对应的应用程序,并且按照设定弹出push通知。
具体过程,如下图1-2:
1、[client app]注册消息推送;
2、[client app]跟[apns service]要devicetoken, client app接收devicetoken;
3、[client app]将devicetoken发送给[provider]push服务端程序;
4、当push服务端程序满足发送消息条件了,[provider]向[apns service]发送消息;
5、[apns service]将消息发送给[client app].
二、消息推送实现
1、生成*.certsigningrequest文件,步骤如下:
[macbook-应用程序-实用工具-钥匙串访问-证书助手-从证书机构求证书-证书信息(用户电子邮箱地址{填写您的邮箱,如:your@email.com},常用名称{任意,如:pushdemo},请求是:{单选,选择‘存储到磁盘'})-继续-保存],这时会在您指定的地方生成你指定的文件,默认为certificatesigningrequest.certsigningrequest文件,这里命名为:pushdemo.certsigningrequest.在此*.certsigningrequest已经生成,具体操作步骤如图所示。
如果生成成功,则会在[钥匙串访问|登录|密钥]栏目中列出与*.certsigningrequest关联的密钥,这里是pushdemo,如图所示:
2、新建一个app id(在苹果开发者账号中配置)
(1)登录ios dev center,登录成功后,点击(ios provisioning portal对应链接),如图所示:
(2)创建new app id[app idsàmanageànew app id]( description{填写您对此app id的描述,如:ishop},bundle seed id(app id prefix){选择绑定app id前缀,如:默认选择generate new},bundle identifier(app id suffix){填写绑定app id后缀,如:com.yourcorp.ishop}),如下图所示:
这样就会生成下面这条记录,如图所示:
(3)配置上一步中生成的app id,让其支持消息推送[点击2-6中的configureà选中enable for apple push notification serviceà点击configure],如图所示:
(4) generate a certificate signing request(生成部署请求认证)[点击2-7中的2configureàcontinueà步骤1生成的*certsigningrequest文件(这里是ishop.certsigningrequest)-generate-生成完成后将其下载下来,命名为:aps_developer.cer],双击aps_developer.cer证书{将证书与密钥关联,并将证书导入到macbook中},如下图所示:
(5)创建development provisioning profiles[开发许可配置文件](provisioning| development|new profile),具体操作流程如下图所示:
点击图中submit,生成development provisioning profiles[开发许可配置文件],这里是:ishopdevprofile.mobileprovision如下图所示:
下载此开发许可证书(用于联机调试)。
总结,到现在为止,我们已经生成:a:*.certsigningrequest文件(在步骤(4)中使用,用于生成证书b)、b:aps_developer_identity.cer证书(在provider[push服务器]服务端应用使用)、c:*..mobileprovision开发许可配置文件(在client app客户端应用联机调试使用)。
3、新建一个项目
1. 创建一个"single view application" project,为省事,你设置的"company identifier" + "production“必须和step 5创建的app id的"bundle identifier"一致。
2. 在appdelegate.mfile的"didfinishlaunchingwithoptions" method里,添加下列代码 (用于为app register push notification feature):