import UIKit import UserNotifications import UserNotificationsUI class NotificationViewController: UIViewController, UNNotificationContentExtension { @IBOutlet var label: UILabel? override func viewDidLoad() { super.viewDidLoad() } func didReceive(_ notification: UNNotification) { self.label?.text = notification.request.content.body } }
import UIKit import UserNotifications class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() //设置推送内容 let content = UNMutableNotificationContent() content.title = "hangge.com" content.body = "做最好的开发者知识平台" //设置category标识符 content.categoryIdentifier = "myNotificationCategory" //设置通知触发器 let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false) //设置请求标识符 let requestIdentifier = "com.hangge.testNotification" //设置一个通知请求 let request = UNNotificationRequest(identifier: requestIdentifier, content: content, trigger: trigger) //将通知请求添加到发送中心 UNUserNotificationCenter.current().add(request) { error in if error == nil { print("Time Interval Notification scheduled: \(requestIdentifier)") } } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }
import UIKit import UserNotifications import UserNotificationsUI //资讯条目 struct NewsItem { let title: String let abstract: String let url: URL } class NotificationViewController: UIViewController, UNNotificationContentExtension { //显示资讯标题 @IBOutlet var titleLabel: UILabel! //显示资讯内容摘要 @IBOutlet weak var abstractLabel: UILabel! //显示资讯图片 @IBOutlet weak var imageView: UIImageView! //当前显示的资讯索引 private var index: Int = 0 //所有资讯条目 var items: [NewsItem] = [] override func viewDidLoad() { super.viewDidLoad() } //收到通知 func didReceive(_ notification: UNNotification) { //处理资讯条目 let content = notification.request.content if let news = content.userInfo["news"] as? [[String: String]] { for i in 0..<news.count { let title = news[i]["title"] ?? "" let abstract = news[i]["abstract"] ?? "" let url = content.attachments[i].url let presentItem = NewsItem(title: title, abstract: abstract, url: url) self.items.append(presentItem) } } //显示第一条资讯 updateNews(index: 0) } //更新显示的资讯内容 private func updateNews(index: Int) { let item = items[index] //更新标题和内容摘要 self.titleLabel!.text = item.title self.abstractLabel.text = item.abstract //更新图片 if item.url.startAccessingSecurityScopedResource() { self.imageView.image = UIImage(contentsOfFile: item.url.path) item.url.stopAccessingSecurityScopedResource() } self.index = index } //Action按钮点击响应 func didReceive(_ response: UNNotificationResponse, completionHandler completion: @escaping (UNNotificationContentExtensionResponseOption) -> Void) { if response.actionIdentifier == "change" { //切换下一条资讯 let nextIndex = (index + 1) % items.count updateNews(index: nextIndex) //保持通知继续被显示 completion(.doNotDismiss) } else if response.actionIdentifier == "open" { //取消这个通知并继续传递Action completion(.dismissAndForwardAction) } else if response.actionIdentifier == "dismiss" { //直接取消这个通知 completion(.dismiss) } else { //取消这个通知并继续传递Action completion(.dismissAndForwardAction) } } }
import UIKit import UserNotifications @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { UNUserNotificationCenter.current() .requestAuthorization(options: [.alert, .sound, .badge]) { (accepted, error) in if !accepted { print("用户不允许消息通知。") } } //注册category registerNotificationCategory() return true } func applicationWillResignActive(_ application: UIApplication) { } func applicationDidEnterBackground(_ application: UIApplication) { } func applicationWillEnterForeground(_ application: UIApplication) { } func applicationDidBecomeActive(_ application: UIApplication) { } func applicationWillTerminate(_ application: UIApplication) { } //注册一个category private func registerNotificationCategory() { let newsCategory: UNNotificationCategory = { //创建三个普通的按钮action let changeAction = UNNotificationAction( identifier: "change", title: "换一条", options: []) let openAction = UNNotificationAction( identifier: "open", title: "打开", options: [.foreground]) //创建普通的按钮action let cancelAction = UNNotificationAction( identifier: "cancel", title: "取消", options: [.destructive]) //创建category return UNNotificationCategory(identifier: "myNotificationCategory", actions: [changeAction, openAction, cancelAction], intentIdentifiers: [], options: []) }() //把category添加到通知中心 UNUserNotificationCenter.current().setNotificationCategories([newsCategory]) } }
import UIKit import UserNotifications class ViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() //设置推送内容 let content = UNMutableNotificationContent() content.body = "今日资讯精选【2017-12-12】" //设置通知category标识符 content.categoryIdentifier = "myNotificationCategory" //设置通知附件图片 let imageNames = ["image1", "image2", "image3"] let attachments = imageNames.flatMap { name -> UNNotificationAttachment? in if let imageURL = Bundle.main.url(forResource: name, withExtension: "png") { return try? UNNotificationAttachment(identifier: "\(name)", url: imageURL, options: nil) } return nil } content.attachments = attachments //设置通知附加信息(资讯标题和内容摘要) content.userInfo = ["news": [ ["title": "全国人民喜迎油价上涨", "abstract": "据国内多家测评机构的分析,国内成品油零售限价将迎来“两连涨”..."], ["title": "房价同比下降城市大幅扩容", "abstract": "70个大中城市中一二三线城市房价同比涨幅继续回落。这意味着,往年..."], ["title": "比特币市值再创新高", "abstract": "一项名为SegWit2X的技术取消升级,导致在本周一比特币市值蒸发多达380亿美元..."] ]] //设置通知触发器 let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false) //设置请求标识符 let requestIdentifier = "com.hangge.testNotification" //设置一个通知请求 let request = UNNotificationRequest(identifier: requestIdentifier, content: content, trigger: trigger) //将通知请求添加到发送中心 UNUserNotificationCenter.current().add(request) { error in if error == nil { print("Time Interval Notification scheduled: \(requestIdentifier)") } } } override func didReceiveMemoryWarning() { super.didReceiveMemoryWarning() } }