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 推送通知:本地通知(UILocalNotification)和远程通知(APNs)详解

——本地推送通知推送通知的作用?在App退到后台或者完全退出时,可以使用通知来告诉用户某件事情,比如推送新的聊天消息、新闻等通知对应的效果: 在主屏幕的顶端会出现通知消息 当手机锁屏时出现在锁屏界面,...
  • vbirdbest
  • vbirdbest
  • 2016年10月14日 12:43
  • 3446

iOS本地推送(本地通知)

在iOS8之后,以前的本地推送写法可能会出错,接收不到推送的信息, 如果出现以下信息: 1 Attempting to schedule a local notification 2 with...
  • woaifen3344
  • woaifen3344
  • 2015年03月16日 11:06
  • 53308

iOS APNS 极光推送 点击通知栏跳转应用相应页面

iOS APNS 极光推送 点击通知栏跳转应用相应页面
  • jifaliwo123
  • jifaliwo123
  • 2015年12月23日 10:44
  • 3103

iOS 关于推送点击推送通知的处理

1.如果是应用未启动 则可以通过 - (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(...
  • zhangmengleiblog
  • zhangmengleiblog
  • 2016年09月22日 09:33
  • 551

[iOS 10] 新的通知推送 API

iOS 10 最重要的变化可能就是通知 API 的重构了。本文用一个简单闹钟的例子介绍了 User Notification 的 API 变化和新功能。 《iOS 10 day by day...
  • chelongfei
  • chelongfei
  • 2016年09月26日 09:48
  • 662

iOS-OC-本地推送和取消本地推送服务

1.添加本地推送 // 设置本地通知 + (void)registerLocalNotification:(NSInteger)alertTime alertBody:(NSString *)ale...
  • u014220518
  • u014220518
  • 2016年05月24日 12:07
  • 3527

iOS开发之判断用户是否打开APP通知开关,看我就够了。

1.最近在做app内部的推送开关功能。 这样顾客可以自己定义推送给他的内容,屏蔽不想要的一些烦人推送。  在开发过程中, 如果顾客打开推送开关的时候,也已经向服务器发送指令,进行推送开关同步,给它...
  • zhonggaorong
  • zhonggaorong
  • 2016年05月11日 14:52
  • 17872

iOS AppDelegate 代理详解(启动,打开App,推送,通知)

//App将要启动 - (BOOL)application:(UIApplication *)application willFinishLaunchingWithOptions:(nullable ...
  • Jesse0308
  • Jesse0308
  • 2017年03月15日 15:00
  • 1135

iOS10里的通知与推送

原文 通知和推送是一种东西么? iOS 10通知 推送 图1为通知,图2为推送 也许有些同学现在才恍然大悟,今天我们就聊聊这个通知和推送吧。 什么叫通知...
  • zhangyulin311
  • zhangyulin311
  • 2017年02月06日 09:24
  • 1076

(转)本地通知和远程推送

原博地址:http://blog.csdn.net/vbirdbest/article/details/52813539 ——本地推送通知 推送通知的作用? 在App退到...
  • wxdtan
  • wxdtan
  • 2017年01月06日 16:14
  • 605
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS学习笔记48-iOS本地推送(本地通知)
举报原因:
原因补充:

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