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