PushNotification教程–客户端到服务器(PHP)一条龙服务

一、APNS的简介:

APNS( Apple Push Notification Server): 苹果的远程推送服务,开发者可以方便的将消息以特定的格式推送给iOS设备,但是这种消息机制是不保证一定会发送打用户设备的。用户的设备接受的消息类型支持:声音,文本(支持国际化)和Badge。

APNS的序列图如下:

APNS时序图

 

详细的流程可以参考 苹果官方的APNS文档

1:表示从客户端接受到deviceToken并且存储到服务器上的一个流程

2-3:表示由服务器端发送消息到客户端的一个流程,客户端接收到通知后将会以声音、文本或者 badge的形式展示给用户

二、APNS的消息格式

发送到APNS的消息是由服务器端封装的,所以要对消息的格式有所了解。APNS消息是由deviceToken+Payload组成。payload的内容是我们真正要发送的内容,所以我们对它的格式要了解。Payload是以JSON串的格式封装到消息体内。

Payload的JSON串的格式:{"aps":{"alert":"hello apns", "sound":"default", "badge":1}}

键描述 值描述
alert 可以使字符串也可以嵌套另外一个JSON(格式介绍见下个表中)
sound 内置在应用Bundle中的声音文件的名字
badge 显示在应用ICON上的数字

alert的JSON串格式:

键描述 值描述
action-local-key 如果该key被赋值,则显示一个有两个按钮的提示框。iOS用该值作为国际化的key去应用中查找并且显示。如果该key值为null,则显示一个只有OK按钮的提示框
local-key 同样是支持国际化的key,从Localized.string文件中查找。该键值支持带参数的字符串并且从local-args中获取参数值
local-args 作为local-key的参数列表
launch-image 在应用程序的bundle中内置的图片的名字,作为点击通知进入程序的启动画面

另外,payload还允许用户自定义一些key和value,在和aps同级的JSON串中,例如:

{"aps":{aps-body},"custom1":"value1"}
但是最终有一条限制: 发送到APNS的Payload的字节数不能超过256个字节,否则苹果将不会接受

三、配置应用支持APNS

使应用支持APNS,需要用配置了APNS支持的Provisioning Profile对应用进行签名,并且服务器端和APNS服务器建立SSL连接还需要一个SSL的证书。这个Provisioning Profile和SSL只是针对一个app id有效,这样做是为了起到一个安全保护的作用,只有你的服务器才可以给这个应用发送推送通知。

因为苹果针对开发和发布版本需要不同的provisioning profile,所以也有两种不同的推送证书:

  • 开发:如果你的应用在DEBUG的模式下运行,并且用iPhone Developer的provisioning profile进行签名,那么你的服务器只能用开发的证书来发通知
  • 发布:如果你的应用是用ADHoc或者AppStore的发布provisioning profile进行签名的话,那么要确保服务器用的是发布的证书

个人感觉生成证书是建立一个完整的支持APNS应用的难点,很多人就是在这个步骤上出现了问题,导致整个服务搭建失败。所以在生成证书的时候要特别注意每一个步骤,下面我们来介绍一下如何配置APNS和生成证书。

1、生成Certificate Signing Request(CSR):打开KeyChain,在菜单下选择Request a Certificate from a Certificate Authority….

Request a Certificate from a Certificate Authority

接下来你会看到下面的窗口

输入email地址和名字,选择保存到硬盘,点击继续保存为apns.certSigningRequest

2、在iOS开发者管理界面配置应用id和支持APNS的SSL证书

(1)第一步我们要先新建一个App ID, 每个支持APNS的应用都需要一个唯一的ID,因为推送通知是推送到一个唯一特定的应用,所以不能用带有通配符的ID的。在iOS Provisioning Portal下,点击左边栏的App IDs,选择New App ID,出现下面窗口:

 

填写Description和Bundle Identifier,提交

Screen Shot 2012-09-07

提交后出生成如下的应用信息:

(2)点击Configure会出现如下应用的详细配置信息:

(3)选中Enable for Apple Push Notification service,下面有两个配置项分别是开发和产品发布的APNS的配置,点击开发配置:

(4)因为第一步我们已经生成了Certificate Signing Request,这里我们直接点击Continue,在下一步选择我们之前生成的CSR文件,并且点击生成,这样Apple就会给我们生成一个供开发用的测试APNS证书

(5)点击下载将证书下载到本地名字为aps_development.cer我们将它命名为apnsTest.cer(和应用的名字写成一个,因为每次配置好这个步骤生成的证书都是叫aps_development.cer,改名字后好区分,方便后面生成ssl连接需要的pem文件)。

在这一步选择Done会返回刚才的应用配置详细界面,这时Development Push SSL Certificate的Status状态为Enabled。

3、安装证书后并且将private key导出成p12文件,用来制作pem文件

双击(2-5)步骤中生成的apnsTest.cer安装证书,证书会安装到keychain的Login选项下。打开KeyChain工具,选中左边栏的login选项同时选中My Certificates会看到一个证书列表。展开刚刚安装的apnsTest应用的证书,会看到private key。选中private key右键Export “apnsTest”,如下:

点击Export会提示你输入p12的密码,输入密码后导出文件为apnsTest.p12。

4、生成建立SSL连接所需要的PEM文件

截止到现在我们已经保存了三个文件: apnsTest.p12 , apnsTest.cer, apnsTest.certificateSigningRequest

现在我们来介绍的是针对PHP作为服务器建立SSL链接所需要的PEM证书的方法,自己亲测没问题。

打开终端Terminal–>定位到上面三个文件所在的文件夹中我的是在桌面上

cd ~/Desktop/

(1)将.cer文件转换成一个.pem文件
openssl x509 -in apnsTest.cer -inform der -out apnsTest_dev_cert.pem

(2)将.p12文件转换成一个.pem文件

openssl pkcs12 -nocerts -out apnsTest_dev_key.pem -in apnsTest.p12
Enter Import Password:
MAC verified OK
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:

第一步会提示你先输入你导出p12时的密码,接着会要求输入你为该pem设置的密码,要牢记该密码(在和APNS建立ssl连接的时候是需要用到的)
(3)将上面两步骤生成的.pem文件合并成一个文件
cat apnsTest_dev_cert.pem apnsTest_dev_key.pem > apnsTest.pem
好到现在为止,这个.pem文件就是我们服务器最终需要的证书文件。下面我们可以测试下我们生成的证书是否正确:

openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert apnsTest_dev_cert.pem -key apnsTest_dev_key.pem
Enter pass phrase for apnsTest_dev_key.pem:

输入密码后你会看到有一大堆的输出,如果你没有看到错误提示信息,恭喜你证书没有问题了!

5、生成Provisioning Profile文件(用于应用打包的时候签名用的)
要想使得应用可以开启并且接受到推送通知,必须用给应用生成一个唯一的id,并且用该id生成一个Provisioning Profile文件。只有用该文件进行签名打包生成的应用才能开启APNS。
(1)进入ios开发者中心:iOS Provisioning Portal –> 选择左边的Provisioning Profiles。我们先建一个开发环境的签名文件。
(2)选中Development标签,点击New Profile,如下界面

随便填写一个ProfileName,选中你自己的开发证书和刚刚新建的App ID(apnsTest)、还有你要进行调试的设备,点击提交。
(3)下载刚刚生成的Provisioning Profile文件,拖到xcode图标上。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值