iOS消息推送机制的实现
2015-06-05 13:59
621 查看
iOS消息推送的工作机制可以简单的用下图来概括:
![](http://dl.iteye.com/upload/attachment/617605/322782e2-f9a1-3836-9ffe-9257e2fca12c.jpg)
Provider是指某个iPhone软件的Push服务器,APNS是Apple Push Notification Service的缩写,是苹果的服务器。
上图可以分为三个阶段:
第一阶段:应用程序把要发送的消息、目的iPhone的标识打包,发给APNS。
第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发送到iPhone。
第三阶段:iPhone把发来的消息传递给相应的应用程序,并且按照设定弹出Push通知。
![](http://dl.iteye.com/upload/attachment/617607/8deb07df-1356-3aed-8c2e-3e41d25d4e2f.jpg)
从上图我们可以看到:
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)
![](http://dl.iteye.com/upload/attachment/617609/bea39b68-db6c-343a-85ee-15e9c20c343d.jpg)
2、填写你的邮箱和常用名称,并选择保存到硬盘。
![](http://dl.iteye.com/upload/attachment/617611/cd5e9289-f943-3e8a-804f-35f452238d95.jpg)
点击继续:
![](http://dl.iteye.com/upload/attachment/617613/4acd574b-6252-3842-94c2-1d60f2a27b21.jpg)
这样就在本地生成了一个Push.certSigningRequest文件。
二、p12文件
1、导出密钥。
![](http://dl.iteye.com/upload/attachment/617615/1b41636d-58ac-34c2-b31c-073185dbbaef.jpg)
![](http://dl.iteye.com/upload/attachment/617618/c4644192-38b2-3b0c-bfd1-105ab850ce47.jpg)
2、输入你的密码。
![](http://dl.iteye.com/upload/attachment/617620/2671d2ca-2b34-30a1-88da-5406b0d33c7f.jpg)
这样就生成了一个Push.p12文件。
三、SSL certificate文件
1、用你付过费的帐号登录到iOS Provisioning Portal,并新建一个App ID,这个过程可以参考:iOS应用的真机调试,这样就会生成下面这条记录:
![](http://dl.iteye.com/upload/attachment/0061/8004/36feeefd-ee3b-3341-90d6-5041fb6cccce.jpg)
2、点击右侧的Configure:
![](http://dl.iteye.com/upload/attachment/0061/8008/0347ea0a-e06b-3425-aa40-40e92f0b59c2.jpg)
3、点击Development Push SSL Certificate一行后的Configure:
![](http://dl.iteye.com/upload/attachment/0061/8010/35e7eeb7-7b84-3352-89fd-1ea5049327c8.jpg)
4、点击Continue:
![](http://dl.iteye.com/upload/attachment/0061/8012/2d28e16e-f9c2-3f0f-98a6-0c92cf3d517e.jpg)
5、选择前面生成好的Push.certSigningRequest文件,点击Generate,出现如下所示的页面:
![](http://dl.iteye.com/upload/attachment/0061/8016/e681263d-14a4-3b66-9e50-5e71c645bdc0.jpg)
6、点击Continue:
![](http://dl.iteye.com/upload/attachment/0061/8018/fab8eb43-56c7-300f-bb67-f722ce09a2b9.jpg)
7、点击Download,并将文件命名为aps_developer_identity.cer。
8、点击Done,你会发现状态变成了Enabled:
![](http://dl.iteye.com/upload/attachment/0061/8025/72f36fed-4f10-32fb-8dbc-940fad8610bb.jpg)
注意:有的App ID的Apple Push Notification service列是灰色的,并且不允许使用Configure按钮,这是因为APNS不支持带通配符的App ID。
到现在为止,我们已经生成了三个文件:
1、Push.certSigningRequest
2、Push.p12
3、aps_developer_identity.cer
在项目的AppDelegate中的didFinishLaunchingWithOptions方法中加入下面的代码:
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeBadge)];
通过registerForRemoteNotificationTypes方法,告诉应用程序,能接受push来的通知。
在项目的AppDelegate中添加下面的方法来获取deviceToken:
- (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);
}
获取到的deviceToken,我们可以提交给后台应用程序,发送通知的后台应用程序除了需要知道deviceToken之外,还需要一个与APNS连接的证书。
这个证书可以通过我们前面生成的两个文件中得到。
1、将aps_developer_identity.cer转换成aps_developer_identity.pem格式
openssl x509 -in aps_developer_identity.cer -inform DER -out aps_developer_identity.pem -outform PEM
2、将p12格式的私钥转换成pem
openssl pkcs12 -nocerts -out Push_Noenc.pem -in Push.p12
3、创建p12文件
openssl pkcs12 -export -in aps_developer_identity.pem -inkey Push_Noenc.pem -certfile Push.certSigningRequest -name "aps_developer_identity" -out aps_developer_identity.p12
这样我们就得到了在.net或java等后台应用程序中使用的证书文件:aps_developer_identity.p12
如果后台应用是php的话,那么可以按照 iOS消息推送机制中pem文件的生成这篇文章中的方法来生成php后台应用程序中使用的证书文件:ck.pem
摘自:http://www.cnblogs.com/qq78292959/archive/2012/07/16/2593651.html
![](http://dl.iteye.com/upload/attachment/617605/322782e2-f9a1-3836-9ffe-9257e2fca12c.jpg)
Provider是指某个iPhone软件的Push服务器,APNS是Apple Push Notification Service的缩写,是苹果的服务器。
上图可以分为三个阶段:
第一阶段:应用程序把要发送的消息、目的iPhone的标识打包,发给APNS。
第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发送到iPhone。
第三阶段:iPhone把发来的消息传递给相应的应用程序,并且按照设定弹出Push通知。
![](http://dl.iteye.com/upload/attachment/617607/8deb07df-1356-3aed-8c2e-3e41d25d4e2f.jpg)
从上图我们可以看到:
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)
![](http://dl.iteye.com/upload/attachment/617609/bea39b68-db6c-343a-85ee-15e9c20c343d.jpg)
2、填写你的邮箱和常用名称,并选择保存到硬盘。
![](http://dl.iteye.com/upload/attachment/617611/cd5e9289-f943-3e8a-804f-35f452238d95.jpg)
点击继续:
![](http://dl.iteye.com/upload/attachment/617613/4acd574b-6252-3842-94c2-1d60f2a27b21.jpg)
这样就在本地生成了一个Push.certSigningRequest文件。
二、p12文件
1、导出密钥。
![](http://dl.iteye.com/upload/attachment/617615/1b41636d-58ac-34c2-b31c-073185dbbaef.jpg)
![](http://dl.iteye.com/upload/attachment/617618/c4644192-38b2-3b0c-bfd1-105ab850ce47.jpg)
2、输入你的密码。
![](http://dl.iteye.com/upload/attachment/617620/2671d2ca-2b34-30a1-88da-5406b0d33c7f.jpg)
这样就生成了一个Push.p12文件。
三、SSL certificate文件
1、用你付过费的帐号登录到iOS Provisioning Portal,并新建一个App ID,这个过程可以参考:iOS应用的真机调试,这样就会生成下面这条记录:
![](http://dl.iteye.com/upload/attachment/0061/8004/36feeefd-ee3b-3341-90d6-5041fb6cccce.jpg)
2、点击右侧的Configure:
![](http://dl.iteye.com/upload/attachment/0061/8008/0347ea0a-e06b-3425-aa40-40e92f0b59c2.jpg)
3、点击Development Push SSL Certificate一行后的Configure:
![](http://dl.iteye.com/upload/attachment/0061/8010/35e7eeb7-7b84-3352-89fd-1ea5049327c8.jpg)
4、点击Continue:
![](http://dl.iteye.com/upload/attachment/0061/8012/2d28e16e-f9c2-3f0f-98a6-0c92cf3d517e.jpg)
5、选择前面生成好的Push.certSigningRequest文件,点击Generate,出现如下所示的页面:
![](http://dl.iteye.com/upload/attachment/0061/8016/e681263d-14a4-3b66-9e50-5e71c645bdc0.jpg)
6、点击Continue:
![](http://dl.iteye.com/upload/attachment/0061/8018/fab8eb43-56c7-300f-bb67-f722ce09a2b9.jpg)
7、点击Download,并将文件命名为aps_developer_identity.cer。
8、点击Done,你会发现状态变成了Enabled:
![](http://dl.iteye.com/upload/attachment/0061/8025/72f36fed-4f10-32fb-8dbc-940fad8610bb.jpg)
注意:有的App ID的Apple Push Notification service列是灰色的,并且不允许使用Configure按钮,这是因为APNS不支持带通配符的App ID。
到现在为止,我们已经生成了三个文件:
1、Push.certSigningRequest
2、Push.p12
3、aps_developer_identity.cer
在项目的AppDelegate中的didFinishLaunchingWithOptions方法中加入下面的代码:
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeBadge)];
通过registerForRemoteNotificationTypes方法,告诉应用程序,能接受push来的通知。
在项目的AppDelegate中添加下面的方法来获取deviceToken:
- (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);
}
获取到的deviceToken,我们可以提交给后台应用程序,发送通知的后台应用程序除了需要知道deviceToken之外,还需要一个与APNS连接的证书。
这个证书可以通过我们前面生成的两个文件中得到。
1、将aps_developer_identity.cer转换成aps_developer_identity.pem格式
openssl x509 -in aps_developer_identity.cer -inform DER -out aps_developer_identity.pem -outform PEM
2、将p12格式的私钥转换成pem
openssl pkcs12 -nocerts -out Push_Noenc.pem -in Push.p12
3、创建p12文件
openssl pkcs12 -export -in aps_developer_identity.pem -inkey Push_Noenc.pem -certfile Push.certSigningRequest -name "aps_developer_identity" -out aps_developer_identity.p12
这样我们就得到了在.net或java等后台应用程序中使用的证书文件:aps_developer_identity.p12
如果后台应用是php的话,那么可以按照 iOS消息推送机制中pem文件的生成这篇文章中的方法来生成php后台应用程序中使用的证书文件:ck.pem
摘自:http://www.cnblogs.com/qq78292959/archive/2012/07/16/2593651.html
相关文章推荐
- IOS多线程开发其实很简单
- ios 线程
- iOS开发系列--音频播放、录音、视频播放、拍照、视频录制
- iOS 堆和栈的区别
- iOS CoreData详解(六)深入理解数据模型
- ios 学习资料
- iOS中动态计算字符串的长度
- IOS的企业版安装包 点击链接直接安装的方式 plist方式
- ios旋转问题
- iOS 蓝色文件夹和黄色文件夹的区别
- IOS 保存图片至相册
- iOS第三方支付-银联支付
- ios 计算 文本高度!
- iOS开发-widget基础
- iOS利用Runtime自定义控制器POP手势动画
- iOS开发- 文件共享(利用iTunes导入文件, 并且显示已有文件)
- iOS动画效果整理
- iOS中AutoLayer自动布局流程及相关方法
- iOS image生成图片
- ios远程推送------------->非常详细