使用UILocalNotification可以很方便的实现消息的推送功能。我们可以设置这个消息的推送时间,推送内容等。
1,推送消息的发送
--- AppDelegate.swift ---
--- ViewController.swift ---
2,点击推送消息的响应
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
}
applicationWillResignActive(application:
) {
}
applicationDidEnterBackground(application:
) {
}
applicationWillEnterForeground(application:
) {
}
applicationDidBecomeActive(application:
) {
}
applicationWillTerminate(application:
) {
}
}
|
--- ViewController.swift ---
ViewController
UIViewController
{
override
viewDidLoad() {
super
.viewDidLoad()
//发送通知消息
scheduleNotification(12345);
//清除所有本地推送
//UIApplication.sharedApplication().cancelAllLocalNotifications()
}
//发送通知消息
scheduleNotification(itemID:
Int
){
//如果已存在该通知消息,则先取消
cancelNotification(itemID)
//创建UILocalNotification来进行本地消息通知
localNotification =
UILocalNotification
()
//推送时间(设置为30秒以后)
localNotification.fireDate =
NSDate
(timeIntervalSinceNow: 30)
//时区
localNotification.timeZone =
NSTimeZone
.defaultTimeZone()
//推送内容
localNotification.alertBody =
"来自hangge.com的本地消息"
//声音
localNotification.soundName =
UILocalNotificationDefaultSoundName
//额外信息
localNotification.userInfo = [
"ItemID"
:itemID]
.sharedApplication().scheduleLocalNotification(localNotification)
}
//取消通知消息
cancelNotification(itemID:
){
existingNotification =
self
.notificationForThisItem(itemID)
as
?
if
existingNotification !=
{
//如果existingNotification不为nil,就取消消息推送
.sharedApplication().cancelLocalNotification(existingNotification!)
}
}
//通过遍历所有消息推送,通过itemid的对比,返回UIlocalNotification
notificationForThisItem(itemID:
)->
? {
allNotifications =
.sharedApplication().scheduledLocalNotifications
for
notification
in
allNotifications! {
info = notification.userInfo
as
! [
String
]
number = info[
]
number !=
&& number == itemID {
return
UILocalNotification
}
}
nil
}
didReceiveMemoryWarning() {
.didReceiveMemoryWarning()
}
}
|
2,点击推送消息的响应
收到推送,如果点击推送内容,则会重新进入到App,这个时候会调用AppDelegate中的func application(application: UIApplication,didReceiveLocalNotification notification: UILocalNotification)代理方法。
//设定Badge数目
.sharedApplication().applicationIconBadgeNumber = 0
]
]
alertController =
UIAlertController
(title:
"本地通知"
message:
"消息内容:\(notification.alertBody)用户数据:\(number)"
preferredStyle:
UIAlertControllerStyle
.
)
alertController.addAction(cancel);
.window?.rootViewController!.presentViewController(alertController,
animated:
true
)
}
|