http://www.xiaoyaoli.com/?p=1033
iOS远程通知,就像新闻客户端定点推送新闻,聊天客户端推送信息,都由服务器端发送信息推送给APNS,再由APNS发给手机,手机再发给客户端,原理这里简单说下,因为教程一大堆
1.App向APNS注册,返回一个token
2.App给自己的服务器端发送token,记录自己的设备
3.自己的服务器想发通知了,根据token发送通知给APNS
4.APNS根据从服务器得到的token和通知,PUSH给指定token的设备
5.设备收到信息,转给App
下面说下从申请到实现的流程
1.申请证书请求
这个不多说了,相信各位同学做过无数次这个操作:
钥匙串访问 > 证书助理 > 从证书颁发机构中请求一个证书
输入邮件和名字
存到硬盘
2.申请App ID,创建p12
用于远程push的应用得有自己的App ID,在开发者页面里App ID页面申请,名称可以随意,注意勾选下面的Push Notification,而且注意下面申请的时候BUNDILE ID要和应用相同,比如com.lpx.collection
接下来一步步创建完,再点进去创建的app id,可以看到notification是黄色的,还不可用,点进去设置
看最底下有两个选项,一个是用来开发测试用的,一个是产品级别发布用的,因为是测试,这里就选第一个
然后点继续,到这部选择之前创建的证书
然后可以看到创建成功,点击完成重新看这里已经多了一个证书了,点击下载,并双击安装到keychain
这样,在keychain里可以看到如“Apple Development IOS Push Services: xxx”的证书,右键导出p12文件,设定个自己知道的密码,保存起来,服务器端要用
2.Provision文件
这一步是为了真机可以运行,因为远程通知模拟器是用不了的,这个就不多说了
3.已经做的事
现在总结一下,手头有三个文件,一个是最开始证书颁发机构申请证书的文件,一个是下载了的aps.develope.cer,一个是导出的p12文件
接下来终于可以写代码了
4.客户端代码
然后是重要的代理方法
这样就足够了,接下来是服务器端
4.服务器端
一般来说,有不少框架可以让服务器端使用,这时候一般都需要p12文件还有token就够了
我这里用了一个mac项目,可以模拟push消息,很好用,名字也很撩人,叫push me baby
https://github.com/stefanhafeneger/PushMeBaby
需要做的是把aps.develope.cer拷贝到resource里,然后修改一下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
-
(
id
)
init
{
self
=
[
super
init
]
;
if
(
self
!=
nil
)
{
self
.
deviceToken
=
@
"xxxxxxxxxx"
;
//token
self
.
payload
=
@
"{\"aps\":{\"alert\":\"Attention!\",\"badge\":1,\"url\":\"urlurlurl\"}}"
;
self
.
certificate
=
[
[
NSBundle
mainBundle
]
pathForResource
:
@
"aps_development"
ofType
:
@
"cer"
]
;
}
return
self
;
}
|
好了,这时候发送app就应该可以收到了!