swift 本地通知、远程通知

无论是远程推送、本地推送   都需要注册通知代码

iOS 8  把原先一步到位的  RemoteNotification  的注册分成两部分,一部分是注册新引入的那个「 UIUserNotificationSettings 」,另一部分是  RemoteNotifications 。

事实上, Apple  在  iOS 8  将 RemoteNotification  和 LocalNotification  统一了起来 。两种  Notifications  将统一由  UIUserNotificationSettings  来管理用户界面相关的东西:标记、声音和提醒。除了统一用户界面的通知外, UIUserNotificationSettings  还引入了  UIUserNotificationCategory ,可以让用户方便的直接在  Notification  上进行一些快捷的操作( Action )。

if ( UIApplication . instancesRespondToSelector ( Selector ( "registerUserNotificationSettings:" ))) {

application. registerUserNotificationSettings ( UIUserNotificationSettings (forTypes:  UIUserNotificationType .Sound |  UIUserNotificationType .Alert |  UIUserNotificationType .Badge, categories:  nil ))

} else {

application. registerForRemoteNotificationTypes (.Alert | .Sound | .Badge)

}

然后,在Appdelegate.swift 写相关远程推送、本地通知等代码

// 收到本地通知

func application(application: UIApplication , didReceiveLocalNotification notification: UILocalNotification ) {

var alertView = UIAlertView (title: " 系统本地通知 " , message: notification. alertBody , delegate: nil , cancelButtonTitle: " 返回 " )

alertView. show ()

}

// 远程推送通知 注册成功

func application(application: UIApplication , didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData ) {

println (deviceToken. description )

}

// 远程推送通知 注册失败

func application(application: UIApplication , didFailToRegisterForRemoteNotificationsWithError error: NSError ) {

if error. code == 3010 {

println ( "Push notifications are not supported in the iOS Simulator." )

} else {

println ( "application:didFailToRegisterForRemoteNotificationsWithError: /(error) " )

}

}

  // 8.0 之前   收到远程推送通知

func application(application: UIApplication , didReceiveRemoteNotification userInfo: [ NSObject : AnyObject ]) {

let notif    = userInfo as NSDictionary

let apsDic   = notif. objectForKey ( "aps" ) as NSDictionary

let alertDic = apsDic. objectForKey ( "alert" ) as String

var alertView = UIAlertView (title: " 系统本地通知 " , message: alertDic, delegate: nil , cancelButtonTitle: " 返回 " )

alertView. show ()

}

// 8.0 之后 收到远程推送通知

func application(application: UIApplication , didReceiveRemoteNotification userInfo: [ NSObject : AnyObject ], fetchCompletionHandler completionHandler: ( UIBackgroundFetchResult ) -> Void ) {

let notif    = userInfo as NSDictionary

let apsDic   = notif. objectForKey ( "aps" ) as NSDictionary

let alertDic = apsDic. objectForKey ( "alert" ) as String

var alertView = UIAlertView (title: " 远程推送通知 " , message: alertDic, delegate: nil , cancelButtonTitle: " 返回 " )

alertView. show ()

}

// 注册通知 alert 、 sound 、 badge ( 8.0 之后,必须要添加下面这段代码,否则注册失败)

func application(application: UIApplication , didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings ) {

application. registerForRemoteNotifications ()

}

****************************** 本地通知方法 ********** ***** ***************

//

//  TimeViewController.swift

//  UIControlDemo

//

//  Created by  on 14/12/10.

//  Copyright (c) 2014 年 马大哈 . All rights reserved.

//

import UIKit

