swift 本地消息推送

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。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章