iOS本地推送(本地通知)

转载 2015年11月20日 20:53:03

在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 推送通知

  • 2014年08月25日 10:45
  • 1.54MB
  • 下载

IOS推送通知测试环境

  • 2016年02月16日 08:21
  • 196KB
  • 下载

iOS开发 ☞ 推送通知(Push Notification)

推送通知分为两种:本地推送通知(Local Notification) 和 远程推送通知(Remote Notification) 一、本地通知 无需网络连接//iOS8.0 以后,发送本地通...

iOS本地推送(本地通知)

在iOS8之后,以前的本地推送写法可能会出错,接收不到推送的信息, 如果出现以下信息: 1 Attempting to schedule a local notification 2 with...

iOS推送详解(二)收到通知跳到指定页面的处理办法

接着上一篇继续,当接到通知需要的操作 一、APP在前台        实现效果,在前台无论在那个页面都在顶部展示一个横条,显示推送信息,点击时跳到自己处理的页面(10秒不点击自动移除这个横条vie...

iOS开发资源:推送通知相关开源项目--PushSharp、APNS-PHP以及Pyapns等

iOS开发资源:推送通知相关开源项目--PushSharp、APNS-PHP以及Pyapns等 “” 阅读器 PushSharp  (github) PushSharp是一个实现了由...

iOS监听模式系列之推送消息通知

推送通知 和本地通知不同,推送通知是由应用服务提供商发起的,通过苹果的APNs(Apple Push Notification Server)发送到应用客户端。下面是苹果官方关于推送通知的过程示意图:...
  • hbblzjy
  • hbblzjy
  • 2016年06月07日 22:08
  • 2372

ios 本地通知与消息推送

iOS开发中的两种消息通知机制详解 iOS中通知机制又叫消息机制,其包括两类:一类是本地通知;另一类是推送通知,也叫远程通知。两种通知在iOS中的表现一致,可以通过横幅或者弹出提醒两种形式告诉用...

iOS 开发中,如何实现高效的大量(如十万级)推送通知?

iOS 开发中,如何实现高效的大量(如十万级)推送通知? 本問題的場境是,當App 的用戶上升到一定數量如十萬多,并且要作相對實時的廣播式推送通知時,有些同行説須要技巧實現,不然會被Appl...

]IOS开发之----远程推送通知

玩了一年的iPhone了各种App的远程通知接收了不少,每次接收到的时候,就在反思,这丫的怎么实现的!  由于工作方面一直没有接触的机会,所以只好自己主动去做做练习试试了. 实践后发现,一系列的配...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS本地推送(本地通知)
举报原因:
原因补充:

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