iOS-----推送机制(下)
推 送 机 制(下)
|
|
将证书签名请求文件保存到磁盘上,此处将该文件保存为“Push。cerSigningRequest”。
在上图所示页面中,可以看到在“iOS Apps”栏目下包含了Certificates、Identifiers、Device、ProvisioningProfiles-----这些只有登录账号已经加入iOS Developer Program(iDP)的原因。 |
上图列出了该开发者账号当前拥有的所有App ID。 |
App ID的描述字符串可以随便填,但该App ID的唯一标识必须要记住,通常采用“公司域名+应用名”的格式 |
|
|
|
|
通过证书列表页面也可以下载指定的证书(只要点击指定的证书,页面就会显示“Revoke”、“Download”两个按钮,其中“Revoke”按钮用于删除证书,“Download”按钮用于下载证书)。 经过上面步骤,我们已经成功为Push客户端创建了一个支持Push通知的App ID,并下载、安装了该App ID的开发证书 |
|
现在开始开发Push‘客户端应用。新建一个Single View Application, 该应用的”Bundle Identifier”必须与前面注册的App ID完全相同.如下图所示是新建应用对话框. 该对话框的填写非常关键,各位务必保证该用用的“Bundle Identifier”与前面注册的App ID完全相同。 |
|
接下来通过修改应用程序委托类来注册远程Push通知,并重写对应的方法来处理远程Push通知. |
|
通过上面介绍不难看出,iOS应用处理远程通知比较简单。 |
|
|
该示例的应用程序委托类实现部分代码 |
AppDelegate.m - (BOOL)application: (UIApplication*) application |
|
上面程序的第1行代码注册了远程Push通知,接下来程序实现了UIApplicationDelegate协议中与远程推送通知相关的3个方法-----注册Push通知成功、失败时激发的方法,以及收到远程Push通知时激发的方法 |
|
远程推送通知的应用必须在真机上测试,而且客户端应用还需要Provisioning Profile,这个东西也必须通过Apple网站创建、下载。为远程推送通知应用创建、下载Provisioning Profile请按如下步骤进行。
其中第1个Provisioning Profile是测试其他普通程序的Provisioning Profile,由于其他程序所谓App ID可支持通配符, 因此只要一个Provisioning Profile即可。但远程推送通知应用的App ID不能使用通配符,因此此处必须重新创建一个Provisioning Profile。
编译运行该应用(在真机上运行该应用),将可以看到如下图所示的提示框。 用户单击“好”按钮,将可以在Xcode的底部看到如下图所示的输出 此处iOS应用成功注册了远程推送通知,APNs返回了该设备的device token.在实际应用中, iOS应用应该通过网络将该device token发送给Push服务端程序, 此处我们为了简化编程就不增加网络传输的代理代码了,而是直接将该device token复制到Push服务端程序. |
开发Push服务端程序
Push服务端程序需要包含SSL连接证书和私钥。因此在开发Push服务端程序之前,需要先将它们准备好。
|
导入远程推送通知应用的私钥 |
此处之所以列有名为“Push”的公用密钥和专用密钥,是因为前面开发iOS客户端应用时使用证书助理创建了名字为Push的Certificate Signing Request文件,如果之前没有创建该Certificate Signing Request文件,或创建Certificate Signing Request时指定的名称不同,那么此处将不会显示名为“Push”的公用密钥和专用密钥。
|
|
此时我们已经得到了Push服务端程序所需要的私钥和SSL连接证书(前面开发推送通知客户端时已经从Apple网站下载过开发证书,当时保存的开发证书名为aps_development.ver)。 |
|
接下来还需要将两个文件合并为一个文件,请按如下步骤进行:
上面命令的作用是将aps_development.cer证书文件转换为PEM格式的证书文件,该命令将会生成一个PushCert.pem文件.
上面命令的作用是将Push.p12私钥文件转换为PEM格式的私钥文件,该命令将会生成一个PushKey.pem文件。 运行上面命令一共会提示输入3次密码:第1次输入Push.p12私钥文件的密码(也就是我们在“为Push输入密码”图片中输入的密码),只有输入该密码才可让openssl命令读取该Push.p12私钥文件的内容;第2次输入的密码将会作为PushKey.pem文件的密码;第3次输入的密码用于确认第2次输入的密码-----此处依然输入”user”.
上面命令的作用是将PushCert.pem、PushKey.pem 合并为一个aps_developer_identity.p12 运行上面命令一共会提示输入3次密码:第1次输入PushKey.pem文件的密码(也就是我们在第2 步中为PushKey.pem文件输入的密码),只有输入该密码才可让openssl命令读取该PushKey.pem文件的内容;第2次输入的密码将会作为aps_developer_identity.p12文件的密码;第3次输入的密码用于确认第 2次输入的密码-----此处依然输入“user”。 整个运行过程如下图所示 |
|
Java领域有一个JavaPNS开源项目用于开发Apple Push Notification Service Provider,借助于该项目即可非常方便地开发远程推送通知的服务端程序。下载和安装JavaPNS的步骤如下:
JavaPNS_2.2.jar: 该选项只是下载JavaPNS项目的核心JAR包. JavaPNS_2.2_javadoc.zip: 该选项只是下载JavaPNS项目的API文档 JavaPNS_2.2_complete.zip: 该选项下载JavaPNS的完整压缩包,包括JavaPNS的核心JAR包、API文档和示例。
doc:该文件夹下包含JavaPNS项目的各种文档。 lib:该文件下包含bcprov-jdk15-146.jar、log4j-1.2.15.jar两个JAR包。这两个JAR包是 JavaPNS所依赖的JAR包。 src:该文件夹下包含JavaPNS项目的源代码。 JavaPNS_2.2.jar:这是JavaPNS项目的核心JAR包。
|
如下编写简单的Java源文件,即可实现远程推送通知的服务端程序
PushSever.java
import javapns.Push;
import javapns.notification.PushNotificationPayload;
public class PushServer
{
|
|
上面程序中的第1行红色字代码就是指定iOS设备的device token----在实际应用中, 该device token应该由iOS客户端通过网络发送给服务端程序,此处为了简单起见,我们直接将iOS设备的device token复制、粘贴到此处。 上面程序中的第2段红色字代码使用了Push类的payload()类方法来发送远程推送通知,发送推送通知指定了包含证书和私钥的文件、aps_developer_identity.p12文件的导出密码。 将JavaPNS解压路径中包含的JavaPNS_2.2.jar、bcprov-jdk15-146.jar、log4j-1.2.15.jar复制到该Java源文件的同一路径下,然后使用如下命令来编译该Java源文件: java –encoding utf-8 –cp JavaPNS_2.2.jar PushServer.java // ① 上面命令用于编译PushServer.java文件,该命令使用了-cp选项将JavaPNS_2.2.jar临时添加到类加载路径中. 使用如下命令运行PushServer: java –cp .: JavaPNS_2.2.jar:bcprov-jdk15-146.jar:log4j-1.2.15.jar PushServer // ② 上面命令用于运行PushServer,并使用了-cp选项将JavaPNS_2.2.jar、bcprov-jdk15-146.jar和log4j-1.2.15.jar临时添加到类加载路径中 /* 注意: 若在UNIX、Linux、OS X系统上执行上面的java命令,-cp选项值中的各JAR包的分隔符为英文冒号;如果在Windows系统中执行上面的java命令,则应将-cp选项值中的各JAR包的分隔符改为英文分号。而且,不要忘记了-cp选项值开始的一点(.),这个点(.)代表了当前路径,用于告诉系统在当前路径下搜索PushServer类文件。 */ |
iOS-----推送机制(下)的更多相关文章
- CC03 iOS推送机制浅析
• ios推送机制 可以通俗的把APNS理解为iOS系统为每个app提供的长连接通道 苹果限制了每个app在后台存活的时间,最重要的目的是为了省电,其次优化内存这些.如果彻彻底底的将app杀死了,服务 ...
- 一步一步教你做ios推送
最近在研究ios的推送问题,遇到了一些问题,最终整理了一下.放在这里和大家分享 APNS的推送机制 首先我们看一下苹果官方给出的对ios推送机制的解释.如下图 Provider就是我们自己程序的后台服 ...
- APNS的推送机制 3
APNS的推送机制 首先我们看一下苹果官方给出的对iOS推送机制的解释.如下图 Provider就是我们自己程序的后台服务器,APNS是Apple Push Notification Service的 ...
- (转)iOS消息推送机制的实现
原:http://www.cnblogs.com/qq78292959/archive/2012/07/16/2593651.html iOS消息推送机制的实现 iOS消息推送的工作机制可以简单的用下 ...
- iOS的推送机制APNs:本地推送&远程推送
本地推送: 本地推送主要应用在备忘录,闹钟等本地的,基于时间定时的消息提醒.本篇不做详细描述. 远程推送:APNS(苹果推送通知服务) iOS远程推送机制的原理及流程: 注册推送(橙色部分):若该Ap ...
- ios消息推送机制原理与实现
本文转载至 http://hi.baidu.com/yang_qi168/item/480304c542fd246489ad9e91 Push的原理: Push 的工作机制可以简单的概括为下图 图中, ...
- mac下使用java测试iOS推送
首先mac下有很多现在的测试iOS推送软件,为什么要用java程序测试呢: 因为大多数后台推送服务可能是JAVA开发的,那么为了验证我们在MAC上导出的推送证书文件是否正确: 制作开发证书的iOS开发 ...
- IOS 推送消息 php做推送服务端
IOS推送消息是许多IOS应用都具备的功能,最近也在研究这个功能,参考了很多资料终于搞定了,下面就把步骤拿出来分享下: iOS消息推送的工作机制可以简单的用下图来概括: Provider是指某个iPh ...
- iOS 推送全解析
本文旨在对 iOS 推送(以下简称 推送)进行一个完整的剖析,如果你之前对推送一无所知,那么在你认真地阅读了全文后必将变成一个推送老手,你将会对其中的各种细节和原理有充分的理解.以下是 pikacod ...
- iOS 推送全解析,你不可不知的所有 Tips!
本文旨在对 iOS 推送进行一个完整的剖析,如果你之前对推送一无所知,那么在你认真地阅读了全文后必将变成一个推送老手,你将会对其中的各种细节和原理有充分的理解.以下是 pikacode 使用 iOS ...
随机推荐
- jekins,报错 stderr: Could not create directory '/usr/share/tomcat7/.ssh'. Failed to add the host to the list of
public key是在~/.ssh/id_rsa.pub,而private key是~/.ssh/id_rsa 设置的时候,Jenkins需要的是private key
- Jenkins 对项目持续集成的配置之二 API接口自动化 Ant+Jmeter
先介绍一下Ant+Jmeter 略 我的另一篇文章有讲在linux上部署ant + jmeter以满足CI持续化集成 https://www.cnblogs.com/qianjinyan/p/9067 ...
- HTML5-form表单
什么是表单? 01.获取用户的输入 ==>收集数据 02.将用户的输入发送到服务器 ==>与服务器进行交互 相关属性: action:我们收集完用户的信息之后,需要提交的服务器地址 ...
- django字段查询参数及聚合函数
字段查询是指如何指定SQL WHERE子句的内容.它们用作QuerySet的filter(), exclude()和get()方法的关键字参数. 默认查找类型为exact. 下表列出了所有的字段查询参 ...
- Qt_OpenGL_教程
1. 中文版: Qt OpenGL教程 http://blog.csdn.net/myths_0/article/details/24431597 http://qiliang.net/old/neh ...
- [STL][C++]VECTOR
参考:http://blog.csdn.net/hancunai0017/article/details/7032383 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个 ...
- AES SBox的构造(python)
几点需要注意的,求解逆元的时候使用的是拓展欧几里得,但是那些运算规则需要变一变,模2的加减乘除(或者可以理解为多项式的运算) 在进行字节的仿射变换不用进行矩阵的运算. 一个矩阵和一个列向量进行运算的时 ...
- 《剑指offer》第十三题(机器人的运动范围)
// 面试题:机器人的运动范围 // 题目:地上有一个m行n列的方格.一个机器人从坐标(0, 0)的格子开始移动,它 // 每一次可以向左.右.上.下移动一格,但不能进入行坐标和列坐标的数位之和 // ...
- Unity 中 ContextMenu 的用法
在自定义脚本中的方法前加入 [ContextMenu("Execute")] 标签,然后将脚本挂载到对象上,可以再编辑模式下执行标记的方法: 自定义脚本如下: using Sy ...
- centos7: iptables保存(配置完nginx的web规则后)
centos7: iptables保存(配置完nginx的web规则后) 以本地虚拟机为例: 添加规则:入站规则 iptables -I INPUT -p tcp --dport 80 -j ACCE ...








