美文网首页
iOS 发送本地推送通知

iOS 发送本地推送通知

作者: 摘心 | 来源:发表于2019-03-20 13:16 被阅读0次

App在后台的情况希望通知用户看到信息时使用本地推送通知实现。
1.导入系统框架

#import <UserNotifications/UserNotifications.h>

2.注册本地通知样式

UIApplication* application = [UIApplication sharedApplication];
    if ([application currentUserNotificationSettings]) {
      UIUserNotificationSettings* setting = [UIUserNotificationSettings
          settingsForTypes:UIUserNotificationTypeBadge |
                           UIUserNotificationTypeSound |
                           UIUserNotificationTypeAlert
                categories:nil];
      [application registerUserNotificationSettings:setting];
    }

3.清除之前注册通知

[application cancelAllLocalNotifications];

如果不清除历史通知,可能会收到之前的全部通知。
4.设置本次通知内容

UILocalNotification* localNotif = [[UILocalNotification alloc] init];
// 发送时间
    localNotif.fireDate =[NSDate dateWithTimeIntervalSinceNow:0];
// 在通知中心要展示的通知内容
    localNotif.alertBody = @"本地推送通知";
// 通知携带的内容信息,开发者自行处理
    localNotif.userInfo = @{@"userid":@(123), @"message":@"通知"};
// 自定义同事提示声音,必须是.caf格式音频文件
    localNotif.soundName = @"voip_call.caf";
// 本次通知的事件标识
    localNotif.alertAction = @"notificationKey";
    [application scheduleLocalNotification:localNotif];

以上方法在 iOS10之后被弃用,iOS 开始使用UNUserNotificationCenter
具体逻辑大概类似。UNUserNotificationCenter的内容更加丰富,可以通过它自行定义通知显示样式,功能更加强大。

UNUserNotificationCenter* center =
      [UNUserNotificationCenter currentNotificationCenter];
  UNMutableNotificationContent* content =
      [[UNMutableNotificationContent alloc] init];
  content.body =  @"本地推送通知";
  UNNotificationSound* sound =
      [UNNotificationSound soundNamed:@"voip_call.caf"];
  content.sound = sound;
  content.userInfo = @{@"userid":@(123), @"message":@"通知"};
  UNTimeIntervalNotificationTrigger* tirgger =
      [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:0.1
                                                         repeats:NO];
  UNNotificationRequest* request =
      [UNNotificationRequest requestWithIdentifier:@"notificationKey"
                                           content:content
                                           trigger:tirgger];

  [center addNotificationRequest:request
           withCompletionHandler:^(NSError* _Nullable error) {
             NSLog(@"%@本地推送 :( 报错 %@", @"notificationKey", error);
           }];

最后接收本地推送通知

- (void)application:(UIApplication*)application
    didReceiveLocalNotification:(UILocalNotification*)notification {
  if (notification &&
      [notification.alertAction isEqualToString:@"notificationKey"]) {
  }
}

iOS10之后
// 点击推送消息后回调

- (void)userNotificationCenter:(UNUserNotificationCenter*)center
    didReceiveNotificationResponse:(UNNotificationResponse*)response
             withCompletionHandler:(void (^)(void))completionHandler {
  NSLog(@"center content : %@", response.notification.request.content.userInfo);
  if (response && [response.notification.request.identifier
                      isEqualToString:@"notificationKey"]) {
  }
}

有时候需要删除通知中心的通知,类似微信撤回消息时会撤回通知

- (void)deleteLocalNotificationForUserId:(int)userId {
  if ([[UIDevice currentDevice].systemVersion doubleValue] >= 10.0) {
    UNUserNotificationCenter* center =
        [UNUserNotificationCenter currentNotificationCenter];
    [center getPendingNotificationRequestsWithCompletionHandler:^(
                NSArray<UNNotificationRequest*>* _Nonnull requests) {
      for (UNNotificationRequest* request in requests) {
        if ([request.identifier isEqualToString:ISAVChatNotification]) {
          NSDictionary* userInfo = request.content.userInfo;
          if (userInfo) {
          }
        }
      }
    }];

    [center
        removeDeliveredNotificationsWithIdentifiers:@[ @"notificationKey" ]];
  } else {
    UIApplication* application = [UIApplication sharedApplication];
    NSArray* localNotifications = [application scheduledLocalNotifications];
    for (UILocalNotification* local in localNotifications) {
      if ([local.alertAction isEqualToString:ISAVChatNotification]) {
        NSDictionary* userInfo = local.userInfo;
        if (userInfo) {
          if (userId == [[friendInfo objectForKey:@"userId"] intValue]) {
            [application cancelLocalNotification:local];
            NSInteger num = [application applicationIconBadgeNumber];
            if (num > 1) {
              [application setApplicationIconBadgeNumber:num - 1];
            } else {
              [application setApplicationIconBadgeNumber:0];
            }
          }
        }
      }
    }
  }
}

mp3转 caf
第一步:获取MP3文件路径,为了方便测试,这里把文件放到了桌面上,地址为 :/Users/Mina/Desktop/1.mp3

第二步:设置CAF文件的输出路径,这里也放到了桌面上,路径为:/Users/Mina/Desktop/2.caf

第三步:打开终端输入命令:
afconvert /Users/Mina/Desktop/1.mp3 /Users/Mina/Desktop/2.caf -d ima4 -f caff -v
(注:不要忘记空格)

相关文章

  • iOS 发送本地推送通知

    App在后台的情况希望通知用户看到信息时使用本地推送通知实现。1.导入系统框架 2.注册本地通知样式 3.清除之前...

  • 推送通知

    推送通知的分类 本地推送通知本地推送通知可以理解为不联网,即使没有网络也可以推送通知通知发送方:开发人员负责在AP...

  • iOS 通知机制总结

    iOS中提供了2种推送通知 本地推送通知(Local Notification) 远程推送通知(Remote No...

  • iOS-消息推送

    iOS 消息推送包括远程推送通知(Remote Notification)和本地推送通知(Local Notifi...

  • ios10前后推送基本使用

    一、推送的分类 本地推送通知“本地”可以理解为”不联网”;即使没有网络情况下,也可以推送通知消息通知发送方: 开发...

  • iOS 推送通知及通知扩展

    级别: ★★☆☆☆标签:「iOS 本地推送」「iOS 远程推送」「iOS通知扩展」作者: dac_1033审校: ...

  • 26 - 推送

    iOS中提供了2种推送通知: 本地推送通知(Local Notification) 远程推送通知(Remote N...

  • iOS推送通知概览

    iOS推送通知概览 一、响应推送(本地通知 和 远程通知 都合适) iOS 10 以前 1. UIUserNoti...

  • iOS本地通知和远程推送

    iOS 本地通知和远程推送 推送通知的应用,可以推送最新的消息给用户,获得更多的关注。推送分为本地推送和远程推送两...

  • iOS 本地推送通知

    本地推送通知 对本地通知的数量限制,iOS最多允许最近本地通知数量是64个,超过限制的本地通知将被iOS忽略。 a...

网友评论

      本文标题:iOS 发送本地推送通知

      本文链接:https://www.haomeiwen.com/subject/tugamqtx.html