使用UILocalNotification可以很方便的实现消息的推送功能。我们可以设置这个消息的推送时间,推送内容等。

当推送时间一到,不管用户在桌面还是其他应用中,屏幕上方会都显示出推送消息。

1,推送消息的发送

   

--- AppDelegate.swift ---

 
import UIKit
 
@UIApplicationMain
class AppDelegateUIResponderUIApplicationDelegate {
 
    var window: UIWindow?
 
    func application(application: UIApplication,
        didFinishLaunchingWithOptions
launchOptions: [
NSObjectAnyObject]?)
-> 
Bool {
        //开启通知
        let settings
UIUserNotificationSettings(forTypes:
[.
Alert,
.
Badge,
.
Sound],
            categories: nil)
        application.registerUserNotificationSettings(settings)
        return true
    }
 
    func applicationWillResignActive(application: UIApplication)
{
    }
 
    func applicationDidEnterBackground(application: UIApplication)
{
    }
 
    func applicationWillEnterForeground(application: UIApplication)
{
    }
 
    func applicationDidBecomeActive(application: UIApplication)
{
    }
 
    func applicationWillTerminate(application: UIApplication)
{
    }
}

--- ViewController.swift ---

 
import UIKit
 
class ViewControllerUIViewController {
    override func viewDidLoad()
{
        super.viewDidLoad()
         
        //发送通知消息
        scheduleNotification(12345);
        //清除所有本地推送
        //UIApplication.sharedApplication().cancelAllLocalNotifications()
    }
     
    //发送通知消息
    func scheduleNotification(itemID:Int){
        //如果已存在该通知消息,则先取消
        cancelNotification(itemID)
         
        //创建UILocalNotification来进行本地消息通知
        let localNotification
UILocalNotification()
        //推送时间(设置为30秒以后)
        localNotification.fireDate
NSDate(timeIntervalSinceNow:
30)
        //时区
        localNotification.timeZone
NSTimeZone.defaultTimeZone()
        //推送内容
        localNotification.alertBody
"来自hangge.com的本地消息"
        //声音
        localNotification.soundName
UILocalNotificationDefaultSoundName
        //额外信息
        localNotification.userInfo
= [
"ItemID":itemID]
        UIApplication.sharedApplication().scheduleLocalNotification(localNotification)
    }
     
    //取消通知消息
    func cancelNotification(itemID:Int){
        //通过itemID获取已有的消息推送,然后删除掉,以便重新判断
        let existingNotification
self.notificationForThisItem(itemID) as UILocalNotification?
        if existingNotification
!= 
nil {
            //如果existingNotification不为nil,就取消消息推送
            UIApplication.sharedApplication().cancelLocalNotification(existingNotification!)
        }
    }
     
    //通过遍历所有消息推送,通过itemid的对比,返回UIlocalNotification
    func notificationForThisItem(itemID:Int)-> UILocalNotification?
{
        let allNotifications
UIApplication.sharedApplication().scheduledLocalNotifications
        for notification in allNotifications!
{
            let info
= notification.userInfo 
as!
[
String:Int]
            let number
= info[
"ItemID"]
            if number
!= 
nil &&
number == itemID {
                return notification as UILocalNotification
            }
        }
        return nil
    }
     
    override func didReceiveMemoryWarning()
{
        super.didReceiveMemoryWarning()
    }
}

2,点击推送消息的响应

收到推送,如果点击推送内容,则会重新进入到App,这个时候会调用AppDelegate中的func
application(application: UIApplication, didReceiveLocalNotification
notification: UILocalNotification)代理方法。
在这个方法中我们可以根据推送的消息内容实现相关的功能。

 
func application(application: UIApplication,
    didReceiveLocalNotification
notification: 
UILocalNotification)
{
        //设定Badge数目
        UIApplication.sharedApplication().applicationIconBadgeNumber
= 0
             
        let info
= notification.userInfo 
as!
[
String:Int]
        let number
= info[
"ItemID"]
             
        let alertController
UIAlertController(title: "本地通知",
                message: "消息内容:\(notification.alertBody)用户数据:\(number)",
                preferredStyle: UIAlertControllerStyle.Alert)
        

 
 
          let cancel = UIAlertAction(title: "取消", style: UIAlertActionStyle.Cancel, handler: nil);

alertController.addAction(cancel);

     

        self.window?.rootViewController!.presentViewController(alertController,
                animated: true,
completion: 
nil)
}

