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. <面试题>学习面试

    1.代码中要修改不可变数据会出现什么问题? 抛出什么异常? 代码不会正常运行,抛出 TypeError 异常. # 比如修改元祖.会报错 TypeError: 'tuple' object does ...

  2. 【POJ】2253 Frogger

    = =.请用C++提交.. 如果有朋友能告诉我G++和C++交题什么机制..我感激不尽.G++杀我. 题目链接:http://poj.org/problem?id=2253 题意:青蛙A要去找B约会, ...

  3. Mybatis使用Dao代码方式CURD

    Mybatis 使用Dao代码方式进行增.删.改.查. 1.Maven的pom.xml <project xmlns="http://maven.apache.org/POM/4.0. ...

  4. Apache Spark 2.2.0 中文文档 - Spark Streaming 编程指南

    Spark Streaming 编程指南 概述 一个入门示例 基础概念 依赖 初始化 StreamingContext Discretized Streams (DStreams)(离散化流) Inp ...

  5. JS按比例缩放图片

    1.JS代码 <script type="text/javascript" language="javascript"> var flag = fa ...

  6. 利用 Dockerfile 定制镜像

    镜像的定制实际上就是定制每一层所添加的配置.文件. 如果我们可以把每一层修改.安装.构建.操作的命令都写入一个脚本,用这个脚本来构建.定制镜像, 那么之前提及的无法重复的问题.镜像构建透明性的问题.体 ...

  7. 校园商铺-2Logback配置与使用-3验证配置

    1. 验证logback配置 1.1. 启动tomcat,得到CATALINA_BASE地址: 1.2 访问接口,查看日志 浏览器打开http://localhost:18080/o2o/supera ...

  8. Windows ipconfig

    用法:    ipconfig [/allcompartments] [/? | /all |                                 /renew [adapter] | / ...

  9. Perl 环境安装

    Perl 环境安装 在我们开始学习 Perl 语言前,我们需要先安装 Perl 的执行环境. Perl 可以在以下平台下运行: Unix (Solaris, Linux, FreeBSD, AIX, ...

  10. Delphi 查找标题已知的窗口句柄,遍历窗口控件句柄

    有了回调函数的概念及上面的例子,我们可以继续了.其实想要找到一个标题已知的窗口句柄,用一个API函数就可以了:FindWindow.其函数原形是:function FindWindow(lpClass ...