iOS开发本地推送
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开发本地推送的更多相关文章
- iOS开发本地推送(iOS10)UNUserNotificationCenter
1.简介 iOS10之后苹果对推送进行了封装,UNUserNotificationCenter就这样产生了.简单介绍本地推送的使用UserNotifications官方文档说明! 2.简单使用UNUs ...
- iOS开发 iOS10推送必看
iOS10更新之后,推送也是做了一些小小的修改,下面我就给大家仔细说说.希望看完我的这篇文章,对大家有所帮助. 一.简单入门篇---看完就可以简单适配完了 相对简单的推送证书以及环境的问题,我就不在这 ...
- iOS的本地推送删除不了解决方法
最近在研究苹果推送,当测试本地推送的时候,发现一个问题,就是一旦你添加了一个本地推动的通知,当你修改代码,删除应用,当你再次运行app,它还是会在横幅上面弹出推送,尼玛怎么搞都删除不了,近乎崩溃了,开 ...
- iOS关于本地推送
不多说 直接上代码 NSDate *now = [NSDate date]; UILocalNotification *reminderNotification = [[UILocalNoti ...
- iOS开发 iOS10推送必看(基础篇)
iOS10更新之后,推送也是做了一些小小的修改,下面我就给大家仔细说说.希望看完我的这篇文章,对大家有所帮助. 原文链接 一.简单入门篇---看完就可以简单适配完了相对简单的推送证书以及环境的 ...
- iOS开发 iOS10推送必看(基础篇)-转
iOS10更新之后,推送也是做了一些小小的修改,下面我就给大家仔细说说.希望看完我的这篇文章,对大家有所帮助. 一.简单入门篇---看完就可以简单适配完了 相对简单的推送证书以及环境的问题,我就不在这 ...
- iOS开发,推送消息 steps
概述:推送过程简介 一.App启动过程中,使用UIApplication::registerForRemoteNotificationTypes函数与苹果的APNS服务器通信,发出注册远程推送的申请. ...
- iOS开发——消息推送跳转
项目开发用集成是极光推送JPush 这里主要是消息推送过来处理对应界面跳转 同时看到两篇写的不错的相关博客分享一下: http://www.jianshu.com/ ...
- iOS开发——极光推送
1.到极光官网 https://www.jpush.cn/ 下载极光推送SDK. 具体如何集成最好参考官网的文档,以及一些失败的原因.文档非常详细,我也是参考集成的. 2.到极光推送官网注册自己的应用 ...
随机推荐
- USACO2005 Cow Acrobats /// 前缀和 oj23402
题目大意: N (1 ≤ N ≤ 50,000)头牛叠罗汉 找到最优排序使所有牛的风险值总和最小 每头牛重量 (1 ≤ Wi ≤ 10,000) 力量 (1 ≤ Si ≤ 1,000,000,000) ...
- dl,dt,dd标签 VS 传统table实现数据列表
过去有很多网页设计师喜欢将他们的网页效果图用table布局实现成网页,但是这样做会遇到一个比较麻烦的问题就是,后期调试和维护会相当的困难.现在,越来越多的前端开发er们开始使用xHTML+CSS替代最 ...
- java OOP第二章_封装
一. 封装: 属性通过private访问修饰符将其设置为私有的,只有当前类中可以访问,同时提供通过public访问修饰符的公共方法可以给任何类中访问. 通常针对属性提供公共的setter方法进行赋值, ...
- GetOpenFilename的基本用法
GetOpenFilename '一.概述基本语法 Application.GetOpenFilename 方法 显示标准的“打开”对话框,并获取用户文件名,而不必真正打开任何文件,只是把打开文件名称 ...
- 查看网站pv
PV(page view),即页面浏览量,或点击量:通常是衡量一个网络新闻频道或网站甚至一条网络新闻的主要指标.简单来解释PV,那就是一个访问者在24小时(0点到24点)内到底看了你网站多少个页面.这 ...
- Leetcode208. Implement Trie (Prefix Tree)实现Trie(前缀树)
实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作. 示例: Trie trie = new Trie(); trie.insert(" ...
- animation,transition,transform小练习
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Tool Zip 破解
//侵权请联系我进行删除 email:YZFHKM@163.com 0x00 fcrackzip简单介绍 fcrackzip是一款专门破解zip类型压缩文件密码的工具,工具小巧方便.破解速度快,能使用 ...
- 安装rancher以及使用rancher倒入kubernetes集群和添加及管理集群
1.docker安装rancher [root@rancher ~]# docker run -d --name rancher --restart=unless-stopped -p : -p : ...
- Super OJ 序列计数
题意: 给出序列 a1,a2,--an(0≤ai≤109),求三元组(ai,aj,ak)(1≤i<j<k≤n)满足 ai<aj>ak 的数量. 分析: 开两个\(BIT\),分 ...