首页 > 代码库 > 关于苹果APNS推送机制中各生成文件(CSR、证书、Provisioning文件)的关系的梳理,以及各种坑

关于苹果APNS推送机制中各生成文件(CSR、证书、Provisioning文件)的关系的梳理,以及各种坑

1.前言

iOS采用APNS做推送,流程附一张图吧,不多说

技术分享


2.正题

这两天重新搞了几天的推送,有些坑想给大家指出来,少走弯路。

那我想要说的是流程中需要用的各种文件,为诸位做一个梳理,理解不到之处,敬请批评指正!

注:以Development为例,Distribution照搬即可。同样我们实现的网上常见的用php实现的推送服务器。

2.1 所需文件

首先是我们最终需要生成如下图所示的文件夹中的文件:

技术分享

其中各个文件的关系:

技术分享

2.2 生成各个文件时中的弯弯

1、生成Certificate Signing Request (CSR):

正常情况下,生成CSR文件如下图所示:

技术分享

而正确生成CSR之后,会在密钥一项出现对应的密钥,如图

技术分享

注意:下面这种情况会导致证书有问题!

技术分享

2、生成PushZYQ.mobileprovision文件

生成PushZYQ.mobileprovision需要选择对应的证书,注意此处需要选择的证书是ios_development.cer对应的证书而不是SSL证书

3、生成PushZYQ.p12文件

技术分享

4、各种命令

三步生成ck.pem文件

4.1、

openssl x509 -in aps_development.cer -inform der -out PushZYQCert.pem

4.2、

 openssl pkcs12 -nocerts -out PushZYQKey.pem -in PushZYQ.p12

4.3、

cat PushZYQCert.pem PushZYQKey.pem > ck.pem

5、关于接收推送

默认推送提示是在程序退出后才会出现的,所以如果当前程序正在运行,只能通过回调方法来判断,如果你想联调的话。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
    // 处理推送消息
    NSLog(@"userinfo:%@",userInfo);
    
    NSLog(@"收到推送消息:%@",[[userInfo objectForKey:@"aps"] objectForKey:@"alert"]);
}

3.所需文件

3.1、PHP实现的服务端,由于不能插入超链接,所以大家可输入图中URL

技术分享

3.2、简易Demo

这个Demo中没有图示,大家可以通过控制台来查看,适配iOS8.0+。

技术分享

4.正常情况下如图所示

技术分享

技术分享

关于苹果APNS推送机制中各生成文件(CSR、证书、Provisioning文件)的关系的梳理,以及各种坑