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

iOS推送原理和证书生成简介的更多相关文章

  1. iOS推送小结(证书的生成、客户端的开发、服务端的开发)

    1.推送过程简介 1.1.App启动过程中,使用UIApplication::registerForRemoteNotificationTypes函数与苹果的APNS服务器通信,发出注册远程推送的申请 ...

  2. IOS 推送原理

    最近两天在研究ios的消息推送机制.研究这个东西,还是充满兴趣的. Push的原理: Push 的工作机制可以简单的概括为下图 图中,Provider是指某个iPhone软件的Push服务器,这篇文章 ...

  3. iOS推送原理

    1.首先app会和apns建立长连接,会发送 udid和 bundle id给apns 2.apns会返回给app一个device token 3.用会把device token 发给自己的服务器 4 ...

  4. (转)苹果消息推送服务器 php 证书生成

    1.准备好 aps_developer_identity.cer , push.p12这两个证书文件 2. 生成证书如下: openssl x509 -in aps_developer_identit ...

  5. iOS远程推送原理及实现过程

    ➠更多技术干货请戳:听云博客 推送通知,是现在的应用必不可少的功能.那么在 iOS 中,我们是如何实现远程推送的呢?iOS 的远程推送原理又是什么呢?在做 iOS 远程推送时,我们会遇到各种各样的问题 ...

  6. IOS - 消息推送原理和实现

    一.消息推送原理: 在实现消息推送之前先提及几个于推送相关概念,如下图1-1: 1.Provider:就是为指定IOS设备应用程序提供Push的服务器,(如果IOS设备的应用程序是客户端的话,那么Pr ...

  7. iOS 消息推送原理及实现Demo

    一.消息推送原理: 在实现消息推送之前先提及几个于推送相关概念,如下图1-1: 1.Provider:就是为指定IOS设备应用程序提供Push的服务器,(如果IOS设备的应用程序是客户端的话,那么Pr ...

  8. IOS 基于APNS消息推送原理与实现(JAVA后台)

    Push的原理: Push 的工作机制可以简单的概括为下图 图中,Provider是指某个iPhone软件的Push服务器,这篇文章我将使用.net作为Provider. APNS 是Apple Pu ...

  9. iOS 消息推送原理

    一.消息推送原理: 在实现消息推送之前先提及几个于推送相关概念,如下图: 1. Provider:就是为指定IOS设备应用程序提供Push的服务器,(如果IOS设备的应用程序是客户端的话,那么Prov ...

随机推荐

  1. SVN脱离锁定的几种方法

    SVN经常出现被锁定而无法提交的问题,选择解锁又提示没有文件被锁定,很是头疼.这里整理了一下SVN 被锁定的几种解决方法: 1.出现这个问题后使用“清理”即"Clean up"功能 ...

  2. python第一天(安装运行python)

    1. 安装Python 3.7 目前,Python有两个版本,一个是2.x版,一个是3.x版,这两个版本是不兼容的.由于3.x版越来越普及,我们的教程将以最新的Python 3.7版本为基础.请确保你 ...

  3. AMR无限增发代币至任意以太坊地址的漏洞利用及修复过程

    AMR无限增发代币至任意以太坊地址的漏洞利用及修复过程 0x00 项目简述 Ammbr主要目标是打造具有高度弹性且易于连接的分布式宽带接入平台,同时降低上网相关成本.Ammbr打算创建具有人工智能和智 ...

  4. Jquery append()总结(一) 转载

    转载自:http://dushanggaolou.iteye.com/blog/1173457 append(content)  /** * 向每个匹配的元素内部追加内容. * 这个操作与对指定的元素 ...

  5. Linux pthread 线程池实现

    基于pthread封装了一个简易的ThreadPool,具有以下特性: 1.具有优先级的任务队列 2.线程池大小可以二次调整,增加线程或者删除空闲线程 3.任务两种重写方式,重写run或者使用函数回调 ...

  6. 功能规格说明书Version2

    此功能规格说明书是Week8 功能规格说明书的第二个版本, 版本1地址:http://www.cnblogs.com/Z-XML/p/3407687.html 此功能规格说明书是面向用户的,所以作者将 ...

  7. lintcode-106-排序列表转换为二分查找树

    106-排序列表转换为二分查找树 给出一个所有元素以升序排序的单链表,将它转换成一棵高度平衡的二分查找树 样例 标签 递归 链表 思路 类似于二分查找,每次将链表二分,中间节点作为根节点,在建立左子树 ...

  8. iOS-tableViewCell创建时添加一些动画

    有时候因为项目的需要,给tableView添加一些动画: cell.layer.transform = CATransform3DMakeScale(); [UIView animateWithDur ...

  9. 3GPP规范命名规则解读

    http://blog.sina.com.cn/s/blog_6b10255301012co6.html 学习了解电信技术知识的一个很好的手段是阅读3GPP的规范.但是3GPP有大量的规范,我们可能经 ...

  10. 时间戳转换成日期的js

    在项目开发过程中,我们常常需要把时间戳转换成日期.下面这个是我一直使用的js方法,希望能帮助到有需要的朋友.大家如果有更好的方法,请多多指教! js代码如下: //时间戳转换成日期 function ...