1.简介

IOS共分为本地和远程通知两种通知,本问介绍本地通知UILocalNotification的基本使用方法。

2.本地通知的实现:

步骤一:新建工程
在Xcode中新建一个single view的应用工程。
//略
步骤二:给应用像系统注册通知
每一个应用的通知都是需要在系统中注册的,这样系统就能将次应用的通知管理起来,用户可以在设置中进行某个系统通知的设定,如是否开启音效,是否禁用通知等。
在- (void)viewDidLoad方法中增加如下代码:
 // 声明当前应用的通知包含哪些交互
UIUserNotificationSettings *set = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeSound|UIUserNotificationTypeBadge categories:nil];

 // 像系统注册当前应用的通知[[UIApplication sharedApplication] registerUserNotificationSettings:set];

此时你可以运行程序,系统将提示你是否接受当前应用的通知,如下:

无论我们如何选择,都可以在系统设置中修改。当我们打开当前应用的通知设定的时候展现如下画面:

此图中正式我们代码中设定的当前通知的一些交互方式和其他一些通用设定。

步骤三:生成通知实体
接下来需要具体的设定你的消息通知实体了,包括通知什么消息,什么时候通知,一共需要通知几次,每个多长时间进行通知等相关设定。
在- (void)viewDidLoad方法中增加如下代码:
// 创建通知实体类
    UILocalNotification * theNotification = [[UILocalNotification alloc] init];

    //设定通知内容
    theNotification.alertBody = @"my notification message";

    // 设定当期通知的触发时间
    theNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:];

    // 时区指定
    theNotification.timeZone = [NSTimeZone defaultTimeZone];

    // 此设定为应用图标右上角的红色通知计数,当触发现在的通知的时候计数+1
    theNotification.applicationIconBadgeNumber = [[UIApplication sharedApplication] applicationIconBadgeNumber] + ;

    // 设定完毕后交给系统,定时触发通知
    [[UIApplication sharedApplication] scheduleLocalNotification:theNotification];
步骤四:当通知触发后的处理
我们在步骤四中完成了通知单的实体,此时我们运行应用,发现即使到了通知时间但是却毫无相应。但是如果我们再次运行应用,然后快速的返回主屏幕你会发现时间一到后在上方会弹出通知信息。所以在这里所想说的是通知触发后,当一个用处于不通过状态的时候会触发不同的处理方法(代理方法)。

 3.原理:

一般的有三种情况需要处理:

  • 当前应用处于关闭状态
  • 当前应用正在前台运行(当前设备界面为当前应用界面)
  • 当前应用处于后台运行

第一种情况:

  • 当前应用处于关闭状态

当通知触发后,用户点击屏幕上部的通知tip的时候应用将调用代理的application:didFinishLaunchingWithOptions:方法,所以我们可以在此代理方法中做处理:

    // 查看launchOptions中是否存在通知的信息,如果有则可认为此应用是通过点击通知tip进来的
    UILocalNotification *locationNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
    if (locationNotification) {
        // 为了简单这里只是将通知红色标签设定为0,表示用户已经处理了通知
        application.applicationIconBadgeNumber = ;
    }

    return YES;

其他两种情况:

  • 当前应用正在前台运行(当前设备界面为当前应用界面)
  • 当前应用处于后台运行

这两种情况都会调用代理方法application:didReceiveLocalNotification:
唯一的区别处理是当应用在前台运行的时候认为用户可以直截了当的去处理通知,所以直接弹出提示框,但是当在后台运行,然后用户在此激活应用的时候就没有必要提示框的存在了。

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
    //判断当前应用的状态(前台运行中还是后台运行中)
    UIApplicationState state = [application applicationState];
    // 当为前台运行的时候直接弹出对话框提示用户
    if (state == UIApplicationStateActive) {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Reminder"
                                                        message:notification.alertBody
                                                       delegate:self cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
        [alert show];
    }

    // 将红色通知提示数设定为0
    application.applicationIconBadgeNumber = ;
}

