博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS:APNS推送主要代码
阅读量:6048 次
发布时间:2019-06-20

本文共 3265 字,大约阅读时间需要 10 分钟。

首先,在AppDelegate.m 中:

1,注册通知

//[objc] view plaincopyprint?在CODE上查看代码片派生到我的代码片- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {      // Override point for customization after application launch.      ViewController *mainCtrl=[[ViewController alloc] init];      self.window.rootViewController=mainCtrl;            //注册通知      if ([UIDevice currentDevice].systemVersion.doubleValue<8.0) {          [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeBadge)];      }      else {          [[UIApplication sharedApplication] registerForRemoteNotifications];          [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge|UIUserNotificationTypeSound|UIUserNotificationTypeAlert categories:nil]];      }            //判断是否由远程消息通知触发应用程序启动      if (launchOptions) {          //获取应用程序消息通知标记数(即小红圈中的数字)          NSInteger badge = [UIApplication sharedApplication].applicationIconBadgeNumber;          if (badge>0) {              //如果应用程序消息通知标记数(即小红圈中的数字)大于0,清除标记。              badge--;              //清除标记。清除小红圈中数字,小红圈中数字为0,小红圈才会消除。              [UIApplication sharedApplication].applicationIconBadgeNumber = badge;              NSDictionary *pushInfo = [launchOptions objectForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"];                            //获取推送详情              NSString *pushString = [NSString stringWithFormat:@"%@",[pushInfo  objectForKey:@"aps"]];              UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"finish Loaunch" message:pushString delegate:nil cancelButtonTitle:@"cancel" otherButtonTitles:nil, nil nil];              [alert show];          }      }            return YES;

2,注册通知后,获取device token

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {      NSString *token = [NSString stringWithFormat:@"%@", deviceToken];      NSLog(@"My token is:%@", token);      //这里应将device token发送到服务器端  }    - (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {      NSString *error_str = [NSString stringWithFormat: @"%@", error];      NSLog(@"Failed to get token, error:%@", error_str);  }

3,接收推送通知

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo  {      [UIApplication sharedApplication].applicationIconBadgeNumber=0;      for (id key in userInfo) {          NSLog(@"key: %@, value: %@", key, [userInfo objectForKey:key]);      }      /* eg.     key: aps, value: {         alert = "\U8fd9\U662f\U4e00\U6761\U6d4b\U8bd5\U4fe1\U606f";         badge = 1;         sound = default;     }      */      UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"remote notification" message:userInfo[@"aps"][@"alert"] delegate:nil cancelButtonTitle:@"cancel" otherButtonTitles:nil, nil nil];      [alert show];  }

注意:app 前台运行时,会调用 remote notification;app后台运行时,点击提醒框,会调用remote notification,点击app 图标,不调用remote notification,没反应;app 没有运行时,点击提醒框,finishLaunching   中,launchOptions 传参,点击app 图标,launchOptions 不传参,不调用remote notification。

转载地址:http://okxex.baihongyu.com/

你可能感兴趣的文章
c# 利用反射获得某个类或者对象的所有属性
查看>>
java基础---->正则表达式
查看>>
win8 开发之旅(4) --五子棋游戏开发 面向对象的分析
查看>>
mfc在控制多显示器的使用方法
查看>>
rsync 精确同步文件用法 (转载)
查看>>
【Flume】HDFSSink源码理解
查看>>
Using Container Service to Build WeChat Applets
查看>>
RGB颜色转换算法C语言实现
查看>>
用GOACCESS分析NGINX日志
查看>>
Creating Skins with SkinSys Ver 1.0
查看>>
《VMware Virtual SAN权威指南》一3.3 VSAN网络配置之VMware标准交换机
查看>>
只为那句承诺-大话Promise
查看>>
IaaS市场大整合:云用户喜忧参半
查看>>
Skype-Type:一款通过声音窃取键盘记录的Keylogger工具
查看>>
思科收购安全云新贵Observable网络 计划打造自己的Stealthwatch平台
查看>>
这份文件说,英特尔真的要放弃死气沉沉的PC业务了
查看>>
德国公司研发太阳能公路 能源利用率可达15%
查看>>
小区拆墙后看视频安防拐点
查看>>
为实战而生,科达正式发布猎鹰系列智能分析系统
查看>>
2016年存储市场10大趋势
查看>>