swift 本地訊息推送
阿新 • • 發佈:2019-02-10
1. 在AppDelegate的中新增請求授權程式碼
let uns =UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories:nil) //如果已經獲得傳送通知的授權則建立本地通知,否則請求授權 if(UIApplication.sharedApplication().currentUserNotificationSettings()?.types == UIUserNotificationType.None){ UIApplication.sharedApplication().registerUserNotificationSettings(uns) }
2.在執行這段程式碼時,客戶端會彈出詢問使用者是否允許訊息推送的對話方塊。那麼如何判斷是否在授權中點選了不允許訊息推送的按鈕呢?如果使用者不允許訊息推送,怎麼再次提醒使用者呢?
if(UIApplication.sharedApplication().currentUserNotificationSettings()!.types.isEmpty){ //授權過 不允許通知 在需要的位置再次彈出詢問框 let confirm =Common.createConfirm(“允許訊息推送?”, delegate:self,confirmTitle:"去設定") confirm.show() }
//comfirm 對話方塊點選“去設定“動作處理 func alertView(alertView:UIAlertView, clickedButtonAtIndex buttonIndex:Int) { if(buttonIndex != alertView.cancelButtonIndex){ Common.goToECOPlusSettings() //進入app的設定路徑,供使用者設定訊息推送 } } class func goToLocationServiceSettings(){ let url =NSURL(string:UIApplicationOpenSettingsURLString) if(UIApplication.sharedApplication().canOpenURL(url!)){ UIApplication.sharedApplication().openURL(url!) } }
通過這種寫法,你可以在任何你需要的地方去彈出提示框去提示使用者允許訊息推送啦!
3.訊息聲音及震動實現
AudioServicesPlaySystemSound(kSystemSoundID_Vibrate) //單純的震動
AudioServicesPlaySystemSound(1007) //有震動有聲音1
notifi.soundName =UILocalNotificationDefaultSoundName//有震動有聲音2
notifi.soundName ="" //靜音
如果你按上面的寫法一路寫下來,就會發現,如果要實現在震動關閉狀態下的發出提示音,好像就做不到了,原諒我的愚鈍,當時在這裡卡了好久
var soundID:SystemSoundID =0
let path ="/System/Library/Audio/UISounds/sms-received1.caf"//獲取聲音地址
let baseURL = NSURL(fileURLWithPath: path) //地址轉換
AudioServicesCreateSystemSoundID(baseURL, &soundID)//賦值
AudioServicesPlaySystemSound(soundID)
這樣就可以實現只播放提示音而不產生震動啦
4.訊息累積合併
訊息推送多了,而使用者又沒有及時看到的話,一條一條堆積著就很不好看啦,所以我想把後面推送的訊息和前面的推送合併,永遠只給使用者展示一條合併的推送,當然前面要加上推送的訊息的累積條數咯,如果你的訊息是一次一條的推送的話,就設定一個count++,然後
let title ="[" +String(count) + "]"
不是的話,取出你的條數和之前訊息的條數,加起來就好啦,當然,如果使用者點選了訊息進入app,就要將count清0哦
func applicationDidBecomeActive(application: UIApplication)
這個方法就是app從後臺進入啟用狀態的方法,在這裡清0就ok啦
5. 強迫症患者最怕的icon右上角紅點,當app進入後臺,訊息推送的條數不僅要在訊息欄,還要顯示在app的icon右上角
notifi.applicationIconBadgeNumber =count
</pre><p style="font-family:Menlo; margin-top:0px; margin-bottom:0px; line-height:normal; color:rgb(61,29,129)"><span style="color: rgb(0, 0, 0);"><span style="font-size:12px">6.解釋下可能要用到的方法</span></span></p><p style="font-family:Menlo; margin-top:0px; margin-bottom:0px; font-size:11px; line-height:normal; color:rgb(61,29,129)"><span style="background-color: rgb(240, 240, 240); font-family: Arial, Helvetica, sans-serif;">func applicationDidEnterBackground(application:UIApplication) //app從啟用轉入後臺會觸發的方法</span></p><pre name="code" class="javascript">func applicationDidBecomeActive(application:UIApplication) //app從後臺轉入啟用狀態的方法
func applicationWillResignActive(application: UIApplication) //app在啟用狀態下一直出發的方法
7.點選訊息跳轉,我們常常會有點選訊息欄跳轉到app某個位置的需求
func application(application: UIApplication, didReceiveLocalNotification notification: UILocalNotification) {
//UIApplication.sharedApplication().cancelAllLocalNotifications()
//只有在後臺執行時,才控制跳轉,在前端執行就不要去反覆刷頁面了,好煩
if(0 ==self.state){ //之前紀錄的狀態,==0是app在後臺狀態 跳轉例項,根據需要寫
//MainController.index = 2
//let mainStory = UIStoryboard(name: "Main", bundle: nil)
//let main = mainStory.instantiateViewControllerWithIdentifier("main")as!MainController
//UIApplication.sharedApplication().keyWindow!.rootViewController = main
}
self.state =1 //更新狀態
}
That's all。