Local Notification(本地通知)

一、简介

在讲本地通知前,先简单介绍一下推送通知的基本概念,以便对后面的内容有更好的理解。
这里说的推送通知和NSNotification是有所区别的,NSNotification是抽象的,不可见的。而推送通知是可见的,能用肉眼看到。
1.作用
可以让不在前台运行的应用程序,告知用户其内部发生了什么事情。

2.推送通知的呈现方式

  • 在屏幕顶部显示一块横幅(显示具体内容)
  • 在屏幕中间弹出一个UIAlertView(显示具体内容)
  • 在锁屏界面显示一块横幅(锁屏状态下,显示具体内容)
  • 更新app图标的数字(说明新内容的数量)
  • 播放音效(提醒作用)

具体是哪种呈现方式,取决于用户的设置。而且用户接收的推送通知,都会展示在“通知中心”。
用户也可以决定是否要开启以下4个功能:

  • 显示App图标数字
  • 播放音效
  • 锁屏显示
  • 显示在“通知中心”

3.推送通知的使用细节

  • 发出推送通知时,如果当前程序正运行在前台,那么推送通知就不会被呈现出来。
  • 点击推送通知后,默认会自动打开发出推送通知的app
  • 不管app是打开还是关闭,推送通知都能如期发出。
    iOS系统提供了2种推送通知:本地推送通知和远程推送通知

二、本地通知(Local Notification)

1.概念
本地通知:顾名思义,就是不需要服务器的支持,即不需要联网就能发出的推送通知。

2.使用场景
常常用来定时提醒用户完成一些任务,比如清理缓存、看定影、玩游戏等。

3.代码实现:下面直接通过代码来解析本地推送通知的发出

- (void)sendLocalNotification {

    // 创建本地通知
    UILocalNotification*noti = [[UILocalNotificationalloc] init];

    // 设置通知属性
    // 通知内容
    noti.alertBody= @"Hello world!";

    // 通知发送时间
    noti.fireDate= [NSDatedateWithTimeIntervalSinceNow:3];

    // 通知时间所属时区——真实开发中必须制定
    noti.timeZone= [NSTimeZonedefaultTimeZone];

    // 重复通知时间--枚举值
    noti.repeatInterval= NSCalendarUnitSecond;

    // 指定时间重复通知
    noti.repeatCalendar = [[NSCalendar alloc]initWithCalendarIdentifier:@"ID"];

    // 指定锁屏界面通知内容
    noti.alertAction = @"锁屏通知信息";

    // 设置点击通知进入程序图片
    noti.alertLaunchImage= @"Default-568h@2x";

    // 设置通知声音
    noti.soundName = @"buyao.wav";

    // 设置应用程序图标数字
    noti.applicationIconBadgeNumber= 2;

    // 设置附加用户信息
   NSDictionary *userInfo = @{                  
    @"name":@"常",          
    @"age":@"25"                   
    };

    noti.userInfo = userInfo;
    // 注册通知
    [[UIApplicationsharedApplication] scheduleLocalNotification:noti];
}

- (void)removeLocalNotification {
    // 移除所有通知
    [[UIApplicationsharedApplication] cancelAllLocalNotifications];

    // 移除指定通知
  //  [[UIApplication sharedApplication] cancelLocalNotification:<#(UILocalNotification *)#>];
}

 

2.接收到通知后处理
// 程序退出后接到通知进入程序调用该方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary
*)launchOptions {
    // 注意: 在iOS8中, 必须提前注册通知类型
    #ifdef
   __IPHONE_8_0    
   if([UIDevicecurrentDevice].systemVersion.doubleValue>= 8.0) {
        UIUserNotificationTypetype = UIUserNotificationTypeAlert| UIUserNotificationTypeBadge| UIUserNotificationTypeSound;

        UIUserNotificationSettings*settings = [UIUserNotificationSettingssettingsForTypes:type categories:nil];

        // 注册通知类型     
       [application registerUserNotificationSettings:settings];
 }
#endif

    static int count = 0;
    count++;

    UILabel *label = [[UILabel alloc] init];
    label.frame = CGRectMake(0, 40,200, 200);
    label.numberOfLines = 0;
    label.textColor = [UIColor whiteColor];
    label.font = [UIFont systemFontOfSize:21];
    label.backgroundColor= [UIColororangeColor];
    label.text= [NSStringstringWithFormat:@"%@", launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]];
    [self.window.rootViewController.viewaddSubview:label];
    returnYES;
}

//接收到本地通知时就会调用
//当程序在前台时, 会自动调用该方法
//当程序在后台时, 只有用户点击了通知才会调用
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification
*)notification {
    static int count = 0;   
    count++;
    UILabel *label = [[UILabel alloc] init];
    label.frame = CGRectMake(0, 250,200, 200);
    label.numberOfLines = 0;
    label.textColor = [UIColor whiteColor];
    label.text = [NSString stringWithFormat:@"
%@", notification.userInfo];
    label.font = [UIFont systemFontOfSize:21];
    label.backgroundColor= [UIColorgrayColor];
    [self.window.rootViewController.viewaddSubview:label];
}

4.点击本地推送通知
如果有本地推送通知,当用户点击时,会自动打开app,这里有2种情况:

  • app并没有关闭,一直隐藏在后台
    点击后,让app进入前台,并会调用AppDelegate的下面方法(并非重新启动app)
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification;

  • app已经被关闭(进程已死)
    启动app,启动完毕会调用AppDelegate下面的方法
// launchOptions参数通过UIApplicationLaunchOptionsLocalNotificationKey取出本地推送通知对象
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,898评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,401评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,058评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,539评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,382评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,319评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,706评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,370评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,664评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,715评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,476评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,326评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,730评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,003评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,275评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,683评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,877评论 2 335

推荐阅读更多精彩内容

  • 极光推送: 1.JPush当前版本是1.8.2,其SDK的开发除了正常的功能完善和扩展外也紧随苹果官方的步伐,SD...
    Isspace阅读 6,690评论 10 16
  • 推送通知注意:这里说的推送通知跟NSNotification有所区别NSNotification是抽象的,不可见的...
    醉叶惜秋阅读 1,495评论 0 3
  • @(〓〓 iOS-实用技术)[远程/本地推送] 作者: Liwx 邮箱: 1032282633@qq.com 目...
    Liwx阅读 3,289评论 6 28
  • 在现今的网络时代下,互联网成为第一大媒体的时代,企业的主要宣传工作就是网络宣传了。其中主要还是网络广告宣传。网络广...
    9cdcb8412527阅读 386评论 0 0
  • 线程是用来执行任务的,线程彻底执行完任务A才能去执行任务B。为了同时执行两个任务,产生了多线程。我打开一个视频软件...
    戚先生阅读 229评论 0 0