class TimeViewController: BaseViewController {

var wordTextField: UITextField ? // 文字

var dateTextField: UITextField ? // 时间

var datePicker: UIDatePicker ?

override func viewDidLoad() {

super . viewDidLoad ()

self . title = " 时间 / 日期 / 本地通知 "

let leftBarButton: UIBarButtonItem = UIBarButtonItem (barButtonSystemItem: . Trash , target: self , action: "locaNotifcationDeleteAll" )

self . navigationItem . rightBarButtonItem = leftBarButton;

wordTextField = UITextField (frame: CGRectMake ( 50 , 80 , 200 , 40 ))

wordTextField ?. backgroundColor = . clearColor ()

wordTextField !. tag = 100

wordTextField ?. borderStyle = UITextBorderStyle . RoundedRect

wordTextField ?. keyboardType = UIKeyboardType . Default

wordTextField ?. returnKeyType = UIReturnKeyType . Done

wordTextField ?. contentVerticalAlignment = UIControlContentVerticalAlignment . Center

wordTextField ?. clearButtonMode = UITextFieldViewMode . WhileEditing

wordTextField ?. secureTextEntry = false

wordTextField ?. textColor = . blackColor ()

wordTextField ?. textAlignment = . Left

wordTextField ?. placeholder = " 键盘 "

wordTextField ?. font = UIFont . systemFontOfSize ( 15 )

self . view . addSubview ( wordTextField !)

dateTextField = UITextField (frame: CGRectMake ( 50 , 140 , 200 , 40 ))

dateTextField ?. backgroundColor = . clearColor ()

dateTextField !. tag = 101

dateTextField ?. borderStyle = UITextBorderStyle . RoundedRect

dateTextField ?. keyboardType = UIKeyboardType . Default

dateTextField ?. returnKeyType = UIReturnKeyType . Done

dateTextField ?. contentVerticalAlignment = UIControlContentVerticalAlignment . Center

dateTextField ?. textColor = . blackColor ()

dateTextField ?. textAlignment = . Left

dateTextField ?. placeholder = " 日期 picker"

dateTextField ?. font = UIFont . systemFontOfSize ( 15 )

self . view . addSubview ( dateTextField !)

datePicker = UIDatePicker ()

datePicker ?. datePickerMode = . DateAndTime

datePicker ?. timeZone = NSTimeZone . systemTimeZone ()

datePicker ?. addTarget ( self , action: "datePickerSelected:" , forControlEvents: UIControlEvents .ValueChanged)

dateTextField !. inputView = datePicker

var button = UIButton . buttonWithType ( UIButtonType . Custom ) as UIButton

button. frame = CGRectMake ( 200 , 200 , 50 , 30 )

button. backgroundColor = UIColor . redColor ()

button. setTitleColor ( UIColor . blackColor (), forState:.Normal)

button. setTitle ( " 保存 " , forState: UIControlState .Normal)

button. titleLabel !. font = UIFont . boldSystemFontOfSize ( CGFloat ( 20 ))

button. showsTouchWhenHighlighted = true

button. addTarget ( self , action: "saveLocalNotificationButton" , forControlEvents: UIControlEvents .TouchUpInside)

self . view . addSubview (button)

}

// 保存按钮方法

func saveLocalNotificationButton(){

var contentDic = [ "KEY" : "VALUE" ]

locaNotifcationSchedule (chedulDate: datePicker !. date , alertBody: " 通知看到 : /( wordTextField !. text ) " , content: contentDic)

var alertView = UIAlertView (title: " 保存成功 " , message: nil , delegate: nil , cancelButtonTitle: " 返回 " )

alertView. show ()

wordTextField ?. resignFirstResponder ()

dateTextField ?. resignFirstResponder ()

}

// 注册本地通知

func locaNotifcationSchedule(#chedulDate: NSDate ,alertBody: String ,content: NSDictionary ) {

var localNotif = UILocalNotification ()

localNotif. fireDate = chedulDate

localNotif. timeZone = NSTimeZone . defaultTimeZone ()

//        localNotif.repeatInterval = repeatInterval 0 代表不重复

localNotif. soundName =  "iPhone.caf" // 此属性可以不写(默认系统声音 UILocalNotificationDefaultSoundName )

//        localNotif.hasAction = true;

//        localNotif.alertAction = " 查看 ";

localNotif. alertBody = alertBody

localNotif. userInfo   = content

UIApplication . sharedApplication (). scheduleLocalNotification (localNotif)

}

// 删除所有注册的本地通知

func locaNotifcationDeleteAll() {

let application = UIApplication . sharedApplication ()

application. cancelAllLocalNotifications ()

var alertView = UIAlertView (title: " 所有本地通知都已移除 " , message: nil , delegate: nil , cancelButtonTitle: " 返回 " )

alertView. show ()

}

// 动态改变 textfield 内容

func datePickerSelected(datePicker: UIDatePicker ){

let dateString = timeDateFormatter (). stringFromDate (datePicker. date )

dateTextField !. text = dateString

}

override func touchesEnded(touches: NSSet , withEvent event: UIEvent ) {

wordTextField ?. resignFirstResponder ()

dateTextField ?. resignFirstResponder ()

}

override func didReceiveMemoryWarning() {

super . didReceiveMemoryWarning ()

}

}

   

时间: 2024-10-11 09:13:42

swift 本地通知、远程通知的相关文章

用 Houston 在本地调试远程通知

Houston 的背景 Houston 在 GitHub 上的地址:https://github.com/nomad/Houston,作者又是Mattt Thompson,简直是惨无人道啊,又高产,又有质量 Houston 能让我们在本地.甚至终端很方便的调试远程通知. 安装 首先在终端安装: $ gem install houston 我第一次安装的时候报了错,但是第二次就安装成功了: ... Installing ri documentation for houston-2.2.3 1 ge

