標籤:
本地推播通知是通過執行個體化UILocalNotification實現的。要實現本地化推送可以在AppDelegate.swift中添加代碼實現,本案例是一個當App進入後台時推送一條訊息給使用者。
1.首先在didFinishLaunchingWithOptions方法內添加代碼,IOS8推送訊息首先要獲得使用者的同意,在初次安裝App時會提示使用者是否允許程式推送訊息,此方法是App第一次啟動並執行時候被執行一次,每次從後台啟用時不執行該方法.
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { if (UIDevice.currentDevice().systemVersion as NSString).floatValue >= 8 { //APService.registerForRemoteNotificationTypes( //UIUserNotificationType.Badge.rawValue | //UIUserNotificationType.Sound.rawValue | //UIUserNotificationType.Alert.rawValue, //categories: nil) application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: UIUserNotificationType.Badge | UIUserNotificationType.Sound | UIUserNotificationType.Alert, categories: nil)) } APService.setupWithOption(launchOptions) return true }
2.有幾個方法要說一下,
1.func applicationWillResignActive(application: UIApplication){} 當App既將進入後台、鎖屏、有電話進來時會觸發此事件
2.func applicationDidEnterBackground(application: UIApplication) {} 當App進入後台時觸發此事件
3.func applicationWillEnterForeground(application: UIApplication) {} 當App從後台即將回到前台時觸發此事件
4.func applicationDidBecomeActive(application: UIApplication) {}當App變成活動狀態時觸發此事件
5.func applicationWillTerminate(application: UIApplication) {} 當App退出時觸發此方法,一般用於儲存某些特定的資料
此時在applicationDidEnterBackground方法內寫入以下代碼:
func applicationDidEnterBackground(application: UIApplication) { // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. UIApplication.sharedApplication().cancelAllLocalNotifications() var notification = UILocalNotification() //notification.fireDate = NSDate().dateByAddingTimeInterval(1) //setting timeZone as localTimeZone notification.timeZone = NSTimeZone.localTimeZone() notification.repeatInterval = NSCalendarUnit.CalendarUnitDay notification.alertTitle = "This is a local notification" notification.alertBody = "Hey,It‘s great to see you again" notification.alertAction = "OK" notification.soundName = UILocalNotificationDefaultSoundName //setting app‘s icon badge notification.applicationIconBadgeNumber = 1 var userInfo:[NSObject : AnyObject] = [NSObject : AnyObject]() userInfo["kLocalNotificationID"] = "LocalNotificationID" userInfo["key"] = "Attention Please" notification.userInfo = userInfo //UIApplication.sharedApplication().scheduleLocalNotification(notification) //UIApplication.sharedApplication().presentLocalNotificationNow(notification) application.presentLocalNotificationNow(notification) }
此時將按Home鍵將App切換到後台時會有一條推送訊息,App角標變為了“1”
3.當使用者點擊訊息時會觸發didReceiveLocalNotification事件,在這個事件內寫些代碼:
func application(application: UIApplication, didReceiveLocalNotification notification: UILocalNotification) { UIApplication.sharedApplication().cancelAllLocalNotifications() let userInfo = notification.userInfo! let title = userInfo["key"] as! String var alert = UIAlertView() alert.title = title alert.message = notification.alertBody alert.addButtonWithTitle(notification.alertAction!) alert.cancelButtonIndex = 0 alert.show() //APService.showLocalNotificationAtFront(notification, identifierKey: nil) }
4.當程式處於活動狀態的時候清除ICON的角標
func applicationDidBecomeActive(application: UIApplication) { // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. //setting the desk top application icon‘s badge as zero //application.applicationIconBadgeNumber = 0 application.cancelAllLocalNotifications() application.applicationIconBadgeNumber = 0 }
SWIFT推送之本地推送(UILocalNotification)