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) ...
随机推荐
-
关于sql中in 和 exists 的效率问题,in真的效率低吗
原文: http://www.cnblogs.com/AdamLee/p/5054674.html 在网上看到很多关于sql中使用in效率低的问题,于是自己做了测试来验证是否是众人说的那样. 群众: ...
-
【填坑】bzoj3224 splay裸题
人生第一道splay不出所料是一道裸题,一道水题,一道2k代码都不到的题 #include <cstdio> ,n,p,q; ],c[][],size[],sp[]; void rot(i ...
-
std::min 与std::max 的 Compiler Error C2780
代码 #include<iostream>#include <algorithm> // std::min#undef minint main(){ float a =15.0 ...
-
自定义View编译失败。Binary XML file line #255: Error inflating
02-28 15:17:16.281: DEBUG/AndroidRuntime(391): Shutting down VM 02-28 15:17:16.281: WARN/dalvikvm(39 ...
-
Python+Selenuim测试网站,只能打开Firefox浏览器却不能打开网页的解决方法
最开始我使用的Selenium版本为2.48,Firefox版本为37,自动化打开网站的时候,可以正常打开. 后来由于Firefox的自检测更新,版本更新为47,导致版本不兼容,自动化打开网站浏览器时 ...
-
Layered Windows窗口的半透明效果
介绍: Layered Windows是windows窗口中的一类,提供类似半透明的效果(阿尔法混合).半透明效果是字面上有能看出来的,但实际上根据MSND,该类型的窗口还能更好的支持非矩形的窗口,使 ...
-
dirlock.go
// +build !windows package dirlock import ( "fmt" "os" "syscall ...
-
MySQL:windows中困扰着我们的中文乱码问题
前言:什么是mysql中的中文乱码问题? 话不多说,直接上图 这个东西困扰了我好久,导致我现在对windows映像非常不好,所以就想改成Linux,行了,牢骚就发到这里,直接说问题,明眼人一眼就看出来 ...
-
UVA129-Krypton Factor(搜索剪枝)
Problem UVA129-Krypton Factor Accept:1959 Submit:10261 Time Limit: 3000 mSec Problem Description 通 ...
- SpringSecurity认证处理流程