推送通知

● 注意:这里说的推送通知跟NSNotification有所区别
• NSNotification是抽象的,不可见的
• 推送通知是可见的(能用肉眼看到)

● iOS中提供了2种推送通知

  • ●  本地推送通知(Local Notification)

  • ●  远程推送通知(Remote Notification)

推送通知的作用

● 推送通知的作用

● 可以让不在前台运行的app,告知用户app内部发生了什么事情

推送通知的呈现效果总结

● 总结一下,推送通知有5种不同的呈现效果
● 在屏幕顶部显示一块横幅(显示具体内容)
● 在屏幕中间弹出一个UIAlertView(显示具体内容)
● 在锁屏界面显示一块横幅(锁屏状态下,显示具体内容)
● 更新app图标的数字(说明新内容的数量)
● 播放音效(提醒作用)

推送通知的使用细节

● 发出推送通知时,如果程序正运行在前台,那么推送通知就不会被呈现出来

● 点击推送通知后,默认会自动打开发出推送通知的app
● 不管app打开还是关闭,推送通知都能如期发出

本地推送通知

● 什么是本地推送通知
● 顾名思义,就是不需要联网就能发出的推送通知(不需要服务器的支持)

● 本地推送通知的使用场景
● 常用来定时提醒用户完成一些任务,比如
• 清理垃圾、记账、买衣服、看电影、玩游戏

如何发出本地推送通知

● 创建本地推送通知对象
UILocalNotification *ln = [[UILocalNotification alloc] init];

● 设置本地推送通知属性
● 推送通知的触发时间(何时发出推送通知)

@property(nonatomic,copy) NSDate *fireDate;
● 推送通知的具体内容
@property(nonatomic,copy) NSString *alertBody;
● 锁屏界面显示的小标题(完整小标题:“滑动来” + alertAction)

@property(nonatomic,copy) NSString *alertAction;
● 音效文件名
@property(nonatomic,copy) NSString *soundName;
● app图标数字
@property(nonatomic) NSInteger applicationIconBadgeNumber;

● 调度本地推送通知(调度完毕后,推送通知会在特地时间fireDate发出)
[[UIApplication sharedApplication] scheduleLocalNotification:ln];

● 获得被调度的所有本地推送通知(等待发出的通知)

@property(nonatomic,copy) NSArray *scheduledLocalNotifications;

(已经发出且过期的推送通知就算调度结束,会自动从这个数组中移除)

● 取消调度本地推送通知
- (void)cancelLocalNotification:(UILocalNotification *)notification;

- (void)cancelAllLocalNotifications;

● 立即发出本地推送通知(使用价值:app在后台运行的时候)

- (void)presentLocalNotificationNow:(UILocalNotification *)notification;

本地推送通知的其他属性

● 每隔多久重复发一次推送通知
@property(nonatomic) NSCalendarUnit repeatInterval;

● 点击推送通知打开app时显示的启动图片

@property(nonatomic,copy) NSString *alertLaunchImage;

● 附加的额外信息
@property(nonatomic,copy) NSDictionary *userInfo;

● 时区
@property(nonatomic,copy) NSTimeZone *timeZone;

(一般设置为[NSTimeZone defaultTimeZone] ,跟随手机的时区)

点击本地推送通知

● 当用户点击本地推送通知,会自动打开app,这里有2种情况

● app并没有关闭,一直隐藏在后台

• 让app进入前台,并会调用AppDelegate的下面方法(并非重新启动app)

- (void)application:(UIApplication *)application
didReceiveLocalNotification:(UILocalNotification *)notification;

● app已经被关闭(进程已死)
• 启动app,启动完毕会调用AppDelegate的下面方法

- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

● launchOptions参数通过UIApplicationLaunchOptionsLocalNotificationKey 取出本地推送通知对象

实例:

