1)先配置iOS推送通知:
配置推送通知比较麻烦,需要iOS开发者帐号,然后配置一个Apple ID、配置概要文件和SSL证书。
1 证书签名请求
首先需要证书签名请求,这需要在Mac OS X系统中完成,通过在系统中选择“实用工具”→“钥匙串访问”,然后在打开菜单“钥匙串访问”→“证书助理”→“从证书颁发机构请求证书…”。
选择“从证书颁发机构请求证书”菜单后会弹出证书助手对话框,在用户电子邮件地址输入你的邮件地址,常用名称中输入你的名字,然后在请求是选项中勾选“保存到磁盘”。
在证书助手对话框中点击“继续”按钮,然后会弹出保存证书文件对话框
2 配置应用推送通知
首先我们需要创建App ID,我们创建的App ID是<Team ID>.com.51work6. MyPushNot。然后我们在App ID列表中找到它,选择后面的点击Configure超链接进入应用配置页面,勾选“Enable for Apple Push Notification service”开启推送通知支持。
3 生成SSL证书
Push SSL Certificate中有两个可以配置,它们是:Development Push SSL Certificate(为开发配置证书)和Production Push SSL Certificate(为发布产品配置证书)。我们开发阶段配置Development Push SSL Certificate,选择后面的Configure按钮。
选择Continue按钮,在这个对话框中可以选择我们上一节中我们请求的证书签名文件。
然后选择Generate按钮,文件开始上传,上传成功并生成SSL证书,我们可以在这个页面中点击Download按钮下载生成的SSL证书,以便于后面使用。
点击Done按钮关闭对话框回到配置页面。
4 为SSL证书导出p12文件
我们在编程时候需要使用p12格式文件,p12用于存放个人证书和私钥,通常包含保护密码,是二进制格式。
上一节生成的SSL证书文件是aps_development.cer,双击这个文件出现修改钥匙串的提示框,我们需要系统管理员密码。
打开钥匙串访问工具,选择左边钥匙串为“登录”,在下边的钥匙串种类中选择“我的证书”,在右边的找到“Apple Development iOS Push Services:com.51work6.MyPushNot”。
右键会弹出对话框选择导出“Apple Development iOS Push Services:com.51work6.MyPushNot”。
导出过程中需要选择保存文件的位置和密码保护,需要提供密码
输入密码后点击“好”按钮,系统还会让我们输入管理员用户密码,以便于许可这次导出操作。
输入密码选择“总是允许”按钮导出成功,导出文件“证书.p12”,把这个文件保管好以备后面编程时候使用。
2)实现iOS客户端
1、iOS客户端编程
推送通知技术在Mac OS X和iOS系统上都可以运行,我们本章主要介绍iOS客户端编程,推送通知的编程比较简单,编程的关键是获得令牌,这是从APNS返回的,然后还有把提交给内容提供商。下面我们看看开发之前的一些准备工作。
配置Xcode工程
编写iOS推送应用需要在Xcode工程中进行一些配置,这些配置是主要是设置代码签名标识,代码签名标识的前提要有配置概要文件(Provisioning Profiles)。
有了配置概要文件即可以设置代码签名标识了,需要下载概要文件到本地,代码签名标识需要选择这个配置概要文件。选择TAGETS→MyNotes→Code Signing Identity,选择你自己的代码签名标识。
设置完成之后可以开始编码工作了。
代码实现
推送通知的代码实现主要分为两个步骤,第一步注册接收通知,第二步接收注册结果。这些工作都是在应用程序委托对象AppDelegate中实现的。
我们先看看注册部分的代码:
|
注册过程比较长,它通过APNS从苹果公司返回,注册结束后的回调方法代码:
|
2、推送服务端编程
内容提供者接收到设备的令牌并保存起来,在有新的内容需要推送的时候,他们将启动一个服务程序逐个设备推送他们的内容。在推送具体的过程中并非直接 由内容提供者,直接发送给用户设备,而是服务程序与APNS通讯建立信任连接,然后把数据推送给APNS,再由APNS利用安全通道推送给用户设备。
如果要编写内容提供者的推送服务程序,我们需要进行SSL认证编程,以及构建APNS数据包,数据包分为3个主要部分:Command(命令)、deviceToken(令牌)和Payload(载荷)。载荷不能超过256字节,是JSON格式,例如:
|
作为推出服务程序可以使用很多计算机语言实现,如果从便于管理角度看,使用PHP、Java和.NET,甚至是Note.js都是可以选择的。本书重点介绍PHP和Java编写推送服务程序。
使用PHP实现推送服务
PHP是非常不错的服务器端脚本,这么多年来没有被JavaEE和.NET蚕食掉,说明它有过人之处。PHP编程简单很多人原意使用,实现本章推送服务也很简单。下面代码是实现了推送的PHP代码:
|
打开终端窗口执行如下命令:
$ openssl pkcs12 -in 证书.p12 -out apns-dev.pem -nodes
Enter Import Password:
MAC verified OK
回车后需要输入密码,这个密码是导出“证书.p12”时候设置的密码。
PHP代码编写完成可以运行PHP了,有两种方法可以运行,一种是把这个文件放到Apache HTTP服务器目录下,并保证Apache下安装和 PHP,然后用浏览器运行,在浏览器中输入http://localhost/phpPNs/Pusher.php,这个URL是我自己 Apache HTTP服务器上的PHP文件。
另外一种方法,简单的多,我们不需要安装Apache HTTP服务器,只需要安装了PHP解释器就可以了,我们在终端中运行下面的指令:
$ php -f Pusher.php
连接OK
发送消息:{“aps”:{“alert”:”\u65b0\u5e74\u597d. from PHP”,”badge”:11,”sound”:”default”}}
这样就可以推送通知了,如果一切正常推送成功,用户的设备就可以接收到通知了。
使用Java推送服务
上面我们介绍了PHP实现的推送服务程序,使用其它语言编写基本的过程也一样的,这一节我们就介绍Java推送服务程序。由于具体的流程与PHP一 样,这里我们就不再自己编写Java的实现代码,而是使用别人已经封装好的javapns(http://code.google.com/p /javapns/)类库,它封装了socket实现细节问题,开发起来变的比较简单了。
下面代码是实现了推送的Java代码:
|
上面的代码还依赖与下面的类库:bcprov-jdk15-146.jar、JavaPNS_2.2.jar和log4j-1.2.15.jar。 其中bcprov-jdk15-146.jar和JavaPNS_2.2.jar可以在http://code.google.com/p /javapns/下载到。log4j-1.2.15.jar到http://logging.apache.org/log4j/1.2 /download.html下载。
这个Java程序的运行我们就不再介绍了,它是一个Java Application可以在有jre环境运行,我们可以把它做成JavaWeb程序,这样就可以在浏览器中发送通知了。