APNS远程推送证书的申请和制作——详细解析

发表于6个月前(2014-08-04 17:57)   阅读(1708) | 评论(7) 4人收藏此文章, 我要收藏

赞3

摘要 我们的手机每天会被很多通知轰炸,那么,这些通知是怎么弄出来的呢,下面为大家详细解析

APNS 远程推送

目录[-]

在ios中,通知有两种(提醒轰炸的来源):

第一种是本地通知(UILocalNotification),这一种不需要申请推送证书,也不需要向程序注册,直接使用,这一种不是本文讨论的范围。

第二种是APNS远程推送——远程通知(UIRemoteNotification),这个不仅需要向程序注册,也需要在开发者账号里申请推送证书,下面来介绍一下如何注册和申请证书。

一、远程推送的原理

先看下面一幅图(图片来源于无线互联):

可以看出,远程推送的过程分为6步,下面为大家简单讲解一下:

第一步是在程序上注册远程通知,这是通知的前提(程序员的工作),注册好后,当用户下载完我们的应用并打开时,app会弹出一个alertView,问是否允许该应用像你发送通知,如下图:

当用户选择“好”之后,ios 这个操作系统将会告诉APNS这个服务器,这样一来,当程序运行时,apns就会给程序发送那一台设备的 device token(唯一),这时候要做的操作就是获取这个token值(appDelegate的代理方法),并将这个token值发送到公司的服务器上去,让他存储下来。如果用户选择“不允许”,ios 这个操作系统将不会告诉apns这个服务器,那么到这一步也就完结了。

我们的服务器拿到token值后也不是随意就能向设备发送推送的,还需要一个证明身份的文件——推送证书,有了这个推送证书后,当有事情发生时,服务器便可以主动向用户发送远程推送了

下面来讲解一下这个过程

二、在程序上注册远程通知

在 didFinishLaunchingWithOptions 里写上 :

?


1

2

3

4

5

6

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];

    

    //后面的具体操作省略,程序员们可自由发挥

}

这样写就是会提醒,在程序上显示通知数,推送的过程中有铃声。

通过:

?


1

-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

代理方法来获取 device token,在这里,一般进行的是post请求,将deviceToken值发给服务器

注意:我们拿到的deviceToken 是带有空格的,交给服务器时,我们要将空格去掉(这也可以交给服务器来做)

当收到远程通知时,将调用如下代理方法:

?


1

2

3

4

5

6

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{

   //这里书写的代码应该可以让程序进入到相关的页面

}

三、申请推送证书

1、申请本地证书:

选择 :

    ——>         ——>   

点击“钥匙串访问”

然后选择“从证书颁发机构请求证书,如图:

看到如下界面,邮箱填一个你自己的:

这边名字随便起一个

然后点击继续在桌面上就生成了一个证书了(申请一个就足够了):

2、在开发者网站上申请证书

打开99美元开发者账号,进入到申请证书的页面:

点击“证书”:

选择App IDs

找到你想发送远程推送的那一个App ID,点击它:

点击"edit” 进行编辑,看到如下界面:

将Push Notifications 的 “勾” 勾上,选择下面的 “Create Certification” ,将刚刚申请的本地证书上传上去:

点击Continue :

最后将其下载下来,这里只示范开发证书,不示范发布证书的申请了,两个证书都申请好了之后,再次点击“edit”可以看到如下界面:

到这里,申请证书的工作就算完成了。

四、申请描述文件(开发和发布描述文件)

下面以开发描述文件为例,发布描述文件步骤相同

如图,选择申请开发描述文件:

这里要选择我们用于推送的app 的app id

选择”continue“ 选择证书

将设备全部选上

最后给描述文件起一个名字,并下载下来

点击生成后,下载双击安装就完成了。

五、为服务器制作证书

1、准备p12文件

下面只制作push开发证书,push 发布证书的制作过程是一样的,不同之处,下文会说明。

双击点击刚刚安装的下载的证书,这样证书就进去到钥匙串里面去了,在钥匙串的中找到那一个证书,将其导出为.p12文件,如图:

最好建立一个文件夹将所有的证书放在同一个地方,因为最后生成的证书也是在那个位置,给p12取一个名字,存到指定文件夹中:

