1、简介

  本地通知是由本地应用触发的,它是基于时间行为的一种通知形式,例如闹钟定时、待办事项提醒,又或者一个应用在一段时候后不使用通常会提示用户使用此应用等都是本地通知。

2、创建UILocalNotification

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch. UILocalNotification *localNotifi = [UILocalNotification new];
localNotifi.fireDate = [NSDate dateWithTimeIntervalSinceNow:];//发送时间
localNotifi.alertBody = @"这是一条本地推送";//设置提醒内容
localNotifi.soundName = UILocalNotificationDefaultSoundName;//设置推送声音
localNotifi.applicationIconBadgeNumber = ;//设置app右上角图标标记
// localNotifi.hasAction = YES;//锁屏时是否显示内容,默认yes 设置提醒按钮文字
// localNotifi.alertAction = @"好的";//按钮文字
localNotifi.timeZone = [NSTimeZone defaultTimeZone];//设置时区 [NSTimeZone defaultTimeZone],跟随手机的时区
localNotifi.repeatInterval = NSCalendarUnitMinute;//设置重复每隔多久发送一次 最小单位分钟 。0代表不重复,此属性设置了, 那么调度池不会用完释放!需要手动删除通知对象
localNotifi.repeatCalendar = [NSCalendar calendarWithIdentifier:@"NSCalendarIdentifierChinese"];//设置依赖的日历历法,默认就是跟随系统走,历法不一样每月重复间隔时间也不一样(如农历是30天)
if (@available(iOS 8.2, *)) {
localNotifi.alertTitle = @"本地推送呵呵";
} else {
// Fallback on earlier versions
}//设置弹出框标题
UIMutableUserNotificationCategory *category = [UIMutableUserNotificationCategory new];//使用可变子类
category.identifier = @"分类";//设置标识符,注意与发送通知设置的category标识符一致
// 设置前台按钮,点击后能使程序回到前台的叫做前台按钮
UIMutableUserNotificationAction *actionLeft = [UIMutableUserNotificationAction new];
actionLeft.identifier = @"left";
actionLeft.activationMode = UIUserNotificationActivationModeForeground;
actionLeft.title = @"前台按钮";
// 设置后台按钮,点击后程序还在后台执行,如QQ的消息
UIMutableUserNotificationAction *actionRight = [UIMutableUserNotificationAction new];
actionRight.identifier = @"right";
actionRight.activationMode = UIUserNotificationActivationModeBackground;
actionRight.title = @"后台按钮";
[category setActions:@[actionLeft,actionRight] forContext:UIUserNotificationActionContextDefault];
NSSet *catogorySet = [NSSet setWithObject:category];
localNotifi.category = @"分类";
// 在哪个区域发送通知, 进入这个区域就发送这个通知,可以进来调一次,出去调一次
// @property(nullable, nonatomic,copy) CLRegion *region NS_AVAILABLE_IOS(8_0);
// @property(nonatomic,assign) BOOL regionTriggersOnce NS_AVAILABLE_IOS(8_0);区域是否只检测一次
// @property(nullable, nonatomic,copy) NSString *alertLaunchImage;设置启动图片
// @property(nullable, nonatomic,copy) NSDictionary *userInfo;推送携带参数
// @property (nullable, nonatomic, copy) NSString *category NS_AVAILABLE_IOS(8_0);添加下拉快速回复功能 if (iOS8_OR_LATER) {
// UIUserNotificationType 枚举:
// UIUserNotificationTypeNone = 0,
// UIUserNotificationTypeBadge = 1 << 0, //图标标记
// UIUserNotificationTypeSound = 1 << 1, //声音
// UIUserNotificationTypeAlert = 1 << 2, //提醒
//
// categories:用于添加下拉快速回复功能
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge|UIUserNotificationTypeSound|UIUserNotificationTypeAlert categories:catogorySet];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
} // 调度本地推送通知(调度后在特定时间fireData发出)
// [[UIApplication sharedApplication] scheduleLocalNotification:localNotifi]; // 立即发送本地通知
[[UIApplication sharedApplication] presentLocalNotificationNow:localNotifi]; // 处理退出后通知的点击,程序启动后获取通知对象,如果是首次启动还没有发送通知,那第一次通知对象为空,没必要去处理通知
if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) {
UILocalNotification *localNotifi = launchOptions[UIApplicationLaunchOptionsLocalNotificationKey];
[self changeLocalNotifi:localNotifi];
} return YES;
}

3、移除推送通知

- (void)deleteLocalNotifi{
// 删除所有通知
[[UIApplication sharedApplication] cancelAllLocalNotifications]; // 删除指定通知(发出过期的推送不在此数组)
NSArray *notifiArr = [[UIApplication sharedApplication] scheduledLocalNotifications];
for (UILocalNotification *localNoti in notifiArr) {
//根据UserInfo的值,来查看这个是否是你想要删除的通知
if (localNoti.userInfo) {
[[UIApplication sharedApplication] cancelLocalNotification:localNoti];
}
}
}

4、就收到推送处理方法

//处理通知
- (void)changeLocalNotifi:(UILocalNotification *)localNotifi{
// 如果在前台直接返回
if ([UIApplication sharedApplication].applicationState == UIApplicationStateActive) {
return;
}
// 获取通知信息
// localNotifi.userInfo
}
//接收到本地通知后调用 程序前台或后台的时候才有用,退出无法接收到消息
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{
[self changeLocalNotifi:notification];
}

5、前台和后台按钮处理方法

