zoukankan      html  css  js  c++  java
  • iOS本地推送

    说明在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. }  

     

  • 相关阅读:
    kendoui 时间选择框
    vue+webpack+win10搭建项目
    arcgis for javascript 自定义infowindow
    如何将 Microsoft Bot Framework 机器人部署以及网页应用
    STM32Cube_FW_F1_V1.0.0固件库学习(五) Systick
    STM32Cube_FW_F1_V1.0.0固件库学习(四)外部中断 下
    STM32Cube_FW_F1_V1.0.0固件库学习(四)外部中断 中
    STM32Cube_FW_F1_V1.0.0固件库学习(二)工程设置
    STM32Cube_FW_F1_V1.0.0固件库学习(四)中断概念 上
    STM32Cube_FW_F1_V1.0.0固件库学习(三)GPIO LED&KEY
  • 原文地址:https://www.cnblogs.com/hualuoshuijia/p/5623123.html
Copyright © 2011-2022 走看看