Swift 本地推送通知UILocalNotification

Notification是智能手机应用开发中常用的信息传递机制,它不用消耗更多资源去不停的检查信息状态,可以非常好的节省资源. 在iOS中分为两种通知:本地.远程.本地的UILocalNotification由全局的NotificationManager统一管理,我们只需要将本地通知对象添加到系统的Notification队列中就可以了,系统会在指定的时间激发本地通知. 本地推送通知:UILocalNotification 如果要使用推送通知,必须先在苹果的推送通知服务里注册你要使用哪几种类型的

ios开发——实用技术OC-Swift篇&本地通知与远程通知详解

本地通知与远程通知详解 一:本地通知 Local Notification的作用 Local Notification(本地通知) :是根据本机状态做出的通知行为,因此,凡是仅需依赖本机状态即可判断需要发出通知的行为都可以或者说应该使用Local Notification来处理.比方说:iBeacon中进入了某个Beacon region,或者说自定义的一些定时提醒等. 构建Local Notification 在iOS中,构建LocalNotification非常简单,只需要掌握好NSLoca

iOS开发--本地通知与远程通知

iOS开发--本地通知与远程通知 作者 雷潮 关注 2016.02.01 00:18* 字数 1921 阅读 8898评论 1喜欢 41 这里是指推送通知跟NSNotification有区别: 1.NSNotification是系统内部发出通知,一般用于内部事件的监听,或者状态的改变等等,是不可见的2.本地通知与远程通知是可见的,主要用于告知用户或者发送一些App的内容更新,推送一些相关的消息,让用户知道App内部发生了什么事情. Paste_Image.png iOS常用通知 1.本地推送通知

ios 远程通知(Remote Notification)和本地通知(Local Notification)

ios通知分为远程通知和本地通知,远程通知需要连接网络,本地通知是不需要的,不管用户是打开应用还是关闭应用,我们的通知都会发出,并被客户端收到 我们使用远程通知主要是随时更新最新的数据给用户,使用本地通知主要是提醒用户来完成一些任务 远程通知 Remote Notification: 其主要的工作原理为:客户端发送自己的UUID和Bundle ID给苹果的APNs服务器-->苹果的APNs服务器加密后返回一个deviceToken给客户端-->客户端拿到devideToken后将其发送给app

(七十三)iOS本地推送通知的实现

iOS的推送通知分为本地推送和网络推送两种,如果App处于挂起状态,是可以发送本地通知的,如果已经被杀掉,则只有定时通知可以被执行,而类似于QQ的那种网络消息推送就无法实现了,因为App的网络模块在被杀掉后是无法执行的,这时候就要借助远程通知,通过苹果的服务器转发通知到手机,本文只介绍本地通知的用法. ①对于iOS8及以上的版本,需要注册本地通知才能使用,一般在AppDelegate中注册: if ([[UIDevice currentDevice].systemVersion doubleVa

iOS开发——远程通知,远程推送(RemoteNotification)

iOS中的远程通知,也叫远程推送,使用频率非常频繁,它主要是通过苹果apns服务器主动发起找到被推送的设备,把信息传达给用户,如果对应程序没有正在运行,那么远程通知就会先到通知中心,展示在通知栏上面,这里记录下我使用远程通知的几个步骤. 一.创建推送证书. 推送证书的创建非常简单,跟创建开发证书类似. 1. 创建APP ID,勾选Explicit App ID也就是明确的ID,这样才能勾选使用下面的Push Notification. 然后直接一路到complete即可. 2. 创建推送证书,推

iOS远程通知详解

一.创建证书 1         点击钥匙图标 2         在菜单栏中依次选择:钥匙串访问?偏好设置?证书选项卡,下面两项全部选关闭 3         生成证书请求:钥匙串访问?证书助理?从证书颁发机构请求证书 4         输入两个电子邮件地址和常用名称.电子邮件地址是你注册AppleID. a)   常用名称输入你在苹果网站注册的名称,其它名称没试过,不知道行不行. b)   选择"存储到磁盘".保存后的名称应该为:CertificateSigningRequest

本地推送通知UILocalNotification

1 - (IBAction)schedule { 2 // 1.创建本地推送通知对象 3 UILocalNotification *ln = [[UILocalNotification alloc] init]; 4 5 // 2.设置通知属性 6 // 音效文件名 7 ln.soundName = @"buyao.wav"; 8 9 // 通知的具体内容 10 ln.alertBody = @"重大新闻:xxxx xxxx被调查了...."; 11 12 // 锁