现在的位置: 首页 > 综合 > 正文

iOS 远程推送通知

2014年01月15日 ⁄ 综合 ⁄ 共 6668字 ⁄ 字号 评论关闭

玩了一年的iPhone了 各种App的远程通知接收了不少,每次接收到的时候,就在反思,这丫的怎么实现的! 

由于工作方面一直没有接触的机会,所以只好自己主动去做做练习试试了.

实践后发现,一系列的配置非常繁琐,当然咯,网上的教程已经一大堆了.

在这里还是写一篇文章来记录一些自己容易忘记的细节,以备日后所需时能够有用武之地.

依照自己的习惯,喜欢把参考过的教程列举出来,真的很感谢这些网上的牛人.

1: ios本地通知和远程通知

http://wangjun.easymorse.com/?p=1482

2: 苹果远程通知服务申请激活例图 (外国佬写的.)

http://mobiforge.com/developing/story/programming-apple-push-notification-services

3:书籍参考:iPhone 开发秘籍 第16章 推送通知.

好了,进入正文:

首先是申请证书的网址

https://developer.apple.com/ios/manage/overview/index.action

登录成功以后,进入iOS 配置管理的 主页面.

第一步操作是去 创建一个新的App IDs创建成功后,会需要提供安全证书来激动推送服务,如下图:

选择存储到磁盘以后,生成一个文件名称为(简称CSR): CertificateSigningRequest.certSigningRequest

回到Apple页面 将这个提交并提示激动成功.

激活成功后的App  IDs 提供下载 开发版或是发布版的主动推送证书(aps_development.cer),如果需要做服务器方面的主动推送的话,就必须要下载这个文件来使用推送服务了.

第二步要为App提供接受推送许可的证书,点击Provisioning进行设置,添加一个新的许可,选择刚刚新创建的App IDs. 再选择可以调试的iPhone 设备.

最后,同样是下载下来: YsyPushMessageDemo.mobileprovision双击该证书,让其加载一次.

接下来,进入iOS工程,选择使用该证书来调试.

红圈中,全部设置刚刚加载的许可证书.

那么到这里,关于证书类的 准备工作,已经全部准备就绪.

在这里再此强调一次,每个文件的具体作用

1: CertificateSigningRequest.certSigningRequest : 为生成App IDs 而用

2: aps_development.cer 为开发主动推送服务而用到的证书

3: YsyPushMessageDemo.mobileprovision 为App 接受推送通知的许可服务

主动推送的Push 代码 及使用,请参考一开始介绍的第一篇博客

这里只附上下载地址: https://github.com/stefanhafeneger/PushMeBaby

接下来,说说收到推送通知代码方面.

1:申请本App需要接受来自服务商提供推送消息,

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

2:申请发出后,如果成功,委托会自动返回一个设备令牌(toKen),如果失败,将会进入另外一个失败的委托

  1. //远程通知注册成功委托  
  2. - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken  
  3. {  
  4.     NSLog(@"%@",deviceToken);  
  5.     self.viewController.toKenValueTextView.text = [NSString stringWithFormat:@"%@",deviceToken];  
  6.     self.viewController.pushStatusLabel.text = @"已经注册.";  
  7. }  
  8. //远程通知注册失败委托  
  9. -(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error  
  10. {  
  11.     self.viewController.toKenValueTextView.text = [error description];  
  12. }  

3:将设备令牌码提供给服务商,以供推送到具体的手机上面. 如果远程推送消息来了,用户点击了推送消息,或者应用已经处于打开状态,系统都会自动调用以下委托:

  1. //点击某条远程通知时调用的委托 如果界面处于打开状态,那么此委托会直接响应  
  2. -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo  
  3. {  
  4.     NSLog(@"远程通知");  
  5.     [self PMD_uesPushMessage:userInfo];  
  6. }  

4: 第三点里面的介绍的情况是应用程序已经处于运行状态,上面的委托才会被执行,如果应用程序处于未启用状态,此时又需要响应消息,那么需要以下委托处理.

  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
  2. {  
  3.     //这里处理应用程序如果没有启动,但是是通过通知消息打开的,此时可以获取到消息.  
  4.     if (launchOptions != nil) {  
  5.         NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];  
  6.         [self PMD_uesPushMessage:userInfo];  
  7.     }  
  8.     return YES;  
  9. }  

5:清空通知中心已有的推送消息,只需要将指定App 的 Badge 设置为 0即可

  1. [[UIApplication sharedApplication ] setApplicationIconBadgeNumber:0];  

6:主动推送的字符串必须符合如下Json数组的格式,才能正确推送到手机当中.

    @"{

       //自定义参数

       \"userinfo\":

              {

                 \"name\":\"remote notice\"

              },

       //标准写法

       \"aps\":

              {

                 \"alert\":

                           {

                              \"action-loc-key\":\"Open\",//支持多语言

                              \"body\":\"messgae content\"//消息正文

                           },

                 \"badge\":1,//为App 的icon  标记 具体数值

                 \"sound\":\"default\" //播放的音频文件,default 表示系统默认的选择列铃声

             } 

     }";