Swift - 本地消息的推送通知(附样例)的更多相关文章

  1. 基于swoole+Redis的消息实时推送通知

    swoole+Redis将实时数据的推送 一 实现功能 设计师订单如果设计师未抢单,超时(5分钟)设计订单时时给设计师派送, 设计师公众号中收到派单信息 设计发布者收到派单成功信息 环境 centos ...

  2. 移动 UX 设计:如何设计推送通知

    这个问题你一定想过,在移动用户体验设计领域中,如何设计好一条简单的推送通知. 你注意过么,每天从不同的 App 上收到的大量的推送通知与提醒,这些通知里有多少你真的有兴趣? 每天,用户对各种没用的通知 ...

  3. 背水一战 Windows 10 (121) - 后台任务: 推送通知

    [源码下载] 背水一战 Windows 10 (121) - 后台任务: 推送通知 作者:webabcd 介绍背水一战 Windows 10 之 后台任务 推送通知 示例演示如何接收推送通知/WebA ...

  4. APNS推送通知消息负载内容和本地格式字符串

    来源:http://hi.baidu.com/tangly888/blog/item/62948520121870559358074f.html 翻译苹果文档 地址:  翻译:tangly http: ...

  5. Swift 本地推送通知UILocalNotification

    Notification是智能手机应用开发中常用的信息传递机制,它不用消耗更多资源去不停的检查信息状态,可以非常好的节省资源. 在iOS中分为两种通知:本地.远程.本地的UILocalNotifica ...

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

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

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

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

  8. iOS 通知、本地通知和推送通知有什么区别? APNS机制。

    本地/推送通知为不同的需要而设计.本地通知对于iPhone,iPad或iPod来说是本地的.而推送通知——来自于设备外部.它们来自远程服务器——也叫做远程通知——推送给设备上的应用程序(使用APNs) ...

  9. iOS 本地推送通知

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

随机推荐

  1. 2015 NI 校招笔试机试面试

    美国国家仪器NI也算是入驻上海很好的一家外企了,它是我们院的合作公司,加上今年NI在我们院扩招实习生,这次是一个难得的机会可以进入NI实习,可惜我并没有好好把握... 一.笔试 几个做错的印象特别深刻 ...

  2. js动画框架设计

    当你不再依赖JQuery时,当你已经厌倦了引入js类库实现一些动画效果的方式,当你想实现一个简单而实用的动画框架......下面介绍下愚人设计的动画框架:支持动画缓动算法函数,如Linear.Cubi ...

  3. 高质量代码之HTML、CSS篇

    HTML篇 使用语义化标签<strong><fieldset><legend><ul>等等,少用<div><span> 判断网页 ...

  4. (转)Java关键字final、static使用总结

    一.final  根据程序上下文环境,Java关键字final有“这是无法改变的”或者“终态的”含义,它可以修饰非抽象类.非抽象类成员方法和变量.你可能出于两种理解而需要阻止改变:设计或效率. fin ...

  5. Java的平台无关性

    转载自:http://www.cnblogs.com/Y/archive/2011/03/22/JavaVM_Learning_Chapter2_Platform_Independence.html ...

  6. Spark及其应用场景初探

    最近老大让用Spark做一个ETL项目,搭建了一套只有三个结点Standalone模式的Spark集群做测试,基础数据量大概8000W左右.看了官方文档,Spark确实在Map-Reduce上提升了很 ...

  7. Web Api 2 怎么支持 Session

    Add protected void Application_PostAuthorizeRequest() { System.Web.HttpContext.Current.SetSessionSta ...

  8. 将服务器返回的URL或者网址截取出来特定的字符,然后将字符返回,一般根据返回的字符判断用户是否登录等即时状态

    1.用NSScanner过滤掉url中开头或者尾部存在的空格 2.用NSScanner的 setCharactersToBeSkipped方法忽略指定的字符集 3.用scanUpToString扫描去 ...

  9. 了解 JavaScript 中的内置对象

    所有编程语言都具有内部(或内置的)对象来创建 语言的基本功能.内部对象是 您编写自定义代码所用语言的基础, 该代码基于您的想象实现自定义功能.JavaScript 有许多 将其定义为语言的内部对象.本 ...

  10. ecshop二次开发

    模板开发首页参考资料: http://book.ecmoban.com/ http://pan.baidu.com/s/1bnezFUv 自行修改ecshop读写分离设置,请查看另一篇文章,ecsho ...