APNS推送服务证书制作 图文详解教程
2015-09-16 13:05
561 查看
iOS消息推送的工作机制可以简单的用下图来概括:
Provider是指某个iPhone软件的Push服务器,APNS是Apple Push Notification Service的缩写,是苹果的服务器。
上图可以分为三个阶段:
第一阶段:应用程序把要发送的消息、目的iPhone的标识打包,发给APNS。
第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发送到iPhone。
第三阶段:iPhone把发来的消息传递给相应的应用程序,并且按照设定弹出Push通知。
从上图我们可以看到:
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)
2、填写你的邮箱和常用名称,并选择保存到硬盘。
点击继续:
这样就在本地生成了一个Push.certSigningRequest文件。
二、p12文件
1、导出密钥。
2、输入你的密码。
这样就生成了一个Push.p12文件。
三、SSL certificate文件
1、用你付过费的帐号登录到iOS Provisioning Portal,并新建一个Explicit App ID,这个过程可以参考:我的另一篇博客
2、点击Edit:
3、勾选Push Notification -> Development SSL Certificate ->Creat Certifica...
4、点击Continue
,
5、选择前面生成好的Push.certSigningRequest文件,点击Generate,出现如下所示的页面:
6、点击Download,并将文件命名为aps_development.cer。
7、点击左侧App IDs, 找到刚才新建的App ID, (testAppId) 你会发现状态变成了Enabled:
注意:有的App ID的Apple Push Notification service列是灰色的,并且不允许使用Configure按钮,这是因为APNS不支持带通配符的App ID。
到现在为止,我们已经生成了三个文件:
1、Push.certSigningRequest
2、Push.p12
3、aps_development.cer
在项目的AppDelegate中的didFinishLaunchingWithOptions方法中加入下面的代码:
[objc] view plaincopy
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//注册APNS
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeBadge)];
return YES;
}
通过registerForRemoteNotificationTypes方法,告诉应用程序,能接受push来的通知。
在项目的AppDelegate中添加下面的方法来获取deviceToken:
[objc] view plaincopy
//APNS
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
NSString *token = [NSString stringWithFormat:@"%@", deviceToken];
NSLog(@"My token is:%@", token);
}
- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
NSString *error_str = [NSString stringWithFormat: @"%@", error];
NSLog(@"Failed to get token, error:%@", error_str);
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
}
运行程序可以获取到device Token, 如图,
获取到的deviceToken,我们可以提交给后台应用程序,
后台程序实现有多种方式
一. PushMeBaby
我用的pushMeBaby,做的测试,https://github.com/stefanhafeneger/PushMeBaby
1,将下载的aps_development.cer文件拷贝到PushMeBaby工程文件所在目录,
2.打开工程,在工程文件上右击 add file to "PushMeBaby",
3.run PushMeBaby ,询问是否允许访问钥匙串,点允许,
4,运行界面及日志如图所示表示连接成功,
5, 将前面获取到的 device Token 粘贴到输入框中,点击push,日志如下,0表示成功,111表示发送的数据的长度,
二. 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
We are running everything from a server running Ubuntu-9.04. Here we had to remove the passphrase, which can be done as follows
Finally, combine the two to get your apns-dev.pem file
原文来自 : http://blog.csdn.net/zhugq_1988/article/details/37656107
Provider是指某个iPhone软件的Push服务器,APNS是Apple Push Notification Service的缩写,是苹果的服务器。
上图可以分为三个阶段:
第一阶段:应用程序把要发送的消息、目的iPhone的标识打包,发给APNS。
第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发送到iPhone。
第三阶段:iPhone把发来的消息传递给相应的应用程序,并且按照设定弹出Push通知。
从上图我们可以看到:
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)
2、填写你的邮箱和常用名称,并选择保存到硬盘。
点击继续:
这样就在本地生成了一个Push.certSigningRequest文件。
二、p12文件
1、导出密钥。
2、输入你的密码。
这样就生成了一个Push.p12文件。
三、SSL certificate文件
1、用你付过费的帐号登录到iOS Provisioning Portal,并新建一个Explicit App ID,这个过程可以参考:我的另一篇博客
iOS申请真机调试证书 图文详解
,这样就会生成下面这条记录:2、点击Edit:
3、勾选Push Notification -> Development SSL Certificate ->Creat Certifica...
4、点击Continue
,
5、选择前面生成好的Push.certSigningRequest文件,点击Generate,出现如下所示的页面:
6、点击Download,并将文件命名为aps_development.cer。
7、点击左侧App IDs, 找到刚才新建的App ID, (testAppId) 你会发现状态变成了Enabled:
注意:有的App ID的Apple Push Notification service列是灰色的,并且不允许使用Configure按钮,这是因为APNS不支持带通配符的App ID。
到现在为止,我们已经生成了三个文件:
1、Push.certSigningRequest
2、Push.p12
3、aps_development.cer
在项目的AppDelegate中的didFinishLaunchingWithOptions方法中加入下面的代码:
[objc] view plaincopy
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//注册APNS
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeBadge)];
return YES;
}
通过registerForRemoteNotificationTypes方法,告诉应用程序,能接受push来的通知。
在项目的AppDelegate中添加下面的方法来获取deviceToken:
[objc] view plaincopy
//APNS
- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
NSString *token = [NSString stringWithFormat:@"%@", deviceToken];
NSLog(@"My token is:%@", token);
}
- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
NSString *error_str = [NSString stringWithFormat: @"%@", error];
NSLog(@"Failed to get token, error:%@", error_str);
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
}
运行程序可以获取到device Token, 如图,
获取到的deviceToken,我们可以提交给后台应用程序,
后台程序实现有多种方式
一. PushMeBaby
我用的pushMeBaby,做的测试,https://github.com/stefanhafeneger/PushMeBaby
1,将下载的aps_development.cer文件拷贝到PushMeBaby工程文件所在目录,
2.打开工程,在工程文件上右击 add file to "PushMeBaby",
3.run PushMeBaby ,询问是否允许访问钥匙串,点允许,
4,运行界面及日志如图所示表示连接成功,
5, 将前面获取到的 device Token 粘贴到输入框中,点击push,日志如下,0表示成功,111表示发送的数据的长度,
二. 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://blog.csdn.net/zhugq_1988/article/details/37656107
相关文章推荐
- 某虎公司的笔试
- 使用MYSQLCPPCONN连接MYSQL数据库与读写BLOB字段
- Android开发之仿联系人界面(根据文字首字母A、B、C实现快速索引)
- Unity3D之游戏架构脚本该如何来写
- python的函数嵌套机制
- lucene入门教程
- 回文树练习
- 【ionic&AngularJS】用户头像压缩上传,按比例缩小。
- c++不接受模板分离式编译的原因及其解决方法
- jQuery前端验证多种方式
- POJ 3660 Cow Contest
- IPMI从驱动到应用(上篇)
- ASP.NET MVC中的统一化自定义异常处理
- 堆排序
- .NET基础--数组
- Java JVM(十一):MAT 工具的使用
- 简易计算器NetBeans Ide
- 将char[][] 赋值给char**的结果
- 猴子吃桃
- rgba的应用