到这里就差不多结束了.

玩了一年的iPhone了 各种App的远程通知接收了不少,每次接收到的时候,就在反思,这丫的怎么实现的! 

由于工作方面一直没有接触的机会,所以只好自己主动去做做练习试试了.

实践后发现,一系列的配置非常繁琐,当然咯,网上的教程已经一大堆了.

在这里还是写一篇文章来记录一些自己容易忘记的细节,以备日后所需时能够有用武之地.

依照自己的习惯,喜欢把参考过的教程列举出来,真的很感谢这些网上的牛人.

1: ios本地通知和远程通知

http://wangjun.easymorse.com/?p=1482

2: 苹果远程通知服务申请激活例图 (外国佬写的.)

http://mobiforge.com/developing/story/programming-apple-push-notification-services

3:书籍参考:iPhone 开发秘籍 第16章 推送通知.

好了,进入正文:

首先是申请证书的网址

https://developer.apple.com/ios/manage/overview/index.action

登录成功以后,进入iOS 配置管理的 主页面.

第一步操作是去 创建一个新的App IDs创建成功后,会需要提供安全证书来激动推送服务,如下图:

选择存储到磁盘以后,生成一个文件名称为(简称CSR): CertificateSigningRequest.certSigningRequest

回到Apple页面 将这个提交并提示激动成功.

激活成功后的App  IDs 提供下载 开发版或是发布版的主动推送证书(aps_development.cer),如果需要做服务器方面的主动推送的话,就必须要下载这个文件来使用推送服务了.

第二步要为App提供接受推送许可的证书,点击Provisioning进行设置,添加一个新的许可,选择刚刚新创建的App IDs. 再选择可以调试的iPhone 设备.

最后,同样是下载下来: YsyPushMessageDemo.mobileprovision双击该证书,让其加载一次.

接下来,进入iOS工程,选择使用该证书来调试.

红圈中,全部设置刚刚加载的许可证书.

那么到这里,关于证书类的 准备工作,已经全部准备就绪.

在这里再此强调一次,每个文件的具体作用

1: CertificateSigningRequest.certSigningRequest : 为生成App IDs 而用

2: aps_development.cer 为开发主动推送服务而用到的证书

3: YsyPushMessageDemo.mobileprovision 为App 接受推送通知的许可服务

主动推送的Push 代码 及使用,请参考一开始介绍的第一篇博客

这里只附上下载地址: https://github.com/stefanhafeneger/PushMeBaby

接下来,说说收到推送通知代码方面.

1:申请本App需要接受来自服务商提供推送消息,

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

2:申请发出后,如果成功,委托会自动返回一个设备令牌(toKen),如果失败,将会进入另外一个失败的委托

  1. //远程通知注册成功委托  
  2. - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken  
  3. {  
  4.     NSLog(@"%@",deviceToken);  
  5.     self.viewController.toKenValueTextView.text = [NSString stringWithFormat:@"%@",deviceToken];  
  6.     self.viewController.pushStatusLabel.text = @"已经注册.";  
  7. }  
  8. //远程通知注册失败委托  
  9. -(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error  
  10. {  
  11.     self.viewController.toKenValueTextView.text = [error description];  
  12. }  

3:将设备令牌码提供给服务商,以供推送到具体的手机上面. 如果远程推送消息来了,用户点击了推送消息,或者应用已经处于打开状态,系统都会自动调用以下委托:

  1. //点击某条远程通知时调用的委托 如果界面处于打开状态,那么此委托会直接响应  
  2. -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo  
  3. {  
  4.     NSLog(@"远程通知");  
  5.     [self PMD_uesPushMessage:userInfo];  
  6. }  

4: 第三点里面的介绍的情况是应用程序已经处于运行状态,上面的委托才会被执行,如果应用程序处于未启用状态,此时又需要响应消息,那么需要以下委托处理.

  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
  2. {  
  3.     //这里处理应用程序如果没有启动,但是是通过通知消息打开的,此时可以获取到消息.  
  4.     if (launchOptions != nil) {  
  5.         NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];  
  6.         [self PMD_uesPushMessage:userInfo];  
  7.     }  
  8.     return YES;  
  9. }  

5:清空通知中心已有的推送消息,只需要将指定App 的 Badge 设置为 0即可

  1. [[UIApplication sharedApplication ] setApplicationIconBadgeNumber:0];  

6:主动推送的字符串必须符合如下Json数组的格式,才能正确推送到手机当中.

    @"{

       //自定义参数

       \"userinfo\":

              {

                 \"name\":\"remote notice\"

              },

       //标准写法

       \"aps\":

              {

                 \"alert\":

                           {

                              \"action-loc-key\":\"Open\",//支持多语言

                              \"body\":\"messgae content\"//消息正文

                           },

                 \"badge\":1,//为App 的icon  标记 具体数值

                 \"sound\":\"default\" //播放的音频文件,default 表示系统默认的选择列铃声

             } 

     }";

到这里就差不多结束了.

抱歉!评论已关闭.