[How to] UILocalNotification 的使用的更多相关文章

  1. iOS调试通过UILocalNotification或RemoteNotification启动的app

    相信很多同学都为调试苹果的通知烦恼过,特别是通过通知启动app这个功能,简直让人欲哭无泪!!! 然而我们都遇到的问题,苹果怎么可能没有想到,原来早就有了官方的解决办法,只是我们不知道而已... 这次又 ...

  2. 用UILocalNotification实现一个闹钟(Swift)

    之前项目需求要实现一个闹钟,github上找了半天发现都是很旧的代码了,所以就准备自己写一个,刚好最近在学习Swift,就用Swift写了一个demo放在这里:https://github.com/P ...

  3. UILocalNotification本地通知的使用方法

    本文所写方法主要应用UILocalNotification达到本地推送通知栏信息 取消了其他教程里过期的UIAlertView方法 使用UILocalNotification主要分为创建 调用 取消 ...

  4. 本地推送UILocalNotification

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

  5. ios 把已经点击过的UILocalNotification 从系统的通知中心现实中移除

    在ios7 上一个uilocalnotification在中心现实后,点击该消息,程序被唤醒了,但是该通知没有被移除.用了以下的代码后可以解决这个问题         UIApplication.sh ...

  6. iOS UILocalNotification 每2周,每两个月提醒

    iOS 的UILocalNotification提醒提供了默认的重复频率,比如,一天,一个星期等等,但是对于非标准的频率,比如每,2周,每2个月,无法重复提醒. 我们的思路是在应用程序开始时,把即将发 ...

  7. iOS - iPhone开发 UILocalNotification的使用

    OS下的Notification的使用 Notification 是智能手机应用编程中非常常用的一种传递信息的机制,而且可以非常好的节省资源,不用消耗资源来不停地检查信息状态(Pooling),在iO ...

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

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

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

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

  10. ios推送:本地通知UILocalNotification

    Notification是智能手机应用编程中非常常用的一种传递信息的机制,而且可以非常好的节省资源,不用消耗资源来不停地检查信息状态(Pooling),在iOS下应用分为两种不同的Notificati ...

随机推荐

  1. Django+haystack实现全文搜索出现错误 ImportError: cannot import name signals

    原因是在你的settings.py或者其他地方使用了  "import haystack" 当我们使用django-haysatck库时,表面上会有haystack库,但实际上并不 ...

  2. 【bzoj】3477: [Usaco2014 Mar]Sabotage 01分数规划

    这题算是01分数规划吧2333 sum-a[i]*x[i]=c*(n-x[i]) 化简一下就是sum-(a[i]-c)*x[i]-nc=0,每次找最大的(a[i]-c)*x[i](子段和),如果结果& ...

  3. BZOJ3144:[HNOI2013]切糕——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=3144 看着很像网络流,但是费用流貌似无法解决这个问题,其实甚至连忽略d的情况都做不到. 最小割? ...

  4. POJ.1003 Hangover ( 水 )

    POJ.1003 Hangover ( 水 ) 代码总览 #include <cstdio> #include <cstring> #include <algorithm ...

  5. Codeforces VK Cup Finals #424 Div.1 C. Bamboo Partition(数论)

    题目要求符合以下条件的最大的d 化简得 注意到 最多只有2*sqrt(a[i]-1)种取值,也就是一共最多有n*sqrt(10^19)种取值,于是枚举一下d,计算出符合上上式的最大的d更新答案,然后d ...

  6. Codeforces Round #342 (Div. 2) C

    C. K-special Tables time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  7. noip模拟赛 大芳的逆行板载

    题目背景 大芳有一个不太好的习惯:在车里养青蛙.青蛙在一个n厘米(11n毫米s)的Van♂杆子上跳来跳去.她时常盯着青蛙看,以至于突然逆行不得不开始躲交叉弹.有一天他突发奇想,在杆子上每1厘米为一个单 ...

  8. [python]爬站点

    #!/usr/bin/python 2 import urllib 3 import urllib2 4 import re 5 import os 6 7 dirs = ['js','img','p ...

  9. mysql 事务,锁,与四大隔离级别

    概念 事务 原子性:事务必须是一个自动工作的单元,要么全部执行,要么全部不执行. 一致性:事务结束的时候,所有的内部数据都是正确的. 隔离性:并发多个事务时,各个事务不干涉内部数据,处理的都是另外一个 ...

  10. generatorConfiguration配置文件及其详细解读

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE generatorConfiguratio ...