博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
本地消息通知
阅读量:5743 次
发布时间:2019-06-18

本文共 5156 字,大约阅读时间需要 17 分钟。

hot3.png

 AppDelegate.m

#import "AppDelegate.h"#import 
@interface AppDelegate ()
@end@implementation AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //注册本地推送 UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; center.delegate = self; [center requestAuthorizationWithOptions:(UNAuthorizationOptionAlert | UNAuthorizationOptionBadge | UNAuthorizationOptionSound) completionHandler:^(BOOL granted, NSError * _Nullable error) { }]; //获取当前的通知设置 [center getNotificationSettingsWithCompletionHandler:^(UNNotificationSettings * _Nonnull settings) { }]; return YES;}#pragma mark -
- (void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler { completionHandler(UNNotificationPresentationOptionAlert);}- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler { NSString *categoryIdentifier = response.notification.request.content.categoryIdentifier; // UNNotificationCategory if ([categoryIdentifier isEqualToString:@"categoryIdentifier"]) { // UNNotificationAction、UNTextInputNotificationAction if ([response.actionIdentifier isEqualToString:@"cancelAction"]) { } } NSDictionary * userInfo = response.notification.request.content.userInfo; UNNotificationRequest *request = response.notification.request; // 收到推送的请求 UNNotificationContent *content = request.content; // 收到推送的消息内容 if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) { NSLog(@"iOS10 收到远程通知"); } else { // 本地通知 NSLog(@"iOS10 收到本地通知"); } completionHandler();}@end

添加通知

- (void)addLocalNotification{    //创建通知    UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];    content.title = @"通知标题";    content.subtitle = @"通知副标题";    content.body = @"通知内容";    content.badge = @1;//角标数    content.categoryIdentifier = @"categoryIdentifier";      //声音设置 [UNNotificationSound soundNamed:@"sound.mp3"] 通知文件要放到bundle里面    UNNotificationSound *sound = [UNNotificationSound defaultSound];    content.sound = sound;        //添加附件    //maxinum 10M    NSString *imageFile = [[NSBundle mainBundle] pathForResource:@"image" ofType:@"png"];    //maxinum 5M    NSString *audioFile = [[NSBundle mainBundle] pathForResource:@"sound" ofType:@"mp3"];    //maxinum 50M    //NSString *movieFile = [[NSBundle mainBundle] pathForResource:@"movie" ofType:@"mp4"];    UNNotificationAttachment *imageAttachment = [UNNotificationAttachment attachmentWithIdentifier:@"iamgeAttachment" URL:[NSURL fileURLWithPath:imageFile] options:nil error:nil];    UNNotificationAttachment *audioAttachment = [UNNotificationAttachment attachmentWithIdentifier:@"audioAttachment" URL:[NSURL fileURLWithPath:audioFile] options:nil error:nil];    //添加多个只能显示第一个    content.attachments = @[audioAttachment,imageAttachment];         /** 通知触发机制     Trigger 设置本地通知触发条件,它一共有以下几种类型:     UNPushNotificaitonTrigger 推送服务的Trigger,由系统创建     UNTimeIntervalNotificationTrigger 时间触发器,可以设置多长时间以后触发,是否重复。如果设置重复,重复时长要大于60s     UNCalendarNotificationTrigger 日期触发器,可以设置某一日期触发     UNLocationNotificationTrigger 位置触发器,用于到某一范围之后,触发通知。通过CLRegion设定具体范围。     */    UNTimeIntervalNotificationTrigger *trigger = [UNTimeIntervalNotificationTrigger triggerWithTimeInterval:5 repeats:NO];        //创建UNNotificationRequest通知请求对象    NSString *requestIdentifier = @"requestIdentifier";    UNNotificationRequest *request = [UNNotificationRequest requestWithIdentifier:requestIdentifier content:content trigger:trigger];        //将通知加到通知中心    [[UNUserNotificationCenter currentNotificationCenter] addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {            }];    }

取消通知

// 取消通知- (void)cancelLocalNotificaitons {        //获取未展示的通知    [[UNUserNotificationCenter currentNotificationCenter] getPendingNotificationRequestsWithCompletionHandler:^(NSArray
* _Nonnull requests) { [[UNUserNotificationCenter currentNotificationCenter] removePendingNotificationRequestsWithIdentifiers:@[@"requestIdentifier"]]; }]; //获取展示过的通知 [[UNUserNotificationCenter currentNotificationCenter] getDeliveredNotificationsWithCompletionHandler:^(NSArray
* _Nonnull notifications) { [[UNUserNotificationCenter currentNotificationCenter] removeDeliveredNotificationsWithIdentifiers:@[@"requestIdentifier"]]; }]; //移除所有还未展示的通知 //[[UNUserNotificationCenter currentNotificationCenter] removeAllDeliveredNotifications]; //移除所有已经展示过的通知 //[[UNUserNotificationCenter currentNotificationCenter] removeAllPendingNotificationRequests];}

 

转载于:https://my.oschina.net/gwlCode/blog/3002731

你可能感兴趣的文章
JavaScript 中基于 swagger-decorator 的自动实体类构建与 Swagger 接口文档生成
查看>>
js数据结构之栈
查看>>
Elastic Search快速上手(4):细节补充
查看>>
【全栈React】第29天: 持续集成
查看>>
合并两个已排序的链表
查看>>
ArcGIS水文分析实战教程(8)水库库容计算
查看>>
js面向对象浅谈(三)
查看>>
Webpack 的核心开发者 Sean Larkin 入驻 SegmentFault 了
查看>>
现阶段选择ArcMap还是ArcGIS Pro
查看>>
每日一题:五 特别的数字
查看>>
Windows 下用php exec执行git pull遇到的问题及解决方案
查看>>
基于socket.io实现的一对一聊天服务器和客户端
查看>>
CSS进阶——绝对定位元素的宽高是如何定义的
查看>>
Mock.js使用
查看>>
进程的Binder线程池工作过程
查看>>
Unity项目使用静态图片做背景
查看>>
innerHTML、innerText、outerHTML、outerText区别。
查看>>
GitHub 重磅更新:无限私有仓库免费使用
查看>>
C#未来新特性:静态委托和函数指针
查看>>
机器学习研究的七个迷思
查看>>