点击“存储”之后要输入一个密码,这个密码随便输一个,但是要记住,因为在接下来的步骤中要用得上

在桌面上建立了一个叫“通知”的文件夹,里面放着所有的证书,如图:

这样p12就准备好了

2、将下载的证书制作成.pem 文件

打开终端应用程序,访问到你证书存放的那个目录下(如访问到桌面“通知”文件夹,在终端输入:

cd /Users/aec/Desktop/通知  ):

输入后敲回车

进到文件夹目录后,输入以下命令将证书转换成.pem文件:

?


1

openssl x509 -in 证书名字.cer -inform der -out push_developer_cer.pem

如图:

可以看到文件夹里多了一个.pem文件:

3、将.p12 证书制作成.pem文件

在终端输入:

?


1

<p>openssl pkcs12 -nocerts -out pushKey.pem -in p12名字.p12<br></p>

如图:

敲入回车后,会让你输入p12的密码,这个密码你输出来数看不见的,但是你确实输了,输完后在敲回车

接下来会让你输入两次新生成的.pem文件的密码,这个密码也是看不见的(这个密码以后要给服务器使用,要牢记)如图:

可以看到,文件夹又生成了一个新的文件:pushKey.pem

4、合并两个.pem文件

将上述新产生的文件合并,在终端输入命令后敲回车:

?


1

<p>cat 下载证书生成的.pem p12生成的.pem > 最终证书的名字.pem<br></p>

如图:

可以看到,文件夹又生成了一个新的文件:final_Push_developer.pem(这个密码要记住是pushKey.pem生成时要输入的密码,密码需要给到服务器)

5、测试证书是否有效

在终端输入(开发用的验证):

?


1

<p>openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert 下载证书生成的.pem -key p12生成的.pem<br></p>

如果是发布证书的验证,输入:

?


1

openssl s_client -connect gateway.push.apple.com:2195 -cert 下载证书生成的.pem -key p12生成的.pem

之后会让你输入密码,输入密码后,会有大量openssl消息,当你任意输入几个字符时,服务器会提示断开

如图:

以上省略若干行后出现下图:

这时候你就可以把final_Push_developer.pem 和相应的密码 交给服务器端了,告诉他们这个证书是没有问题的

六、php 的服务端实现的代码:

以下php代码可以直接交给服务器,或者让他们自己写都可以

?


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

<?php  

    $deviceToken= ‘da6d8206503c8e62e68b5df1b36c3b58ced1588c6dabe0fc9e6828961aeb36d9‘//没有空格  

    $body = array("aps" => array("alert" => ‘推送的内容‘,"badge" => 1,"sound"=>‘default‘));  //推送方式,包含内容和声音  

    $ctx = stream_context_create();  

    

    //如果在Windows的服务器上,寻找pem路径会有问题,路径修改成这样的方法:  

    //$pem = dirname(__FILE__) . ‘/‘ . ‘apns-dev.pem‘;  

    //linux 的服务器直接写pem的路径即可  

    

    stream_context_set_option($ctx,"ssl","local_cert","26ck.pem");  

    $pass = "123123";  

    stream_context_set_option($ctx, ‘ssl‘‘passphrase‘, $pass);  

    

    //此处有两个服务器需要选择,如果是开发测试用,选择第二名sandbox的服务器并使用Dev的pem证书,如果是正是发布,使用Product的pem并选用正式的服务器  

   // $fp = stream_socket_client("ssl://gateway.push.apple.com:2195", $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);  

    $fp = stream_socket_client("ssl://gateway.sandbox.push.apple.com:2195", $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);  

    

    if (!$fp) {  

        echo "Failed to connect $err $errstrn";  

        return;  

    }  

    

    print "Connection OK\n";  

    $payload = json_encode($body);  

    

    //这边可以弄一个循环实现多个deviceToken 值,这里暂用一个token值得方法

    $msg = chr(0) . pack("n",32) . pack("H*", str_replace(‘ ‘‘‘, $deviceToken)) . pack("n",strlen($payload)) . $payload;  

    echo "sending message :" . $payload ."\n";  

    fwrite($fp, $msg);  

    fclose($fp);

