Notification是智能手机应用开发中常用的信息传递机制,它不用消耗更多资源去不停的检查信息状态,可以非常好的节省资源。

在iOS中分为两种通知:本地、远程。本地的UILocalNotification由全局的NotificationManager统一管理,我们只需要将本地通知对象添加到系统的Notification队列中就可以了,系统会在指定的时间激发本地通知。

本地推送通知:UILocalNotification

  1. 如果要使用推送通知,必须先在苹果的推送通知服务里注册你要使用哪几种类型的通知,就比如下面的一段代码就表示同时注册了提醒、标记和声音两种类型的通知(ios 8之前是不需要注册的):
// 在appDelegate中注册通知
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
if #available(iOS 8.0, *) {
let uns = UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)
UIApplication.sharedApplication().registerUserNotificationSettings(uns)
}
}

2.创建并添加本地通知

class LocalNotificationUtils: NSObject {

     /** 添加创建并添加本地通知 */
class func addNotification() {
// 初始化一个通知
let localNoti = UILocalNotification() // 通知的触发时间,例如即刻起15分钟后
let fireDate = NSDate().dateByAddingTimeInterval(-15*60)
localNoti.fireDate = fireDate
// 设置时区
localNoti.timeZone = NSTimeZone.defaultTimeZone()
// 通知上显示的主题内容
localNoti.alertBody = "通知上显示的提示内容"
// 收到通知时播放的声音,默认消息声音
localNoti.soundName = UILocalNotificationDefaultSoundName
//待机界面的滑动动作提示
localNoti.alertAction = "打开应用"
// 应用程序图标右上角显示的消息数
localNoti.applicationIconBadgeNumber = 0
// 通知上绑定的其他信息,为键值对
localNoti.userInfo = ["id": "1", "name": "xxxx"] // 添加通知到系统队列中,系统会在指定的时间触发
UIApplication.sharedApplication().scheduleLocalNotification(localNoti)
} }

3.获取所有本地通知

let locals = UIApplication.sharedApplication().scheduledLocalNotifications

4.取消一个本地推送

    // 通过通知上绑定的id来取消通知,其中id也是你在userInfo中存储的信息
class func deleteNotification(id: String) {
if orderID.isEmpty {
return
} if let locals = UIApplication.sharedApplication().scheduledLocalNotifications {
for localNoti in locals {
if let dict = localNoti.userInfo { if dict.keys.contains("id") && dict["id"] is String && (dict["id"] as! String) == id {
// 取消通知
UIApplication.sharedApplication().cancelLocalNotification(localNoti)
}
}
}
}
}

5.取消所有本地通知

UIApplication.sharedApplication().cancelAllLocalNotifications()

6.点击通知后的触发事件

1.应用在正在运行(在前台或后台运行),点击通知后触发appDelegate代理方法::didReceiveLocalNotification

class AppDelegate: UIResponder, UIApplicationDelegate{

    /** 接收本地通知 */
func application(application: UIApplication, didReceiveLocalNotification notification: UILocalNotification) {
// 获取通知上绑定的信息
guard let dict = notification.userInfo else {
return
} // 后面作相应处理... }
}

2.应用未运行,点击通知启动app,走appDelegate代理方法:didFinishLaunchingWithOptions

class AppDelegate: UIResponder, UIApplicationDelegate{
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { // 省略创建window及根控制器等代码
......
// 此处只介绍当点击通知启动应用后如何获取通知
if launchOptions != nil {
if let localNotification = launchOptions!["UIApplicationLaunchOptionsLocalNotificationKey"] as? UILocalNotification {
if let dict = localNotification.userInfo {
// 获取通知上绑定的信息后作相应处理...
}
}
} return true }
}

参考:http://www.cnblogs.com/kenshincui/p/4168532.html#localNotification

Swift 本地推送通知UILocalNotification的更多相关文章

  1. iOS 本地推送通知

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

  2. IOS 本地推送(UILocalNotification)

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

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

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

  4. SwiftUI - iOS10本地推送通知教程UserNotifications在Swift中的实现方式

    简介 消息推送相信在很多人的眼里都不陌生了吧?像即时聊天微信,好友发信息给你时会在顶部弹下小窗口提醒你.也像是在影院APP预订了电影票,在开场前一小时你也会收到提醒.这类推送是需要经过后端发送请求的, ...

  5. 采用Service实现本地推送通知

    在android的应用层中,涉及到很多应用框架,例如:Service框架,Activity管理机制,Broadcast机制,对话框框架,标题栏框架,状态栏框架,通知机制,ActionBar框架等等. ...

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

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

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

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

  8. SWIFT推送之本地推送(UILocalNotification)

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

  9. IOS之推送通知(本地推送和远程推送)

    推送通知和NSNotification是有区别的: NSNotification:是看不到的 推送通知:是可以看到的 IOS中提供了两种推送通知 本地推送通知:(Local Notification) ...

随机推荐

  1. 【Unity入门】碰撞检测与触发检测

    版权声明:本文为博主原创文章,转载请注明出处. 在Unity里面,游戏物体的碰撞我们可以通过刚体组件(Rigidbody)和碰撞器组件(Collider)来进行检测.首先在场景里面添加一个Plane面 ...

  2. 【加解密】关于DES加密算法的JAVA加密代码及C#解密代码

    JAVA加密: package webdomain; import java.security.Key; import java.security.spec.AlgorithmParameterSpe ...

  3. Jcrop+strut2+jsp实现图片剪切

    在网上找,发现都是不全的,要么没获取图片路径,要么没后台等等,今天就来个全的 一:总体步骤 =>页面上传图片 =>获取上传图片剪切的四个值x,y,w,h =>后天进行剪切 接下来就开 ...

  4. C#学习7

    一.变量交换 ; ; Console.WriteLine("开始a={0},b={1}",a,b); a = a + b; b = a - b; a = a - b; Consol ...

  5. public static void main(String arg[])

      该语句定义了main方法. main方法是程序执行的入口,所有的java程序都必须具备一个main()方法,而且必须按照如上的格式来定义. 不具有main方法的类可以编译,但不能执行.因为它没有m ...

  6. Ios下解决libzbar.a不支持armv7s的方法

    解决 libzbar.a' for architecture armv7 的问题 下载最新的zbar源码 http://sourceforge.net/p/zbar/code/ci/default/t ...

  7. 2010“架构师接龙”问答--杨卫华VS赵劼(转)

    add by zhj:虽然是几年前的文章,但还是很有参考价值的 原文:http://blog.zhaojie.me/2010/05/programmer-magazine-2010-5-archite ...

  8. Angular 中得 scope 作用域梳理

    $scope 的使用贯穿整个 Angular App 应用,它与数据模型相关联,同时也是表达式执行的上下文.有了 $scope 就在视图和控制器之间建立了一个通道,基于作用域视图在修改数据时会立刻更新 ...

  9. POJ2947Widget Factory(高斯消元解同模方程)

    http://poj.org/problem?id=2947 题目大意:有n 种装饰物,m 个已知条件,每个已知条件的描述如下:p start enda1,a2......ap (1<=ai&l ...

  10. CodeForces 702 A Maximum Increase (贪心,高效算法)

    题意:给定 n 个数,问你连续的最长的序列是几个. 析:从头扫一遍即可. 代码如下: #include <cstdio> #include <string> #include ...