#import "HMAppDelegate.h"
#import "HMViewController.h" @interface HMAppDelegate()
@property (nonatomic, weak) UILabel *label;
@end @implementation HMAppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
// NSLog(@"------didFinishLaunchingWithOptions---%@"); UILabel *label = [[UILabel alloc] init];
label.backgroundColor = [UIColor redColor];
label.frame = CGRectMake(, , , );
label.font = [UIFont systemFontOfSize:];
label.numberOfLines = ;
[[[self.window.rootViewController.childViewControllers firstObject] view] addSubview:label]; UILocalNotification *note = launchOptions[UIApplicationLaunchOptionsLocalNotificationKey];
if (note) {
label.text = @"点击本地通知启动的程序"; HMViewController *homeVc = [self.window.rootViewController.childViewControllers firstObject];
[homeVc performSegueWithIdentifier:@"home2detail" sender:note];
} else {
label.text = @"直接点击app图标启动的程序";
}
self.label = label;
return YES;
} /**
* 当用户点击本地通知进入app的时候调用 、通知发出的时候(app当时并没有被关闭)
*/
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
// self.label.text = [NSString stringWithFormat:@"点击通知再次回到前台---%d", application.applicationState];
// 程序正处在前台运行,直接返回
if (application.applicationState == UIApplicationStateActive) return; HMViewController *homeVc = [self.window.rootViewController.childViewControllers firstObject];
[homeVc performSegueWithIdentifier:@"home2detail" sender:notification];
} @end
#import "HMViewController.h"
#import "HMDetailViewController.h" @interface HMViewController ()
- (IBAction)schedule;
- (IBAction)cancel;
@end @implementation HMViewController - (void)viewDidLoad
{
[super viewDidLoad];
} - (IBAction)schedule2 {
// 1.创建本地推送通知对象
UILocalNotification *ln = [[UILocalNotification alloc] init]; // 2.设置通知属性 // 音效文件名
ln.soundName = @"buyao.wav"; // 通知的具体内容
ln.alertBody = @"重大新闻:xxxx xxxx被调查了...."; // 锁屏界面显示的小标题("滑动来" + alertAction)
ln.alertAction = @"查看新闻吧"; // 设置app图标数字
ln.applicationIconBadgeNumber = ; [[UIApplication sharedApplication] presentLocalNotificationNow:ln];
} - (IBAction)schedule {
// 1.创建本地推送通知对象
UILocalNotification *ln = [[UILocalNotification alloc] init]; // 2.设置通知属性
// 音效文件名
ln.soundName = @"buyao.wav"; // 通知的具体内容
ln.alertBody = @"重大新闻:xxxx xxxx被调查了...."; // 锁屏界面显示的小标题("滑动来" + alertAction)
ln.alertAction = @"查看新闻吧"; // 通知第一次发出的时间(5秒后发出)
ln.fireDate = [NSDate dateWithTimeIntervalSinceNow:];
// 设置时区(跟随手机的时区)
ln.timeZone = [NSTimeZone defaultTimeZone]; // 设置app图标数字
ln.applicationIconBadgeNumber = ; // 设置通知的额外信息
ln.userInfo = @{
@"icon" : @"test.png",
@"title" : @"重大新闻",
@"time" : @"2014-08-14 11:19",
@"body" : @"重大新闻:答复后即可更换就肯定会尽快赶快回家的疯狂估计很快将发的"
}; // 设置启动图片
ln.alertLaunchImage = @"Default"; // 设置重复发出通知的时间间隔
// ln.repeatInterval = NSCalendarUnitMinute; // 3.调度通知(启动任务)
[[UIApplication sharedApplication] scheduleLocalNotification:ln];
} - (IBAction)cancel {
NSArray *notes = [UIApplication sharedApplication].scheduledLocalNotifications;
NSLog(@"%@", notes);
// [[UIApplication sharedApplication] cancelAllLocalNotifications];
} - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(UILocalNotification *)note
{
HMDetailViewController *detailVc = segue.destinationViewController;
detailVc.userInfo = note.userInfo;
}
@end