?>

时间: 2024-10-09 18:07:38

APNS远程推送证书的申请和制作——详细解析的相关文章

APNs 远程推送

APNs 远程推送 生成推送证书     1.登陆开发者中心: https://developer.apple.com     2.点开 certificates identifiers 和 proversionprofiles 里面     3.创建APPID. 勾选 push notification servers服务     4.搜索刚才创建的APPID, 点击edit, 配置证书, 下载双击    5.证书创建完成, 钥匙链内右键导出p12     1.App key     2.真机

IOS远程推送证书的制作步骤

今天还在看环信的使用方法,在环信的官网上发现了这组制作远程推送证书的一组图片,正好之前本人没有写过关于远程证书的笔记,这里要写一篇博文,整理一下远程推送证书的制作流程,尽管如此,本篇博文依然是作者原创,方便自己学习.参考使用.(声明本文的图片全部来自网络,是为了节省时间) (1)打开开发者中心,并登陆自己的开发者账号(或者公司的开发者账号) (2)从Member Center进入Certificates, Identifiers & Profiles (3)选择要制作的证书为推送证书 对于开发环

iOS APNS远程推送

                    真机运行远程推送dome,然后得到下面的device - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ // 注册远程推送 [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIR

IOS本地,APNS远程推送(具体过程)

添加本地推送 ///本地添加 -(void)addLocalPushNotification:(UIButton*)sender; { NSLog(@"%s",__FUNCTION__); UILocalNotification* localNotification=[[UILocalNotification alloc]init]; if (localNotification) { //设置时间当前加20秒 NSDate* pushDate=[NSDate dateWithTimeI

APNS 远程推送通知 PUSH deviceToken

服务器向客户端推送消息: 当应用程序推到后台,或者根本就没有运行(我们的代码无能为力)      如果这种情况之下,应用程序想和用户交互(传统的做法 不可能) 推送 APNS:Apple Push Notification Service deviceToken:标示某一台iPhone上的某一个应用程序 1.(用户必须确认需要收到推送消息)注册远程通知中心向APNS获取64位的字符串deviceToken 注册远程通知中心 [[UIApplication sharedApplication] r

IOS测试,远程推送证书

程序上传:准备工作证书创建流程 1:证书:证书用来为我们的应用程序签名,只有经过签名的应用程序才能保证他的来源是可信任的,并且代码是完整的, 未经修改的.证书的创建过程: 登陆开发者中心 点击Certificates(证书)该项,进入下面的界面 点击Certificates(证书)进入 看到左边栏有一个Certificates(证书)一项,我们发现该项中有Developerment和Production两个类型,其中Developerment类型的证书用于开发使用(比如我们的真机测试),Prod

iOS推送证书从申请到使用

关于这个话题,已经有很多写的很好的文章了.但是,在自己做的过程中,即使别人写的已经很好了,还是会遇到这样那样的问题.自己还是再写一遍吧. 本文记录了从无到有申请证书,到最后能够发出通知.当然,前提是我们有一个合适的开发者帐号. 准备工作 1. 登录开发者帐号,如果帐号的权限合适.我们会看到如下图: 或者最新的界面应该是下面(刚刚发现页面更新了): 2. 点击红色框内的菜单,会来到如下界面: 创建App ID 这里要创建的App ID就是我们的App的Bundle Id. 3. 点解左侧的"App

ios推送通知之ios推送证书的申请和使用配置

很多人初次接触推送通知,不知道怎么去申请ios推送证书和配置推送. 很多人犯的错误就是用推送证书p12去打包ipa,推送不是用来打包的,下面详细介绍ios推证书的申请和配置使用. ios推送证书分为测试调试用的iOS推送证书(开发环境)和上架到App Store的ios 推送证书!(生产环境) APP要推送通知首先要在创建APPID时勾选推送服务. 推送证书是配置上传到推送平台的,如极光推送.个推.小米推送等,不是用来打包ipa的,下面会有介绍. 一.创建唯一标示符App IDs 首先打开开发者

APNS远程推送(转发)

/*****************************************2************************************************/ /*****************************************3************************************************/ /*****************************************4*********************