使用UILocalNotification可以很方便的实现消息的推送功能。我们可以设置这个消息的推送时间,推送内容等。
当推送时间一到,不管用户在桌面还是其他应用中,屏幕上方会都显示出推送消息。
1,推送消息的发送
--- AppDelegate.swift ---
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 ---
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)代理方法。
在这个方法中我们可以根据推送的消息内容实现相关的功能。
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
)
alertController.addAction(cancel);
self
.window?.rootViewController!.presentViewController(alertController,
animated:
true
, completion:
nil
)
}
|