iOS客户端的APNS服务简介与实现

APNs --Apple Push Notification Service

APNs 苹果推送服务器
Device 安装带有推送服务程序的iPhone手机
Provider 程序服务器,把需要推送的信息发给 APNs
DeviceToken 在Device第一次连接APNs时,由APNs生成的经过加密的连接认证信息。在以后的连接中,无论时Provider到APNs还是APNs到Device 都需要 DeviceToken作为认证。
Payload 需要推送的消息的主体内容。alert-alert消息的消息体,按键标题等badge-显示在程序icon右上角的数字,sound-声音提示文件的文件名,该声音资源文件要在程序包中。

整体流程大体分为五个步骤:
1: Device --> 连接--> APNs 获取 DeviceToken
2: Device-->连接-->Provider提供DeviceToken


iOS客户端的APNS服务简介与实现


3: Provider侦测需要push的消息生成Notification信息


iOS客户端的APNS服务简介与实现


4: Provider侦把要push的消息推送到APNs
5: APNs把该消息推送到手机

 

iOS客户端的APNS服务简介与实现

介绍完APNS的概况,下面再了解一下具体的实现方法:

注:先申请APNS的证书,再进行以下操作。


1. 将app注册notification里面, 并从APNS上获取测试机的deviceToken.    

 

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

  2.    [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];  

  3.        // other codes here.    

  4.    return YES;

  5. }

  6.  

  7. - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {

  8.    NSLog(@"deviceToken: %@", deviceToken);

  9. }

  10.  

  11. - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {

  12.    NSLog(@"Error in registration. Error: %@", error);

  13. }

  14.  

  15. - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

  16. {


  17.    NSLog(@" 收到推送消息 : %@",[[userInfo objectForKey:@"aps"] objectForKey:@"alert"]);

  18.    if ([[userInfo objectForKey:@"aps"] objectForKey:@"alert"]!=NULL) {

  19.        UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"推送通知"

  20.                                                        message:[[userInfo objectForKey:@"aps"] objectForKey:@"alert"]

  21.                                                       delegate:self

  22.                                              cancelButtonTitle:@" 关闭"

  23.                                              otherButtonTitles:@" 更新状态",nil];

  24.        [alert show];

  25.        [alert release];

  26.    }

  27. }

 

启动程序,将app注册到通知项后,在console里面找到打印的deviceToken:

 

  1. deviceToken: <6974ac11 870e09fa 00e2238e 8cfafc7d 2052e342 182f5b57 fabca445 42b72e1b>

 



2. 生成app在服务端需要的许可证
1)进入Provisioning Portal, 下载Certificates在development下的证书。 
2) 找到需要测试的app id,然后enable它在development下的Apple Push Notification service: Development Push SSL Certificate。需要输入1)中的签名证书才可以生成一个aps_developer_identity.cer.
3) 双击aps_developer_identity.cer,会打开系统的key chain. 在My certificates下找到Apple Development Push Services。需要为certificate和它之下的private key各自export出一个.p12文件。(会出现设置密码过程)
4)需要将上面的2个.p12文件转成.pem格式:

 

  1. openssl pkcs12 -clcerts -nokeys -out cert.pem -in cert.p12

 

 

 

  1. openssl pkcs12 -nocerts -out key.pem -in key.p12

 


5)如果需要对 key不进行加密:
 

 

  1. openssl rsa -in key.pem -out key.unencrypted.pem

 


6)然后就可以 合并两个.pem文件, 这个ck.pem就是服务端需要的证书了。
 

 

  1. cat cert.pem key.unencrypted.pem > ck.pem

 



3. 服务端push通知到ANPS. 在cocoachina找到了两种方法:
 1)php驱动。需要将ck.pem和php脚本放到server 上。全部的php代码是:
   

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值