1. 推送流程:

Provider: 我们自己的后台服务器;

APNS: 苹果的消息推送服务器

(1) 当Provider有消息要推送给手机的时候,先将消息和deviceToken等字段发送到APNS

(2) APNS在已注册的设备列表中查找设备,并推送消息到设备;

(3) iOS将消息传递给应用程序,或者显示通知等;

2. 注册-推送完整流程:

(1) App注册消息推送;

(2) iOS向APNS请求DeviceToken,App获取DeviceToken;

(3) App将DeviceToken发送至服务器;

(4) 若有消息通知,则服务器将消息连同DeviceToken发送至APNS;

(5) APNS查找设备,并且将消息推送至设备;

3. 推送证书生成流程(开发版本):

//(我这里证书全部新生成,若有可忽略,注意将以下步骤生成文件保存到同一个目录,方便确认和使用);

--mac

(1) 中使用钥匙串-->钥匙串访问-->证书助理-->从证书颁发机构申请证书,填写邮箱,选择保存到磁盘,将生产CSR文件;

--developer

(2) 在Identifiers中创建APPID,注意选择Explicit App ID,Bundle ID中不能包含通配符,必须是确定的ID;选择Push Notifications;

(3) 在Certificates中创建开发证书,选择iOS App Development,选择AppID,导入前面生成的CSR文件,生成后Download下载证书;

(4) 在Certificates中创建推送证书,选择App Push Notification service SSL (Sandbox),同样选择AppId,导入前面生成的CSR文件,生成后Download下载证书;

(5) Provising Profiles中创建配置文件,选择iOS App Development,选择前面的AppID,选择前面的开发证书,选择包含的设备,输入名称,生成后Download下载;

--mac

(6) 双击(3)(4)步骤中生成的证书,双击Provising Profile文件,在xCode中配置Code Signing,选择对应的developer和profile文件;

(7) 在钥匙串中找到(4)中证书Apple Devlopment IOS Push Services:xxxx,点击箭头展开,点击专有密钥,右键导出,输入密码如:hello123,保存,如testPush.p12;

(8) 确认下文件,此时目录文件包含,CertificateSigningRequest.certSigningRequest,ios_development.cer,aps_development.cer,testPush.p12;

(9) 将testPush.p12和aps_development.cer分别生成pem文件,注意生成testPush.p12对应的pem时候,需要输入密码,为了避免混淆,使用hello123;

openssl x509 -in aps_development.cer -inform der -out PushChatCert.pem
openssl pkcs12 -nocerts -out PushChatKey.pem -in testPush.p12

Enter Import Password:
MAC verified OK
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:

(10) 将两个pem文件合并保存到一个pem文件中;

cat PushChatCert.pem PushChatKey.pem > ck.pem

(11) 测试是否能够telnet到苹果服务器;

telnet gateway.sandbox.push.apple.com 2195
Trying 17.110.226.164...
Connected to gateway.sandbox.push-apple.com.akadns.net.
Escape character is '^]'.
^]

(12) 测试用生成的证书建立ssl安全连接到服务器,返回很多信息,表示成功了;

openssl s_client -connect gateway.sandbox.push.apple.com: -cert PushChatCert.pem -key PushChatKey.pem
Enter pass phrase for PushChatKey.pem:
CONNECTED()
depth= /C=US/O=Entrust, Inc./OU=www.entrust.net/rpa is incorporated by reference/OU=(c) Entrust, Inc./CN=Entrust Certification Authority - L1C
verify error:num=:unable to get local issuer certificate
verify return:
---
Certificate chain
s:/C=US/ST=California/L=Cupertino/O=Apple Inc./CN=gateway.sandbox.push.apple.com
i:/C=US/O=Entrust, Inc./OU=www.entrust.net/rpa is incorporated by reference/OU=(c) Entrust, Inc./CN=Entrust
...
...
...
...
Key-Arg : None
Start Time:
Timeout : (sec)
Verify return code: (ok)
---

(13) 在项目的AppDelegate.m中加入推送相关代码;

(14) 将ck.pem放到服务器,服务器创建消息推送服务,测试是否成功;

感谢:

https://developer.apple.com

http://blog.csdn.net/shenjie12345678/article/details/41120637

http://www.cocoachina.com/industry/20130321/5862.html

最新文章

  1. python网络编程-TCP协议中的三次握手和四次挥手(图解)
  2. Failed creating java D:/jre6/bin/client/jvm.dll
  3. 基于H5的移动端开发,window.location.href在IOS系统无法触发问题
  4. 内存管理 - MEMORY POOL
  5. yum -y upgrade 和 yum -y update 区别
  6. OKHttp的简单使用
  7. 日志管理-将Log4net的配置配置到的独立文件中
  8. java中文乱码解决之道(四)—–java编码转换过程
  9. C#检查foreach为null判断
  10. 【js编程艺术】小制作五
  11. Linux 下磁盘挂载
  12. 机器学习linux系统环境安装
  13. [wiki]陶德曼调停
  14. docker 获取容器id
  15. 2015年传智播客JavaEE 第168期就业班视频教程 02-ERP简介
  16. 【HDU4689】Derangement(动态规划)
  17. pyhton新手学习之增删改查
  18. [GO]将随机生成的四位数字拆分后放到一个切片里
  19. Pandas库入门
  20. 牛客多校3 A-PACM Team(状压降维+路径背包)

热门文章

  1. hibernate 批量插入
  2. 学习bash——数据流重定向
  3. JavaSE复习(七)Stream流和方法引用
  4. DPDK vhost库
  5. linux之shell脚本学习篇一
  6. Graphic的一些基本概念
  7. Hibernate映射关系之_多对多
  8. Luogu3960 NOIP2017列队(splay/线段树)
  9. [CF15C]Industrial Nim
  10. 移动端去掉a标签点击时出现的背景