Swift 本地推送通知UILocalNotification

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

时间: 2024-09-30 04:55:37

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

本地推送通知UILocalNotification

1 - (IBAction)schedule { 2 // 1.创建本地推送通知对象 3 UILocalNotification *ln = [[UILocalNotification alloc] init]; 4 5 // 2.设置通知属性 6 // 音效文件名 7 ln.soundName = @"buyao.wav"; 8 9 // 通知的具体内容 10 ln.alertBody = @"重大新闻:xxxx xxxx被调查了...."; 11 12 // 锁

本地推送通知在iOS8上的不同

iOS8的不同点 你如果把上面的程序运行在iOS8上,会爆出如下错误 预习01-本地推送通知[掌握][615:7847] Attempting to schedule a local notification {fire date = Monday, July 13, 2015 at 9:02:25 AM China Standard Time, time zone = (null), repeat interval = 0, repeat count = UILocalNotification

本地推送通知小demo

本地推送通知: #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. // 在iOS8之后,Apple对用户隐私要求更加严格,所

本地推送通知界面跳转demo

本地推送通知界面跳转demo: /* 1.在发送本地通知的时候,通过userInfo属性来指示跳转到那个界面 2.监听本地通知的接收 1.当收到本地通知就会调用该代理方法 调用场景 1.如果应用程序在后台,当点击通知的时候 2.如果应用程序在前台,一旦收到本地通知,就会调用该方法 所以:判断如果应用程序在前台时候,不要执行界面跳转,来提高用户体验 3.如果应用程序被杀死了,那么这个方法就不再执行了 //- (void)application:(UIApplication *)applicatio

如何发送本地推送通知

如何发送本地推送通知 推送通知也属于UI的一部分,所以推送通知对象是以UI开头 方法送通知的代码方法控制器的-touchesBegan: withEvent: 中测试,比较合适,放到viewDidLoad方法,用户的注册请求还没有完成方法就调用了 创建本地通知 // 创建本地通知对象 UILocalNotification *ln = [[UILocalNotification alloc] init]; 设置本地通知属性(推荐一个一个属性测试运行) // 1.设置通知的内容(如果此属性不设置是

本地推送服务 UILocalNotification

前言 之前接触过iOS上的推送服务,当时做的是在线推送,虽然已经有很多开发商提供集成的推送服务,但作为了解原理的方式也是一个不错的过程. 最近打算应用本地通推送的功能,本来以为会和在线推送一样麻烦,又要弄证书,又要提交验证,所以一直没动手.今天稍微了解后,发现本地推送就是很简单的一件事. 介绍 本地推送是什么 在线推送一般是通过服务器发送消息到对应设备,并由对应设备做出响应通知用户.而本地推送则是直接在本地由程序控制发送消息通知用户.由于减少了服务器以及验证设备的过程,所以本地推送其实就是一个简

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

iOS的推送通知分为本地推送和网络推送两种,如果App处于挂起状态,是可以发送本地通知的,如果已经被杀掉,则只有定时通知可以被执行,而类似于QQ的那种网络消息推送就无法实现了,因为App的网络模块在被杀掉后是无法执行的,这时候就要借助远程通知,通过苹果的服务器转发通知到手机,本文只介绍本地通知的用法. ①对于iOS8及以上的版本,需要注册本地通知才能使用,一般在AppDelegate中注册: if ([[UIDevice currentDevice].systemVersion doubleVa

用C#完成Swift远程推送通知

IOS的信送简单就是在开开发者管理门户中创建推送证书,然后生成服务器推送证书(服务端代码可以是任意的,我们采用C#来写),App中嵌入推送代码,App安装后允许推送后就可以收到服务端的推送消息了,关于更进一步的原理说明,可以查看官方文档. 前提是你已经开通购买了apple的开发者帐户,并且已经有开发证书,能正常创建运行项目到你的iphone上了,如果以前条件不具备,请先参完成以上步骤. 导出证书 打开Mac系统的"钥匙串访问"-"证书助理"-"从证书颁发机

ios开发之-本地推送通知

不多说直接上代码 #import "AppDelegate.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after