apns java 证书_APNS推送服务证书制作 图文详解教程(新)

iOS消息推送的工作机制可以简单的用下图来概括:

d14698534e625d2b901157d895f73d3c.png

Provider是指某个iPhone软件的Push服务器,APNS是Apple Push Notification Service的缩写,是苹果的服务器。

上图可以分为三个阶段:

第一阶段:应用程序把要发送的消息、目的iPhone的标识打包,发给APNS。

第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发送到iPhone。

第三阶段:iPhone把发来的消息传递给相应的应用程序,并且按照设定弹出Push通知。

6959bdb0596e04447bb0529581091621.png

从上图我们可以看到:

1、应用程序注册消息推送。

2、iOS从APNS Server获取device token,应用程序接收device token。

3、应用程序将device token发送给PUSH服务端程序。

4、服务端程序向APNS服务发送消息。

5、APNS服务将消息发送给iPhone应用程序。

无论是iPhone客户端和APNS,还是Provider和APNS,都需要通过证书进行连接。

下面我介绍一下几种用到的证书。

一、CSR文件

1、生成Certificate Signing Request(CSR)

0418aee77e73b0087cb296b7068d5130.png

2、填写你的邮箱和常用名称,并选择保存到硬盘。

da21052100310936ca0ee604c0a44aec.png

点击继续:

52049801c4a8dd5308889e61d617dd7b.png

这样就在本地生成了一个Push.certSigningRequest文件。

二、p12文件

1、导出密钥。

735842eae6dec57f7f1c4d1ad4f0dd57.png

92218aadc3e7f6746648b5aaa2dfd690.png

2、输入你的密码。

d57428e86104a05bed7ccc072b435dc8.png

这样就生成了一个Push.p12文件。

三、SSL certificate文件

1、用你付过费的帐号登录到iOS Provisioning Portal,并新建一个Explicit App ID,这个过程可以参考:我的另一篇博客

,这样就会生成下面这条记录:

dc378e2f7187501970e09cfadffe8af6.png

2、点击Edit:

ccd58839c5c4987afbdd2d4a8b89ef55.png

3、勾选Push Notification -> Development SSL Certificate ->Creat Certifica...

ddf6466603d07c55c1865efc5c101742.png

4、点击Continue

,

cee048705004eae8d47ab5130a9755a2.png

5、选择前面生成好的Push.certSigningRequest文件,点击Generate,出现如下所示的页面:

277707d32e7f66cbcb711d6c00380cc8.png

6、点击Download,并将文件命名为aps_development.cer。

7、点击左侧App IDs, 找到刚才新建的App ID, (testAppId) 你会发现状态变成了Enabled:

6e4bc579acc494e9beb3b8c7bf903fc0.png

注意:有的App ID的Apple Push Notification service列是灰色的,并且不允许使用Configure按钮,这是因为APNS不支持带通配符的App ID。

到现在为止,我们已经生成了三个文件:

1、Push.certSigningRequest

2、Push.p12

3、aps_development.cer

在项目的AppDelegate中的didFinishLaunchingWithOptions方法中加入下面的代码:

- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

//注册APNS

[[UIApplicationsharedApplication]registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeBadge)];

return YES;

}

通过registerForRemoteNotificationTypes方法,告诉应用程序,能接受push来的通知。

在项目的AppDelegate中添加下面的方法来获取deviceToken:

//APNS

- (void)application:(UIApplication *)appdidRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {

NSString *token = [NSStringstringWithFormat:@"%@",deviceToken];

NSLog(@"My token is:%@", token);

}

- (void)application:(UIApplication *)appdidFailToRegisterForRemoteNotificationsWithError:(NSError *)error {

NSString *error_str = [NSStringstringWithFormat: @"%@",error];

NSLog(@"Failed to get token, error:%@", error_str);

}

- (void)application:(UIApplication *)applicationdidReceiveRemoteNotification:(NSDictionary *)userInfo

{

}

运行程序可以获取到device Token, 如图,

954a159c66260b589ba4deb835a1125f.png

获取到的deviceToken,我们可以提交给后台应用程序,

后台程序实现有多种方式

一. PushMeBaby

1,将下载的aps_development.cer文件拷贝到PushMeBaby工程文件所在目录,

2.打开工程,在工程文件上右击 add file to "PushMeBaby",

76eac27ca40089843610aaafaba95487.png