//前台和后台按钮处理方法
- (void)application:(UIApplication *)application handleActionWithIdentifier:(NSString *)identifier forLocalNotification:(UILocalNotification *)notification completionHandler:(void (^)(void))completionHandler{
// 我们可以在这里获取标识符,根据标识符进行判断是前台按钮还是后台按钮还是神马按钮,进行相关逻辑处理(如回复消息)
NSLog(@"identifier : %@",identifier);
// 一旦接受必须调用的方法(告诉系统什么时候结束,系统自己对内部进行资源调配)
completionHandler();
}

6、远程推送

  https://www.jianshu.com/p/25e267037f6e

iOS开发本地推送的更多相关文章

  1. iOS开发本地推送(iOS10)UNUserNotificationCenter

    1.简介 iOS10之后苹果对推送进行了封装,UNUserNotificationCenter就这样产生了.简单介绍本地推送的使用UserNotifications官方文档说明! 2.简单使用UNUs ...

  2. iOS开发 iOS10推送必看

    iOS10更新之后,推送也是做了一些小小的修改,下面我就给大家仔细说说.希望看完我的这篇文章,对大家有所帮助. 一.简单入门篇---看完就可以简单适配完了 相对简单的推送证书以及环境的问题,我就不在这 ...

  3. iOS的本地推送删除不了解决方法

    最近在研究苹果推送,当测试本地推送的时候,发现一个问题,就是一旦你添加了一个本地推动的通知,当你修改代码,删除应用,当你再次运行app,它还是会在横幅上面弹出推送,尼玛怎么搞都删除不了,近乎崩溃了,开 ...

  4. iOS关于本地推送

      不多说 直接上代码 
 NSDate *now = [NSDate date]; UILocalNotification *reminderNotification = [[UILocalNoti ...

  5. iOS开发 iOS10推送必看(基础篇)

    iOS10更新之后,推送也是做了一些小小的修改,下面我就给大家仔细说说.希望看完我的这篇文章,对大家有所帮助.   原文链接   一.简单入门篇---看完就可以简单适配完了相对简单的推送证书以及环境的 ...

  6. iOS开发 iOS10推送必看(基础篇)-转

    iOS10更新之后,推送也是做了一些小小的修改,下面我就给大家仔细说说.希望看完我的这篇文章,对大家有所帮助. 一.简单入门篇---看完就可以简单适配完了 相对简单的推送证书以及环境的问题,我就不在这 ...

  7. iOS开发,推送消息 steps

    概述:推送过程简介 一.App启动过程中,使用UIApplication::registerForRemoteNotificationTypes函数与苹果的APNS服务器通信,发出注册远程推送的申请. ...

  8. iOS开发——消息推送跳转

    项目开发用集成是极光推送JPush     这里主要是消息推送过来处理对应界面跳转          同时看到两篇写的不错的相关博客分享一下:      http://www.jianshu.com/ ...

  9. iOS开发——极光推送

    1.到极光官网 https://www.jpush.cn/ 下载极光推送SDK. 具体如何集成最好参考官网的文档,以及一些失败的原因.文档非常详细,我也是参考集成的. 2.到极光推送官网注册自己的应用 ...

随机推荐

  1. python学习4—数据结构之列表、元组与字典

    python学习4—数据结构之列表.元组与字典 列表(list)深灰魔法 1. 连续索引 li = [1,1,[1,["asdsa",4]]] li[2][1][1][0] 2. ...

  2. 005-Java运算符

    1.  求余符号,余数的符号是和被除数保持一致的. 2. 自增自减运算符不改变变量的数据类型. 逻辑运算符 逻辑与:& 逻辑或:| 逻辑非:! 短路与:&& 短路或:|| 逻辑 ...

  3. Linux 实用指令(9)--进程管理

    目录 进程管理 1 进程的基本介绍 2 显示系统执行的进程 2.1 说明: 2.2 ps指令详解 2.3 应用实例 3 终止进程kill和killall 3.1 介绍 3.2 基本语法 3.3 常用选 ...

  4. ionic js 侧栏菜单 把主要内容区域从一边拖动到另一边,来让左侧或右侧的侧栏菜单进行切换

    ionic 侧栏菜单 一个容器元素包含侧边菜单和主要内容.通过把主要内容区域从一边拖动到另一边,来让左侧或右侧的侧栏菜单进行切换. 效果图如下所示: 用法 要使用侧栏菜单,添加一个父元素<ion ...

  5. js原型继承四步曲及原型继承图

    一:js原型继承四步曲 //js模拟类的创建以及继承 //动物(Animal),有头这个属性,eat方法 //名字这个属性 //猫有名字属性,继承Animal,抓老鼠方法 //第一步:创建父类 fun ...

  6. Jquery操作的是内存数据,H5 dataset操作的是dom属性

    Jquery操作的是内存数据,H5操作的是dom属性

  7. Android开发 解决Installation failed due to XXX 问题

    报错信息 Android studio 安装app的时候以下报错 Installation did not succeed. The application could not be installe ...

  8. ctrl+shift+k取消

    因为typora软件和搜狗输入法软件的快捷键重合了,ctrl+shift+k在typora中是代码块的快捷键,而在搜狗输入法中是软键盘快捷键,显然软键盘不重要. 搜狗输入法的ctrl+shift+k取 ...

  9. sql语句之分组

    对聚合函数的结果进行筛选用having,不能用where

  10. POJ-1502-MPI Maelstrom-dijkstra+输入处理

    BIT has recently taken delivery of their new supercomputer, a 32 processor Apollo Odyssey distribute ...