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)
点击继续:
这样就在本地生成了一个Push.certSigningRequest文件。
二、p12文件
1、导出密钥。
2、输入你的密码。
这样就生成了一个Push.p12文件。
三、SSL certificate文件
1、用你付过费的帐号登录到iOS Provisioning Portal,并新建一个App ID,这个过程可以参考:iOS应用的真机调试,这样就会生成下面这条记录:
2、点击右侧的Configure:
3、点击Development
Push SSL Certificate一行后的Configure:
4、点击Continue
5、选择前面生成好的Push.certSigningRequest文件,点击Generate,出现如下所示的页面:
6、点击Continue:
7、点击Download,并将文件命名为aps_developer_identity.cer。
8、点击Done,你会发现状态变成了Enabled:
、
注意:有的App ID的Apple Push Notification service列是灰色的,并且不允许使用Configure按钮,这是因为APNS不支持带通配符的App ID。
到现在为止,我们已经生成了三个文件:
1、Push.certSigningRequest
2、Push.p12
3、aps_developer_identity.cer
在项目的AppDelegate中的didFinishLaunchingWithOptions方法中加入下面的代码:
-
[[UIApplicationsharedApplication]registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeSound|UIRemoteNotificationTypeBadge)];
通过registerForRemoteNotificationTypes方法,告诉应用程序,能接受push来的通知。
在项目的AppDelegate中添加下面的方法来获取deviceToken:
-
-(void)application:(UIApplication*)appdidRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken{
-
NSString*token=[NSStringstringWithFormat:@"%@",deviceToken];
-
NSLog(@"Mytokenis:%@",token);
-
}
-
-
-(void)application:(UIApplication*)appdidFailToRegisterForRemoteNotificationsWithError:(NSError*)error{
-
NSString*error_str=[NSStringstringWithFormat:@"%@",error];
-
NSLog(@"Failedtogettoken,error:%@",error_str);
-
}
获取到的deviceToken,我们可以提交给后台应用程序,发送通知的后台应用程序除了需要知道deviceToken之外,还需要一个与APNS连接的证书。
这个证书可以通过我们前面生成的两个文件中得到。
1、将aps_developer_identity.cer转换成aps_developer_identity.pem格式
-
opensslx509-inaps_developer_identity.cer-informDER-outaps_developer_identity.pem-outformPEM
2、将p12格式的私钥转换成pem
-
opensslpkcs12-nocerts-outPush_Noenc.pem-inPush.p12
3、创建p12文件
-
opensslpkcs12-export-inaps_developer_identity.pem-inkeyPush_Noenc.pem-certfilePush.certSigningRequest-name"aps_developer_identity"-outaps_developer_identity.p12
这样我们就得到了在.net或java等后台应用程序中使用的证书文件:aps_developer_identity.p12
如果后台应用是php的话,那么可以按照iOS消息推送机制中pem文件的生成这篇文章中的方法来生成php后台应用程序中使用的证书文件:ck.pem
注意:有的App ID的Apple Push Notification service列是灰色的,并且不允许使用Configure按钮,这是因为APNS不支持带通配符的App ID。
到现在为止,我们已经生成了三个文件:
1、Push.certSigningRequest
2、Push.p12
3、aps_developer_identity.cer
在项目的AppDelegate中的didFinishLaunchingWithOptions方法中加入下面的代码:
-
[[UIApplicationsharedApplication]registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeSound|UIRemoteNotificationTypeBadge)];
通过registerForRemoteNotificationTypes方法,告诉应用程序,能接受push来的通知。
在项目的AppDelegate中添加下面的方法来获取deviceToken:
-
-(void)application:(UIApplication*)appdidRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken{
-
NSString*token=[NSStringstringWithFormat:@"%@",deviceToken];
-
NSLog(@"Mytokenis:%@",token);
-
}
-
-
-(void)application:(UIApplication*)appdidFailToRegisterForRemoteNotificationsWithError:(NSError*)error{
-
NSString*error_str=[NSStringstringWithFormat:@"%@",error];
-
NSLog(@"Failedtogettoken,error:%@",error_str);
-
}
获取到的deviceToken,我们可以提交给后台应用程序,发送通知的后台应用程序除了需要知道deviceToken之外,还需要一个与APNS连接的证书。
这个证书可以通过我们前面生成的两个文件中得到。
1、将aps_developer_identity.cer转换成aps_developer_identity.pem格式
-
opensslx509-inaps_developer_identity.cer-informDER-outaps_developer_identity.pem-outformPEM
2、将p12格式的私钥转换成pem
-
opensslpkcs12-nocerts-outPush_Noenc.pem-inPush.p12
3、创建p12文件
-
opensslpkcs12-export-inaps_developer_identity.pem-inkeyPush_Noenc.pem-certfilePush.certSigningRequest-name"aps_developer_identity"-outaps_developer_identity.p12
这样我们就得到了在.net或java等后台应用程序中使用的证书文件:aps_developer_identity.p12
如果后台应用是php的话,那么可以按照iOS消息推送机制中pem文件的生成这篇文章中的方法来生成php后台应用程序中使用的证书文件:ck.pem
分享到:
相关推荐
以.net作为服务器开发对ios端进行消息推送的服务机制。其中有server和test。再按照说明把密钥和p12文件在Jdsoft.Apple.Apns.Notifications中做下调整。
在iOS出来之前,主流的操作系统(MacOS/Windows)软件随便从哪里下载都能运行,系统安全存在隐患,盗版软件、病毒入侵、静默安装等等,苹果希望解决类似的问题,保证在iPhone iOS上的APP都是经过苹果官方允许的,...
iOS开发推送机制的时候,需要一个服务器向苹果APNS服务器发请求,配合iOS程序员测试,这个工程就是服务器端的,直接下载下来,放到eclipse里面运行。当然,你需要替换里面的deviceToken, 密码,还有你的APNS证书。...
ios会推送到apns,wp推送到microsoft的推送服务器上,支持分布式##特性1、轻量级,完全依赖akka2、高性能3、纯scala实现,部分方法使用java4、支持设置过期机制(用于gopush推送)5、支持client消息发送失败重传机制...
好久没有写过博客啦,...首先第一步当然是介绍一下苹果的推送机制(APNS)咯(ps:其实每一篇教程都有),先来看一张苹果官方对其推送做出解释的概要图。 Provider是给你手机应用发出推送消息的服务器,而APNS(Apple Pu
详细的介绍了关于iOS本地推送的原理,以及苹果服务器和客户端交互的机制.
最近两天在研究ios的消息推送机制。研究这个东西,还是充满兴趣的。Push的工作机制可以简单的概括为下图图中,Provider是指某个iPhone软件的Push服务器,这篇文章我将使用.net作为Provider。APNS是...
H5P.CoreHTML5plus Runtime,...目录结构Android: Android版本iOS: iOS版本js: js开发步骤iOS平台:Android平台:插件实现支付宝插件 ()百度地图插件 ()条码扫描插件 ()Audio插件 ()个推push ()License遵循MIT License;
Android Push it单机版事件管理APP Android RecycleView+任意头尾布局+拖拽换位+拖拽删除demo Android sql练习合集 Android 仿12306 Android 优秀计步器 Android 体重计算源码 Android 使用Gallery_tabhost实现标签...
源码简介与安装说明: 软件介绍 ... ... Egret框架是一个基于BSD开源协议许可的永久免费的项目!你可以在项目中随意使用且修改它,并且拥有100%的控制权。你可以从Egret的 ...Push game forward!是Egret游戏框架的口号。
... Egret框架是一个基于BSD开源协议许可的永久免费的项目!你可以在项目中随意使用且修改它,并且拥有100%的控制权。你可以从Egret的 Github网站获取它的源代码,从而了解...Push game forward!是Egret游戏框架的口号。