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

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

1,推送消息的发送

  

--- AppDelegate.swift ---

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    var window: UIWindow?
    func application(application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> 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 ---

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import UIKit
class ViewController: UIViewController {
    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)代理方法。
在这个方法中我们可以根据推送的消息内容实现相关的功能。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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)
             
        self.window?.rootViewController!.presentViewController(alertController,
                animated: true, completion: nil)
}

Swift - 本地消息的推送通知(附样例)相关推荐

  1. swift通知栏推送_如何使用Swift和Laravel使用推送通知创建iOS加密跟踪应用

    swift通知栏推送 by Neo Ighodaro 由新Ighodaro 如何使用Swift和Laravel使用推送通知创建iOS加密跟踪应用 (How to create an iOS crypt ...

  2. Swift - SwiftyJSON的使用详解(附样例,用于JSON数据处理)

    转自:http://www.hangge.com/blog/cache/detail_968.html Swift - SwiftyJSON的使用详解(附样例,用于JSON数据处理) 2016-01- ...

  3. 本地推送通知和远程推送通知

    推送通知 推送通知跟NSNotification有所区别: 1> NSNotification是抽象的,不可见的 2> 推送通知是可见的(能用肉眼看到) iOS中提供了2种推送通知: 本地 ...

  4. 腾讯信鸽自定义推送通知

    使用信鸽的过程,感觉一路艰辛,各种坑,想必各位使用过的也是深有体会的吧.而且官方文档也太简洁了.demo功能也不全,没办法只能自己摸索着来,这不刚把自定义通知弄明白,就给各位看官献上来了. 1. XG ...

  5. 如何设计好一条推送通知

    你注意过么,每天从不同的 App 上收到的大量的推送通知与提醒,这些通知里有多少你真的有兴趣? 智能手表屏幕上无意义的通知 每天,用户对各种没用的通知应接不暇,这些通知让他们分散注意力,甚至成为了骚扰 ...

  6. android自定义push通知_20个海外Web和App推送通知服务工具

    在App和网站中使用推送通知有不同的原因,并且在提高流量和与客户互动方面有很多好处.推送通知是一种交互式可点击消息,可将访问者直接引导至你的网站.它们可以帮助你以指数方式增加流量和参与率.因此,营销人 ...

  7. 20个海外Web和App推送通知服务工具(一)

    在App和网站中使用推送通知有不同的原因,并且在提高流量和与客户互动方面有很多好处.推送通知是一种交互式可点击消息,可将访问者直接引导至你的网站.它们可以帮助你以指数方式增加流量和参与率.因此,营销人 ...

  8. 个性化推送通知的3种方法,提升60% ROI

    提及推送通知,大家都不陌生,只要你有智能手机.手表或电脑,就会有推送.本文通过一个精准营销案例,教大家如何设置个性化推送.设置地理围栏和精准推送时间等方式你提高推送的实际效果. 如果你的电子设备正好连 ...

  9. Swift 本地推送通知UILocalNotification

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

最新文章

  1. 2012.3.17庆祝我的博客创建!名字是web-sheena
  2. Bootstrap3基础 disabled 多选框 鼠标放在方框与文字上都出现禁止 标识
  3. 聊聊“数据安全与数据治理”那些事
  4. go 随机数是重复的
  5. 通过MOXy实现使JAXB更加清洁
  6. mysql load data infile 导入数据 某一列 空_Sql数据挑战赛amp;网络销售案例分析
  7. 普通用户安装nginx
  8. matlab预测ARMA-GARCH 条件均值和方差模型
  9. 2022年推出?特斯拉人形机器人被批就是个笑话
  10. XP系统计算机桌面图标不见,XP系统显示桌面图标消失的解决方法
  11. 怎么灵活使用Graph, Document, Key/Value 三种混合模型的数据库?--Java 10分钟教程
  12. python 绘制柱状图
  13. Linux shell 编程(四):变量
  14. thinkcmf apache rewrite文件
  15. CentOS 安装快速Nginx-1.12.0
  16. mysql 纯真ip 导出dat_纯真IP数据库(qqwry.dat)转换成最新的IP数据库格式(ipwry.dat)
  17. 制作HTML邮件邮箱注意问题和解决方案--兼容手机邮箱、电脑邮箱和邮件客户端
  18. 深夜给这个世界添加一点佐料
  19. 帆软报表列表_报表软件FineReport各类函数大全
  20. 《TiDB 6.x in Action》发布,凝聚社区集体智慧的 6.x 实践汇总!

热门文章

  1. vim一直以来的切换命令行窗口(term)执行程序的烦恼终于由8.1版本的一个命令解决了
  2. mysql跨库查询 索引_MySQL中跨库查询怎么搞?
  3. python selenium 保存网页_python selenium+pywin32 实现网页另存为
  4. xgboost算法 c语言,xgboost与sklearn的接口
  5. c语言放空一个数组,C++语言
  6. (五)操作系统安全概念和设计思想
  7. 项目管理中的客户需求变更时需求分析和解决方法
  8. 一行Python代码就可以玩一些童年小游戏
  9. Java中使用Jedis连接Redis数据库流程
  10. Winform控件-DevExpress18下载安装注册以及在VS中使用