3.run PushMeBaby  ,询问是否允许访问钥匙串,点允许,

703d4a8d4b16b21792704117abbe3509.png

4,运行界面及日志如图所示表示连接成功,

8e02f195ff4b5a9563eb4801fc5f9a2d.png

5, 将前面获取到的 device Token 粘贴到输入框中,点击push,日志如下,0表示成功,111表示发送的数据的长度,

a87754d842d066464332b5d8dfad470d.png

二. java, php

发送通知的后台应用程序如果用php, java 实现,除了需要知道deviceToken之外,还需要一个与APNS连接的证书。

这个证书可以通过我们前面生成的两个文件中得到。

1、将aps_development.cer转换成aps_development.pem格式

openssl x509 -in aps_development.cer -inform DER -out aps_development.pem -outform PEM

2、将p12格式的私钥转换成pem

openssl pkcs12 -nocerts -out Push_Noenc.pem -in Push.p12

3、创建p12文件

openssl pkcs12 -export -in aps_development.pem -inkey Push_Noenc.pem -certfile Push.certSigningRequest -name "aps_development" -out aps_development.p12

这样我们就得到了在.net或java等后台应用程序中使用的证书文件:aps_development.p12

如果后台应用是php的话,那么用以下方法来生成php后台应用程序中使用的证书文件:ck.pem

6. Copy the file apns-dev-cert.p12 to your server in the folder where you will put the rest of your PHP code.

7. Now run the following code on the server

openssl pkcs12 -clcerts -nokeys -out apns-dev-cert.pem -in apns-dev-cert.p12

openssl pkcs12 -nocerts -out apns-dev-key.pem -in apns-dev-key.p12

We are running everything from a server running Ubuntu-9.04. Here we had to remove the passphrase, which can be done as follows

openssl rsa -in apns-dev-key.pem -out apns-dev-key-noenc.pem

Finally, combine the two to get your apns-dev.pem file

cat apns-dev-cert.pem apns-dev-key-noenc.pem > apns-dev.pem

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/398118.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android近场通信---NFC基础(二)(转)

转自 http://blog.csdn.net/think_soft/article/details/8171256 应用程序如何调度NFC标签 当标签调度系统完成对NFC标签和它的标识信息封装的Intent对象的创建时,它会把该Intent对象发送给感兴趣的应用程序。如果有多个应用程序能够处理该Intent对象,就…

:base(参数)

:base(必须有值):作用是将父类的值继承过来,如果不在构造函数中加入:base(变量) 的话,原父类中的 Model则无法继承过来。 例如:在父类MSG_Model,有连个属性,如图 1.子类构造函数不写:base(参数) 2.1.子类构…

MVC5 + EF6 完整入门教程三

MVC5 EF6 完整入门教程三 原文:MVC5 EF6 完整入门教程三期待已久的EF终于来了。 学完本篇文章,你将会掌握基于EF数据模型的完整开发流程。 本次将会完成EF数据模型的搭建和使用。 基于这个模型,将之前的示例添加数据库查询验证功能。 文章提纲 概…

Expect 教程中文版

http://blog.csdn.net/chinalinuxzend/article/details/1842588原贴:http://blog.chinaunix.net/u/13329/showart.php?id110100 Expect 教程中文版[From] http://www.linuxeden.com/edu/doctext.php?docid799  本教程由*葫芦娃*翻译,并做…

IntelliTrace 调试、定位异常

最近看了一个开源数据库管理,然后没有认真看它的配置环境,想看看是什么东西, 然后发现有类型转换的错误,但是一下子也定位不到哪里出错? 所以对于这种一下子找不到异常在哪里的,可以使用intellitrace智能跟…

zedboard--zynq使用自带外设IP让ARM PS访问FPGA(八) 转载

文章来源 http://blog.chinaaet.com/detail/34609 熟悉了xps的操作,IP添加,总线连接设置,图形化方法检查(open graphical design view),检查总线及端口连接。 在file下面的图标中,打开导出到SDK…

[php入门] 4、HTML基础入门一篇概览

[php入门] 1、从安装开发环境环境到(庄B)做个炫酷的登陆应用 [php入门] 2、基础核心语法大纲 [php入门] 3、WAMP中的集成MySQL相关基础操作 1、HTML的作用   HTML是超文本标记语言,主要用于制作页面结构;而经常与之一起用的CSS是…

Python3 爬虫爬取中国图书网(淘书团) 记录

