iOS学习笔记48-iOS本地推送(本地通知)

转载 2015年11月20日 11:42:24

在iOS8之后,以前的本地推送写法可能会出错,接收不到推送的信息,

如果出现以下信息:

<span class="comment" style="color: rgb(153, 153, 136); font-style: italic;">1 Attempting to schedule a local notification
2 with an alert but haven't received permission from the user to display alerts
3 with a sound but haven't received permission from the user to play sounds</span>
说明在IOS8下没有注册,所以需要额外添加对IOS8的注册方法,API中有下面这个方法:

  1. // Registering UIUserNotificationSettings more than once results in previous settings being overwritten.  
  2. - (void)registerUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings NS_AVAILABLE_IOS(8_0);  

这个方法是8.0之后才能使用的,所以需要判断一下系统的版本。

第一步:注册本地通知:

  1. // 设置本地通知  
  2. + (void)registerLocalNotification:(NSInteger)alertTime {  
  3.   UILocalNotification *notification = [[UILocalNotification alloc] init];  
  4.   // 设置触发通知的时间  
  5.   NSDate *fireDate = [NSDate dateWithTimeIntervalSinceNow:alertTime];  
  6.   NSLog(@"fireDate=%@",fireDate);  
  7.     
  8.   notification.fireDate = fireDate;  
  9.   // 时区  
  10.   notification.timeZone = [NSTimeZone defaultTimeZone];  
  11.   // 设置重复的间隔  
  12.   notification.repeatInterval = kCFCalendarUnitSecond;  
  13.     
  14.   // 通知内容  
  15.   notification.alertBody =  @"该起床了...";  
  16.   notification.applicationIconBadgeNumber = 1;  
  17.   // 通知被触发时播放的声音  
  18.   notification.soundName = UILocalNotificationDefaultSoundName;  
  19.   // 通知参数  
  20.   NSDictionary *userDict = [NSDictionary dictionaryWithObject:@"开始学习iOS开发了" forKey:@"key"];  
  21.   notification.userInfo = userDict;  
  22.     
  23.   // ios8后,需要添加这个注册,才能得到授权  
  24.   if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {  
  25.     UIUserNotificationType type =  UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound;  
  26.     UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:type  
  27.                                                                              categories:nil];  
  28.     [[UIApplication sharedApplication] registerUserNotificationSettings:settings];  
  29.     // 通知重复提示的单位,可以是天、周、月  
  30.     notification.repeatInterval = NSCalendarUnitDay;  
  31.   } else {  
  32.     // 通知重复提示的单位,可以是天、周、月  
  33.     notification.repeatInterval = NSDayCalendarUnit;  
  34.   }  
  35.     
  36.   // 执行通知注册  
  37.   [[UIApplication sharedApplication] scheduleLocalNotification:notification];  
  38. }  

第二步:处理通知,这个是在appdelegate中的代理 方法回调

  1. // 本地通知回调函数,当应用程序在前台时调用  
  2. - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {  
  3.   NSLog(@"noti:%@",notification);  
  4.     
  5.   // 这里真实需要处理交互的地方  
  6.   // 获取通知所带的数据  
  7.   NSString *notMess = [notification.userInfo objectForKey:@"key"];  
  8.   UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"本地通知(前台)"  
  9.                                                   message:notMess  
  10.                                                  delegate:nil  
  11.                                         cancelButtonTitle:@"OK"  
  12.                                         otherButtonTitles:nil];  
  13.   [alert show];  
  14.     
  15.   // 更新显示的徽章个数  
  16.   NSInteger badge = [UIApplication sharedApplication].applicationIconBadgeNumber;  
  17.   badge--;  
  18.   badge = badge >= 0 ? badge : 0;  
  19.   [UIApplication sharedApplication].applicationIconBadgeNumber = badge;  
  20.     
  21.   // 在不需要再推送时,可以取消推送  
  22.   [HomeViewController cancelLocalNotificationWithKey:@"key"];  
  23. }  

第三步:在需要的时候取消某个推送

  1. // 取消某个本地推送通知  
  2. + (void)cancelLocalNotificationWithKey:(NSString *)key {  
  3.   // 获取所有本地通知数组  
  4.   NSArray *localNotifications = [UIApplication sharedApplication].scheduledLocalNotifications;  
  5.     
  6.   for (UILocalNotification *notification in localNotifications) {  
  7.     NSDictionary *userInfo = notification.userInfo;  
  8.     if (userInfo) {  
  9.       // 根据设置通知参数时指定的key来获取通知参数  
  10.       NSString *info = userInfo[key];  
  11.         
  12.       // 如果找到需要取消的通知,则取消  
  13.       if (info != nil) {  
  14.         [[UIApplication sharedApplication] cancelLocalNotification:notification];  
  15.         break;  
  16.       }  
  17.     }  
  18.   }  
  19. }  


下载demo:https://github.com/632840804/LocalPush

相关文章推荐

iOS学习笔记22-推送通知

一、推送通知推送通知就是向用户推送一条信息来通知用户某件事件,可以在应用退到后台后,或者关闭后,能够通过推送一条消息通知用户某件事情,比如版本更新等等。推送通知的常用应用场景: 一些任务管理APP,会...

iOS学习笔记48-Swift(八)反射

一、Swift反射所谓反射就是可以动态获取类型、成员信息,在运行时可以调用方法、属性等行为的特性。 在使用OC开发时很少强调其反射概念,因为OC的Runtime要比其他语言中的反射强大的多。不过在Sw...

ios 推送通知

  • 2014-08-25 10:45
  • 1.54MB
  • 下载

Cocos2d-X 学习笔记 13 cocos2dx ios 消息推送

前言 使用推送消息,可提醒用户,召回玩家。延长游戏的寿命和收益!下面我们就一起来学习,cocos2d-x iOS集成push。   收到push消息:      ...

IOS推送通知测试环境

  • 2016-02-16 08:21
  • 196KB
  • 下载

iOS学习笔记21-推送证书与秘钥申请

温馨提示:这节的内容以图片为主,大家最好能在有WiFi下观看,不然的话烧流量就不关我的事了。O(∩_∩)O~。一、iOS证书iOS常用的证书包括开发证书和发布证书,无论是真机调试还是最终发布应用到Ap...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)