Swift 本地推送通知UILocalNotification
Notification是智能手机应用开发中常用的信息传递机制,它不用消耗更多资源去不停的检查信息状态,可以非常好的节省资源。
在iOS中分为两种通知:本地、远程。本地的UILocalNotification由全局的NotificationManager统一管理,我们只需要将本地通知对象添加到系统的Notification队列中就可以了,系统会在指定的时间激发本地通知。
本地推送通知:UILocalNotification
- 如果要使用推送通知,必须先在苹果的推送通知服务里注册你要使用哪几种类型的通知,就比如下面的一段代码就表示同时注册了提醒、标记和声音两种类型的通知(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的更多相关文章
- iOS 本地推送通知
1.什么是本地推送通知 不需要联网的情况下,应用程序经由系统发出的通知 2.本地推送的使用场景 定时提醒,如玩游戏.记账.闹钟.备忘录等 3.实现本地推送通知的步骤 创建本地推送通知的对象UILoca ...
- IOS 本地推送(UILocalNotification)
推送通知 ● 注意:这里说的推送通知跟NSNotification有所区别 • NSNotification是抽象的,不可见的 • 推送通知是可见的(能用肉眼看到) ● iOS中提供了2种推送通知 ● ...
- (七十三)iOS本地推送通知的实现
iOS的推送通知分为本地推送和网络推送两种,如果App处于挂起状态,是可以发送本地通知的,如果已经被杀掉,则只有定时通知可以被执行,而类似于QQ的那种网络消息推送就无法实现了,因为App的网络模块在被 ...
- SwiftUI - iOS10本地推送通知教程UserNotifications在Swift中的实现方式
简介 消息推送相信在很多人的眼里都不陌生了吧?像即时聊天微信,好友发信息给你时会在顶部弹下小窗口提醒你.也像是在影院APP预订了电影票,在开场前一小时你也会收到提醒.这类推送是需要经过后端发送请求的, ...
- 采用Service实现本地推送通知
在android的应用层中,涉及到很多应用框架,例如:Service框架,Activity管理机制,Broadcast机制,对话框框架,标题栏框架,状态栏框架,通知机制,ActionBar框架等等. ...
- Swift - 推送之本地推送(UILocalNotification)添加Button的点击事件
上一篇讲到的本地推送是普通的消息推送,本篇要讲一下带按钮动作的推送消息 import UIKit @UIApplicationMain class AppDelegate: UIResponder, ...
- Swift - 推送之本地推送(UILocalNotification)
// 本地推送通知是通过实例化UILocalNotification实现的.要实现本地化推送可以在AppDelegate.swift中添加代码实现,本事例是一个当App进入后台时推送一条消息给用户. ...
- SWIFT推送之本地推送(UILocalNotification)
本地推送通知是通过实例化UILocalNotification实现的.要实现本地化推送可以在AppDelegate.swift中添加代码实现,本事例是一个当App进入后台时推送一条消息给用户. 1.首 ...
- IOS之推送通知(本地推送和远程推送)
推送通知和NSNotification是有区别的: NSNotification:是看不到的 推送通知:是可以看到的 IOS中提供了两种推送通知 本地推送通知:(Local Notification) ...
随机推荐
- 【Unity入门】碰撞检测与触发检测
版权声明:本文为博主原创文章,转载请注明出处. 在Unity里面,游戏物体的碰撞我们可以通过刚体组件(Rigidbody)和碰撞器组件(Collider)来进行检测.首先在场景里面添加一个Plane面 ...
- 【加解密】关于DES加密算法的JAVA加密代码及C#解密代码
JAVA加密: package webdomain; import java.security.Key; import java.security.spec.AlgorithmParameterSpe ...
- Jcrop+strut2+jsp实现图片剪切
在网上找,发现都是不全的,要么没获取图片路径,要么没后台等等,今天就来个全的 一:总体步骤 =>页面上传图片 =>获取上传图片剪切的四个值x,y,w,h =>后天进行剪切 接下来就开 ...
- C#学习7
一.变量交换 ; ; Console.WriteLine("开始a={0},b={1}",a,b); a = a + b; b = a - b; a = a - b; Consol ...
- public static void main(String arg[])
该语句定义了main方法. main方法是程序执行的入口,所有的java程序都必须具备一个main()方法,而且必须按照如上的格式来定义. 不具有main方法的类可以编译,但不能执行.因为它没有m ...
- Ios下解决libzbar.a不支持armv7s的方法
解决 libzbar.a' for architecture armv7 的问题 下载最新的zbar源码 http://sourceforge.net/p/zbar/code/ci/default/t ...
- 2010“架构师接龙”问答--杨卫华VS赵劼(转)
add by zhj:虽然是几年前的文章,但还是很有参考价值的 原文:http://blog.zhaojie.me/2010/05/programmer-magazine-2010-5-archite ...
- Angular 中得 scope 作用域梳理
$scope 的使用贯穿整个 Angular App 应用,它与数据模型相关联,同时也是表达式执行的上下文.有了 $scope 就在视图和控制器之间建立了一个通道,基于作用域视图在修改数据时会立刻更新 ...
- POJ2947Widget Factory(高斯消元解同模方程)
http://poj.org/problem?id=2947 题目大意:有n 种装饰物,m 个已知条件,每个已知条件的描述如下:p start enda1,a2......ap (1<=ai&l ...
- CodeForces 702 A Maximum Increase (贪心,高效算法)
题意:给定 n 个数,问你连续的最长的序列是几个. 析:从头扫一遍即可. 代码如下: #include <cstdio> #include <string> #include ...