本人为一名刚开始学Python爬虫的小白,开贴仅为记录下自己的学习历程,方便做review 要爬取链接:http://tuan.bookschina.com/ 要爬取内容: 图书名称, 图书价格, 以及对应预览图的link 本文用到py packages: …

java连接字符串_Java如何连接字符串

Java中的连接是将两个字符串连接在一起的操作。您可以使用加()运算符或String的concat ()方法来连接字符串。使用运算符使用运算符是在Java中连接两个字符串的最常用方法。您可以提供变量,数字或字符串文字(始终用双引号括起来)。例如,要组合字符串“I’…

分布式之延时任务方案解析

每天学习一点点 编程PDF电子书、视频教程免费下载:http://www.shitanlife.com/code引言 在开发中,往往会遇到一些关于延时任务的需求。例如 生成订单30分钟未支付,则自动取消生成订单60秒后,给用户发短信对上述的任务,我们给一个专…

mysql 搭建日志服务器_一、架构01-搭建日志服务器Rsyslog

搭建日志服务器1、环境配置环境:node01 192.168.32.132 rsyslog服务器node02 192.168.32.128 rsyslog客户端2、node01、node02安装rsyslog软件包[rootnode01 ~]# yum install -y rsyslog[rootnode02 ~]# yum install -y rsyslog3、修改node01上rsyslog的配置文件…

python异常值均值填充_Python 异常值分析

异常值分析是检验数据是否有录入错误以及含有不合常理的数据。忽视异常值的存在是十分危险的,不加剔除地把异常值包括进数据的计算分析过程中,对结果会产生不良影响;重视异常值的出现,分析其产生的原因,常常成为发现问…

近期学习清单

2019独角兽企业重金招聘Python工程师标准>>> 框架 1.编写xml性质的ioc容器demo(附上博文一篇) 2.编写unity形式的ioc容器demo(附上博文一篇) 3.编写自己的orm框架 c#语言特性 1.大量阅读有关枚举类,查询类…

java同名函数_浅谈Java 继承接口同名函数问题

在Java中如果一个类同时继承接口A与B,并且这两个接口中具有同名方法,会怎么样?动手做实验:interface A{void fun();}interface B{void fun();}interface C extends A,B{}public class Test implements C{Overridepublic void fun(…

NopCommerce开源项目中很基础但是很实用的C# Helper方法

NopCommerce是啥? nopCommerce是最好的开源电子商务购物 系统。nopCommerce免费提供。今天,它是最好和最流行的ASP.NET电子商务软件。它已被下载超过180万次! nopCommerce是一个完全可定制的购物系统。它稳定且高度可用。nopCommerce是一个开…

写一个函数,输入int型,返回整数逆序后的字符串

2019独角兽企业重金招聘Python工程师标准>>> 刚刚看到一个面试题:写一个函数,输入int型,返回整数逆序后的字符串。如:输入123,返回“321”。 要求必须用递归,不能用全局变量,输入必须…

VS2013 使用QCustomPlot等三方库如何配置

QCustomPlot 是一个小巧好用的 QT 图表插件。用来画曲线图、趋势图、坐标图、柱状图等类似二维图的库。实现大部分的2维图形绘制。使用时,我们在程序中写完相关调用的代码后,只需将 QCunstomPlot.cpp 和 QCustomPlot.h 两个文件加入工程,正常…

Php RSS

RSS 聚合最近非常流行,因此至少对 RSS 及其工作方式有所了解是一名 PHP 开发人员的迫切需要。本文介绍了 RSS 基础知识、RSS 众多用途中的一些用途、如何使用 PHP 从数据库创建 RSS 提要,以及如何使用 XML_RSS 模块读取现有 RSS 提要并将其转换为 HTML。…

分布式配置管理平台Disconf

2019独角兽企业重金招聘Python工程师标准>>> 摘要 为了更好的解决分布式环境下多台服务实例的配置统一管理问题,本文提出了一套完整的分布式配置管理解决方案(简称为disconf[4],下同)。首先,实现了同构系统…

1.ELF之Elf Header

1.ELF的三个文件头 每个ELF文件有三个文件头,用来索引信息。 (1).EH ELF file Header 可在此读到PH,SH在文件中的offset。 (2).PH Program Header 与load program有关的索引,.o的PH为空。 (3).SH Section Header 组成此文件的所有secti…