IOS 本地推送(UILocalNotification)的更多相关文章

  1. [转载]iOS本地推送-备用

    第一步:创建本地推送// 创建一个本地推送UILocalNotification *notification = [[[UILocalNotification alloc] init] autorel ...

  2. 本地推送UILocalNotification(转)

    1.增加一个本地推送 //设置20秒之后 NSDate *date = [NSDate dateWithTimeIntervalSinceNow:]; //chuagjian一个本地推送 UILoca ...

  3. (七十三)iOS本地推送通知的实现

    iOS的推送通知分为本地推送和网络推送两种,如果App处于挂起状态,是可以发送本地通知的,如果已经被杀掉,则只有定时通知可以被执行,而类似于QQ的那种网络消息推送就无法实现了,因为App的网络模块在被 ...

  4. 81、iOS本地推送与远程推送详解

    一.简介 分为本地推送和远程推送2种.可以在应用没打开甚至手机锁屏情况下给用户以提示.它们都需要注册,注册后系统会弹出提示框(如下图)提示用户石否同意,如果同意则正常使用:如果用户不同意则下次打开程序 ...

  5. iOS 本地推送通知

    1.什么是本地推送通知 不需要联网的情况下,应用程序经由系统发出的通知 2.本地推送的使用场景 定时提醒,如玩游戏.记账.闹钟.备忘录等 3.实现本地推送通知的步骤 创建本地推送通知的对象UILoca ...

  6. 本地推送UILocalNotification

    //本地推送---无需网络,由本地发起 UILocalNotification *localNotification = [[UILocalNotification alloc]init]; //设置 ...

  7. iOS本地推送与远程推送

    原文在此 分为本地推送和远程推送2种.可以在应用没有打开甚至手机锁屏情况下给用户以提示.它们都需要注册,注册后系统会弹出提示框(如下图)提示用户是否同意,如果同意则正常使用:如果用户不同意则下次打开程 ...

  8. Swift - 推送之本地推送(UILocalNotification)添加Button的点击事件

    上一篇讲到的本地推送是普通的消息推送,本篇要讲一下带按钮动作的推送消息 import UIKit @UIApplicationMain class AppDelegate: UIResponder, ...

  9. Swift - 推送之本地推送(UILocalNotification)

    // 本地推送通知是通过实例化UILocalNotification实现的.要实现本地化推送可以在AppDelegate.swift中添加代码实现,本事例是一个当App进入后台时推送一条消息给用户. ...

随机推荐

  1. cmd命令行编译c/c++程序

    一.打开文件夹(文件夹名字为123,文件夹里面有程序345.cpp) cd 123 二.在cmd里面编译程序 1.cd Desktop      //在打开文件夹之前不回到桌面会出错 2.cd 123 ...

  2. js 中 forEach 和 map

    共同点: 1.都是循环遍历数组中的每一项. 2.forEach() 和 map() 里面每一次执行匿名函数都支持3个参数:数组中的当前项item,当前项的索引index,原始数组input. 3.匿名 ...

  3. .reverse ,join,split区分

    * 1:arrayObject.reverse() * 注意: 该方法会改变原来的数组,而不会创建新的数组. * 2:arrayObject.join() * 注意:join() 方法用于把数组中的所 ...

  4. SpringBoot---开发的热部署

    1.模板的热部署 在SpringBoot中,模板引擎的页面默认是开启缓存的: 如果修改了页面的内容,则刷新不到修改后的页面: 可以在application.properties中关闭模板引擎的缓存: ...

  5. 97 条 Linux 运维工程师常用命令总结[转]

    1.ls [选项] [目录名 | 列出相关目录下的所有目录和文件 -a 列出包括.a开头的隐藏文件的所有文件 -A 通-a,但不列出"."和".." -l 列出 ...

  6. mapper mysl实现批量插入 更新

    1.批量插入 <insert id="insertConfirm" parameterType="java.util.List"> insert i ...

  7. cloudermanager安装过程中出现W:GPG error错误 http://ppa.launchpad.net.trusty Release **** 4DF9B28CA252A784(图文详解)

    不多说,直接上干货! 问题详情  解决办法 sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 4DF9B28CA252A784 ...

  8. SEH结构

    首先有几点问题 1.在后文中看到的PE的节中的配置信息表Load configuration是对SEH回调函数的注册,那么Exception Table是加载的什么信息. 2.什么时候走进系统异常,什 ...

  9. WPF 父子窗体联动

    问题: 近段时间,由于项目上的一些原因,设计到在WPF项目使用引用COM组件的问题,部分WPF元素浮动在COM组件之上,并且实现拖.停靠.放大等功能(子窗体不要求等比缩放,只要位置跟随主窗体即可),如 ...

  10. UML建模—EA创建Use Case(用例图)

    用例图主要用来描述“用户.需求.系统功能单元”之间的关系.它展示了一个外部用户能够观察到的系统功能模型图. 1.新建用例图 2.用例图工具: 3.一个简单用例: 用例图所包含的元素如下: 1. Act ...