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

    在多数移动应用中任何时候都只能有一个应用程序处于活跃状态,如果其他应用此刻发生了一些用户感兴趣的那么通过通知机制就可以告诉用户此时发生的事情。 iOS中通知机制又叫消息机制,其包括两类:一类是本地通知;另一类是推送通知,也叫远程通知。两种通知在iOS中的表现一致,可以通过横幅或者弹出提醒 两种形式告诉用户,并且点击通知可以会打开应用程序,但是实现原理却完全不同。今天就和大家一块去看一下如何在iOS中实现这两种机制,并且在文章后面会 补充通知中心的内容避免初学者对两种概念的混淆。

    简单些了一个关于本地推送通知的demo,可以根据这个进行参考,这个方法是8.0之后才能使用的,所以需要判断一下系统的版本。

    1.注册本地通知方法

    + (void)registerLocalNotification:(NSInteger)alertTime {
     
       UILocalNotification *notification = [[UILocalNotification alloc] init];
      // 设置触发通知的时间
      NSDate *fireDate = [NSDate dateWithTimeIntervalSinceNow:alertTime];
      NSLog(@"fireDate=%@",fireDate);
      
      notification.fireDate = fireDate;
      // 时区 激发时间是否根据时区改变而改变
      notification.timeZone = [NSTimeZone defaultTimeZone];
      // 设置重复的间隔
      notification.repeatInterval = kCFCalendarUnitSecond;
      
      // 通知内容 后台运行时提示的文字
      notification.alertBody =  @"该起床了...";
      notification.applicationIconBadgeNumber = 1;
      // 通知被触发时播放的声音
      notification.soundName = UILocalNotificationDefaultSoundName;
      // 通知参数
      NSDictionary *userDict = [NSDictionary dictionaryWithObject:@"开始学习iOS开发了" forKey:@"key"];
      notification.userInfo = userDict;
      
      // ios8后,需要添加这个注册,才能得到授权
      if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {
        UIUserNotificationType type =  UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound;
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:type
                                                                                 categories:nil];
        [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
        // 通知重复提示的单位,可以是天、周、月
        notification.repeatInterval = NSCalendarUnitDay;
      } else {
        // 通知重复提示的单位,可以是天、周、月
        notification.repeatInterval = NSDayCalendarUnit;
      }
      
      // 执行通知注册
      [[UIApplication sharedApplication] scheduleLocalNotification:notification];
    }

    取消本地通知的例子:

    // 取消某个本地推送通知
    + (void)cancelLocalNotificationWithKey:(NSString *)key {
      // 获取所有本地通知数组
      NSArray *localNotifications = [UIApplication sharedApplication].scheduledLocalNotifications;
      
      for (UILocalNotification *notification in localNotifications) {
        NSDictionary *userInfo = notification.userInfo;
        if (userInfo) {
          // 根据设置通知参数时指定的key来获取通知参数
          NSString *info = userInfo[key];
          
          // 如果找到需要取消的通知,则取消
          if (info != nil) {
            [[UIApplication sharedApplication] cancelLocalNotification:notification];
            break;
          }
        }
      }
    }

    通知回调的方法:

    // 本地通知回调函数,当应用程序在前台时调用
    - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
      NSLog(@"noti:%@",notification);
      
      // 这里真实需要处理交互的地方
      // 获取通知所带的数据
      NSString *notMess = [notification.userInfo objectForKey:@"key"];
      UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"本地通知...."
                                                      message:notMess
                                                     delegate:nil
                                            cancelButtonTitle:@"OK"
                                            otherButtonTitles:nil];
      [alert show];
      
      // 更新显示的徽章个数
      NSInteger badge = [UIApplication sharedApplication].applicationIconBadgeNumber;
      badge--;
      badge = badge >= 0 ? badge : 0;
      [UIApplication sharedApplication].applicationIconBadgeNumber = badge;
      
      // 推送过一次,不需要显示推送时,可以取消推送,将添加的推送清除
      [HomeViewController cancelLocalNotificationWithKey:@"key"];
    }
  • 相关阅读:
    js 将图片连接转换称base64格式
    mysql性能优化-慢查询分析、优化索引和配置
    MySQL集群(三)mysql-proxy搭建负载均衡与读写分离
    MySQL集群(二)之主主复制
    MySQL集群(一)之主从复制
    JavaSE(八)之Map总结
    JDBC(二)之JDBC处理CLOB和BLOB及事务与数据库元数据获取
    JavaSE(八)之Collection总结
    JavaSE集合(八)之Map
    JavaSE(八)之集合练习一
  • 原文地址:https://www.cnblogs.com/xiangrikui/p/5280901.html
Copyright © 2011-2022 走看看