本地推送的实现代码

第一步:设置本地通知

+ (void)registerLocalNotification:(NSInteger)alertTime;

+ (void)cancelLocalNotificationWithKey:(NSString *)key;



第二步:实现通知

// 设置本地通知

+ (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)viewDidLoad {

  [super viewDidLoad];

  

  UIButton *notBtn = [UIButton buttonWithType:UIButtonTypeRoundedRect];

  notBtn.frame = CGRectMake(20, 100, 320-40, 40);

  [notBtn setBackgroundColor:[UIColor lightGrayColor]];

  [notBtn setTitle:@"开讲啦" forState:UIControlStateNormal];

  [notBtn addTarget:self action:@selector(notClick:) forControlEvents:UIControlEventTouchUpInside];

  [self.view addSubview:notBtn];

}


- (void)notClick:(id)sender {

  NSLog(@"notBtn:%s",__FUNCTION__);

  

  [HomeViewController registerLocalNotification:4];// 4秒后

}




第四步:设置代理监听本地通知


// 本地通知回调函数,当应用程序在前台时调用

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {

  NSLog(@"noti:%@",notification);

  

  // 这里真实需要处理交互的地方

  // 获取通知所带的数据

  NSString *notMess = [notification.userInfo objectForKey:@"key"];

  UIAlertView *alert = [[UIAlertView allocinitWithTitle:@"本地通知(前台)"

                                                  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"];

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值