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. case in

    #!/bin/bash source /etc/profilesource ~/.bashrc #自己定义$version_number case $version_number in3.0.17) ...

  2. Java 基础 - Object.clone()深拷贝和浅拷贝

    作者:YSOcean 出处:http://www.cnblogs.com/ysocean/ 本文版权归作者所有,欢迎转载,但未经作者同意不能转载,否则保留追究法律责任的权利.   ---------- ...

  3. CSS——溢出文字隐藏

    溢出的文字隐藏 word-break:自动换行 normal 使用浏览器默认的换行规则. break-all 允许在单词内换行. keep-all 只能在半角空格或连字符处换行. 主要处理英文单词 w ...

  4. Orika JavaBean映射工具探秘

    Orika是一个简单.快速的JavaBean拷贝框架,Orika使用字节代码生成来创建具有最小开销的快速映射器. 关于: 作为开发人员,我们必须为业务问题提供解决方案,我们希望利用我们的时间来做真正重 ...

  5. 大杀器Bitset

    其实并不怎么会用,有一次有位学长提到了这个名字,就这么取题目了. 1.BZOJ 3687 简单题 求子集的算术和的异或和 http://www.lydsy.com/JudgeOnline/proble ...

  6. HashMap(常用)方法个人理解

      Hashmap的存值: public static void main(String[] args) { ///*Integer*/map.put("1", 1);//向map ...

  7. linux操作练习题

    linux操作练习题 一.总结 一句话总结: 多练练一下子就会了,很简单的 1.在当前目录下建立文件exam.c,将文件exam.c拷贝到/tmp这个目录下,并改名为 shiyan.c? touch ...

  8. 云-腾讯云-云直播:云直播(LVB)

    ylbtech-云-腾讯云-云直播:云直播(LVB) 云直播(Live Video Broadcasting,LVB)依托腾讯多年的音视频技术平台,以及全球海量加速节点和领先的音视频 AI 技术,为开 ...

  9. 引用第三方 chalk 模块

    第三方模块没有默认引用到我们的电脑中,我们要进行下载 chalk 这个包是为了使输出不再单调,添加文字背景什么的,改变字体颜色什么的, npm install chalk //只需要写文件包名,不需要 ...

  10. day23_1-re模块之转义字符、分组、方法

    #!/usr/bin/env python# -*- coding:utf-8 -*-# ------------------------------------------------------- ...