From 5e4bf5c3dd096c1641a103c183febfad31a59d1b Mon Sep 17 00:00:00 2001 From: Matheus Gois Date: Thu, 13 Jun 2019 16:48:51 -0300 Subject: [PATCH 1/3] bronze --- .../project.pbxproj | 34 +++- .../Base.lproj/Main.storyboard | 39 ----- .../BaseViewController.swift | 47 ----- .../Controller/BaseViewController.swift | 24 +++ .../Controller/EditViewController.swift | 83 +++++++++ .../Controller/sendNotification.swift | 39 +++++ .../Base.lproj/LaunchScreen.storyboard | 0 .../View/Base.lproj/Main.storyboard | 162 ++++++++++++++++++ 8 files changed, 337 insertions(+), 91 deletions(-) delete mode 100644 LocalNotificationBase/Base.lproj/Main.storyboard delete mode 100644 LocalNotificationBase/BaseViewController.swift create mode 100644 LocalNotificationBase/Controller/BaseViewController.swift create mode 100644 LocalNotificationBase/Controller/EditViewController.swift create mode 100644 LocalNotificationBase/Controller/sendNotification.swift rename LocalNotificationBase/{ => View}/Base.lproj/LaunchScreen.storyboard (100%) create mode 100644 LocalNotificationBase/View/Base.lproj/Main.storyboard diff --git a/LocalNotificationBase.xcodeproj/project.pbxproj b/LocalNotificationBase.xcodeproj/project.pbxproj index dd7afac..7a0acbc 100644 --- a/LocalNotificationBase.xcodeproj/project.pbxproj +++ b/LocalNotificationBase.xcodeproj/project.pbxproj @@ -7,6 +7,8 @@ objects = { /* Begin PBXBuildFile section */ + 869E664C22B2C8A4000E5866 /* EditViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 869E664B22B2C8A4000E5866 /* EditViewController.swift */; }; + 869E665022B2C958000E5866 /* sendNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 869E664F22B2C958000E5866 /* sendNotification.swift */; }; AA6671C922B1292D00824252 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA6671C822B1292D00824252 /* AppDelegate.swift */; }; AA6671CB22B1292D00824252 /* BaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA6671CA22B1292D00824252 /* BaseViewController.swift */; }; AA6671CE22B1292D00824252 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA6671CC22B1292D00824252 /* Main.storyboard */; }; @@ -15,6 +17,8 @@ /* End PBXBuildFile section */ /* Begin PBXFileReference section */ + 869E664B22B2C8A4000E5866 /* EditViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditViewController.swift; sourceTree = ""; }; + 869E664F22B2C958000E5866 /* sendNotification.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = sendNotification.swift; sourceTree = ""; }; AA6671C522B1292D00824252 /* LocalNotificationBase.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = LocalNotificationBase.app; sourceTree = BUILT_PRODUCTS_DIR; }; AA6671C822B1292D00824252 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; AA6671CA22B1292D00824252 /* BaseViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseViewController.swift; sourceTree = ""; }; @@ -35,6 +39,25 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 869E664D22B2C8C3000E5866 /* View */ = { + isa = PBXGroup; + children = ( + AA6671D122B1293000824252 /* LaunchScreen.storyboard */, + AA6671CC22B1292D00824252 /* Main.storyboard */, + ); + path = View; + sourceTree = ""; + }; + 869E664E22B2C8CF000E5866 /* Controller */ = { + isa = PBXGroup; + children = ( + 869E664B22B2C8A4000E5866 /* EditViewController.swift */, + AA6671CA22B1292D00824252 /* BaseViewController.swift */, + 869E664F22B2C958000E5866 /* sendNotification.swift */, + ); + path = Controller; + sourceTree = ""; + }; AA6671BC22B1292D00824252 = { isa = PBXGroup; children = ( @@ -54,11 +77,10 @@ AA6671C722B1292D00824252 /* LocalNotificationBase */ = { isa = PBXGroup; children = ( + 869E664D22B2C8C3000E5866 /* View */, + 869E664E22B2C8CF000E5866 /* Controller */, AA6671C822B1292D00824252 /* AppDelegate.swift */, - AA6671CA22B1292D00824252 /* BaseViewController.swift */, - AA6671CC22B1292D00824252 /* Main.storyboard */, AA6671CF22B1293000824252 /* Assets.xcassets */, - AA6671D122B1293000824252 /* LaunchScreen.storyboard */, AA6671D422B1293000824252 /* Info.plist */, ); path = LocalNotificationBase; @@ -136,6 +158,8 @@ buildActionMask = 2147483647; files = ( AA6671CB22B1292D00824252 /* BaseViewController.swift in Sources */, + 869E664C22B2C8A4000E5866 /* EditViewController.swift in Sources */, + 869E665022B2C958000E5866 /* sendNotification.swift in Sources */, AA6671C922B1292D00824252 /* AppDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -283,7 +307,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = GT48V5L69E; + DEVELOPMENT_TEAM = CTAFH43K36; INFOPLIST_FILE = LocalNotificationBase/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -301,7 +325,7 @@ buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_STYLE = Automatic; - DEVELOPMENT_TEAM = GT48V5L69E; + DEVELOPMENT_TEAM = CTAFH43K36; INFOPLIST_FILE = LocalNotificationBase/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", diff --git a/LocalNotificationBase/Base.lproj/Main.storyboard b/LocalNotificationBase/Base.lproj/Main.storyboard deleted file mode 100644 index 0d2afb5..0000000 --- a/LocalNotificationBase/Base.lproj/Main.storyboard +++ /dev/null @@ -1,39 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/LocalNotificationBase/BaseViewController.swift b/LocalNotificationBase/BaseViewController.swift deleted file mode 100644 index b3615fb..0000000 --- a/LocalNotificationBase/BaseViewController.swift +++ /dev/null @@ -1,47 +0,0 @@ -// -// ViewController.swift -// LocalNotificationBase -// -// Created by Bruno Omella Mainieri on 12/06/19. -// Copyright © 2019 Bruno Omella Mainieri. All rights reserved. -// - -import UIKit -import UserNotifications - -class BaseViewController: UIViewController { - - override func viewDidLoad() { - super.viewDidLoad() - // Do any additional setup after loading the view. - } - - @IBAction func remindButton(_ sender: Any) { - let notificationCenter = UNUserNotificationCenter.current() - notificationCenter.getNotificationSettings { (settings) in - if settings.authorizationStatus == .authorized { - - let content = UNMutableNotificationContent() - content.title = NSString.localizedUserNotificationString(forKey: "Lembre-se", arguments: nil) - content.body = NSString.localizedUserNotificationString(forKey: "Você se lembrou", arguments: nil) - content.sound = UNNotificationSound.default - - let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false) - - let request = UNNotificationRequest(identifier: "5seconds", content: content, trigger: trigger) - - let center = UNUserNotificationCenter.current() - center.add(request) { (error : Error?) in - if let error = error { - print(error.localizedDescription) - } - } - - } else { - print("Impossível mandar notificação - permissão negada") - } - } - } - -} - diff --git a/LocalNotificationBase/Controller/BaseViewController.swift b/LocalNotificationBase/Controller/BaseViewController.swift new file mode 100644 index 0000000..0fb59bd --- /dev/null +++ b/LocalNotificationBase/Controller/BaseViewController.swift @@ -0,0 +1,24 @@ +// +// ViewController.swift +// LocalNotificationBase +// +// Created by Bruno Omella Mainieri on 12/06/19. +// Copyright © 2019 Bruno Omella Mainieri. All rights reserved. +// + +import UIKit +import UserNotifications + +class BaseViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + // Do any additional setup after loading the view. + } + + @IBAction func remindButton(_ sender: Any) { + sendNotificationLocal("Lembre-se", "ocê se lembrou", "5", 5, true, 1) + } + +} + diff --git a/LocalNotificationBase/Controller/EditViewController.swift b/LocalNotificationBase/Controller/EditViewController.swift new file mode 100644 index 0000000..b151db9 --- /dev/null +++ b/LocalNotificationBase/Controller/EditViewController.swift @@ -0,0 +1,83 @@ +// +// editViewController.swift +// LocalNotificationBase +// +// Created by Matheus Gois on 13/06/19. +// Copyright © 2019 Bruno Omella Mainieri. All rights reserved. +// + +import UIKit + +class EditViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource { + + + @IBOutlet weak var titleNotification: UITextField! + @IBOutlet weak var bodyNotification: UITextField! + + @IBOutlet weak var changeTimePickerNotification: UIPickerView! + @IBOutlet weak var enableSoundNotification: UISwitch! + @IBOutlet weak var enableBadgeNotification: UISwitch! + + var array = ["1","2","3","4","5","6","7","8","9","10"] + var timeSelected = "" + + @IBAction func sendNotification(_ sender: UIButton) { + let title = titleNotification.text as! String + let body = bodyNotification.text as! String + let stateBadge = self.enableBadgeNotification.isOn + let stateSound = self.enableSoundNotification.isOn + guard let time = TimeInterval(self.timeSelected) else { return } + + sendNotificationLocal(title, body, "1", time, stateSound, (stateBadge ? 1 : 0)) + + } + + override func viewDidLoad() { + super.viewDidLoad() + + timeSelected = array[0] + + // Do any additional setup after loading the view. + self.changeTimePickerNotification.delegate = self + self.changeTimePickerNotification.dataSource = self + } + + + + func numberOfComponents(in pickerView: UIPickerView) -> Int { + return 1 + } + + func pickerView(_ pickerView: UIPickerView, numberOfRowsInComponent component: Int) -> Int { + return array.count + } + func pickerView(_ pickerView: UIPickerView, titleForRow row: Int, forComponent component: Int) -> String? { + return array[row] + } + + func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) { + timeSelected = array[row] + } + + + +} + + +//func stringFromTimeInterval (interval: String) -> TimeInterval { +// let endingDate = Date() +// if let timeInterval = TimeInterval(interval) { +// let startingDate = endingDate.addingTimeInterval(-timeInterval) +// let calendar = Calendar.current +// +// var componentsNow = calendar.dateComponents([.hour, .minute, .second], from: startingDate, to: endingDate) +// if let hour = componentsNow.hour, let minute = componentsNow.minute, let seconds = componentsNow.second { +// return "\(hour):\(minute):\(seconds)" +// } else { +// return "00:00:00" +// } +// +// } else { +// return "00:00:00" +// } +//} diff --git a/LocalNotificationBase/Controller/sendNotification.swift b/LocalNotificationBase/Controller/sendNotification.swift new file mode 100644 index 0000000..8bada2c --- /dev/null +++ b/LocalNotificationBase/Controller/sendNotification.swift @@ -0,0 +1,39 @@ +// +// sendNotification.swift +// LocalNotificationBase +// +// Created by Matheus Gois on 13/06/19. +// Copyright © 2019 Bruno Omella Mainieri. All rights reserved. +// + +import Foundation +import UserNotifications + +func sendNotificationLocal(_ title:String, _ body:String, _ identifier: String, _ timeInterval:TimeInterval, _ sound:Bool, _ badge:NSNumber) -> Void{ + let notificationCenter = UNUserNotificationCenter.current() + notificationCenter.getNotificationSettings { (settings) in + if settings.authorizationStatus == .authorized { + + let content = UNMutableNotificationContent() + content.title = NSString.localizedUserNotificationString(forKey: title, arguments: nil) + content.body = NSString.localizedUserNotificationString(forKey: body, arguments: nil) + + content.sound = sound ? UNNotificationSound.default : nil + content.badge = badge + + let trigger = UNTimeIntervalNotificationTrigger(timeInterval: timeInterval, repeats: false) + + let request = UNNotificationRequest(identifier: identifier, content: content, trigger: trigger) + + let center = UNUserNotificationCenter.current() + center.add(request) { (error : Error?) in + if let error = error { + print(error.localizedDescription) + } + } + + } else { + print("Impossível mandar notificação - permissão negada") + } + } +} diff --git a/LocalNotificationBase/Base.lproj/LaunchScreen.storyboard b/LocalNotificationBase/View/Base.lproj/LaunchScreen.storyboard similarity index 100% rename from LocalNotificationBase/Base.lproj/LaunchScreen.storyboard rename to LocalNotificationBase/View/Base.lproj/LaunchScreen.storyboard diff --git a/LocalNotificationBase/View/Base.lproj/Main.storyboard b/LocalNotificationBase/View/Base.lproj/Main.storyboard new file mode 100644 index 0000000..88d3a1a --- /dev/null +++ b/LocalNotificationBase/View/Base.lproj/Main.storyboard @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From a6fc31cb7fffe6e1821aa153045fca87d1c034be Mon Sep 17 00:00:00 2001 From: Matheus Gois Date: Thu, 13 Jun 2019 17:02:03 -0300 Subject: [PATCH 2/3] icon 0 --- LocalNotificationBase/AppDelegate.swift | 1 + 1 file changed, 1 insertion(+) diff --git a/LocalNotificationBase/AppDelegate.swift b/LocalNotificationBase/AppDelegate.swift index 07da379..275d352 100644 --- a/LocalNotificationBase/AppDelegate.swift +++ b/LocalNotificationBase/AppDelegate.swift @@ -40,6 +40,7 @@ class AppDelegate: UIResponder, UIApplicationDelegate { func applicationWillEnterForeground(_ application: UIApplication) { // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. + application.applicationIconBadgeNumber = 0 } func applicationDidBecomeActive(_ application: UIApplication) { From 846d4be34146c211d6f43669aa8bba5654872f59 Mon Sep 17 00:00:00 2001 From: Matheus Gois Date: Fri, 14 Jun 2019 12:13:09 -0300 Subject: [PATCH 3/3] ouro e prata feitos --- .../project.pbxproj | 8 ++ LocalNotificationBase/AppDelegate.swift | 97 +++++++++++++++++- .../Controller/BaseViewController.swift | 5 +- .../Controller/HaViewController.swift | 30 ++++++ .../Controller/sendNotification.swift | 13 +++ .../View/Base.lproj/Main.storyboard | 27 ++++- LocalNotificationBase/logo.png | Bin 0 -> 55976 bytes 7 files changed, 173 insertions(+), 7 deletions(-) create mode 100644 LocalNotificationBase/Controller/HaViewController.swift create mode 100644 LocalNotificationBase/logo.png diff --git a/LocalNotificationBase.xcodeproj/project.pbxproj b/LocalNotificationBase.xcodeproj/project.pbxproj index 7a0acbc..56f99b0 100644 --- a/LocalNotificationBase.xcodeproj/project.pbxproj +++ b/LocalNotificationBase.xcodeproj/project.pbxproj @@ -9,6 +9,8 @@ /* Begin PBXBuildFile section */ 869E664C22B2C8A4000E5866 /* EditViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 869E664B22B2C8A4000E5866 /* EditViewController.swift */; }; 869E665022B2C958000E5866 /* sendNotification.swift in Sources */ = {isa = PBXBuildFile; fileRef = 869E664F22B2C958000E5866 /* sendNotification.swift */; }; + 869E665222B2F071000E5866 /* logo.png in Resources */ = {isa = PBXBuildFile; fileRef = 869E665122B2F071000E5866 /* logo.png */; }; + 869E665422B2F70E000E5866 /* HaViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 869E665322B2F70E000E5866 /* HaViewController.swift */; }; AA6671C922B1292D00824252 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA6671C822B1292D00824252 /* AppDelegate.swift */; }; AA6671CB22B1292D00824252 /* BaseViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = AA6671CA22B1292D00824252 /* BaseViewController.swift */; }; AA6671CE22B1292D00824252 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = AA6671CC22B1292D00824252 /* Main.storyboard */; }; @@ -19,6 +21,8 @@ /* Begin PBXFileReference section */ 869E664B22B2C8A4000E5866 /* EditViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EditViewController.swift; sourceTree = ""; }; 869E664F22B2C958000E5866 /* sendNotification.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = sendNotification.swift; sourceTree = ""; }; + 869E665122B2F071000E5866 /* logo.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = logo.png; sourceTree = ""; }; + 869E665322B2F70E000E5866 /* HaViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HaViewController.swift; sourceTree = ""; }; AA6671C522B1292D00824252 /* LocalNotificationBase.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = LocalNotificationBase.app; sourceTree = BUILT_PRODUCTS_DIR; }; AA6671C822B1292D00824252 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; AA6671CA22B1292D00824252 /* BaseViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = BaseViewController.swift; sourceTree = ""; }; @@ -54,6 +58,7 @@ 869E664B22B2C8A4000E5866 /* EditViewController.swift */, AA6671CA22B1292D00824252 /* BaseViewController.swift */, 869E664F22B2C958000E5866 /* sendNotification.swift */, + 869E665322B2F70E000E5866 /* HaViewController.swift */, ); path = Controller; sourceTree = ""; @@ -80,6 +85,7 @@ 869E664D22B2C8C3000E5866 /* View */, 869E664E22B2C8CF000E5866 /* Controller */, AA6671C822B1292D00824252 /* AppDelegate.swift */, + 869E665122B2F071000E5866 /* logo.png */, AA6671CF22B1293000824252 /* Assets.xcassets */, AA6671D422B1293000824252 /* Info.plist */, ); @@ -144,6 +150,7 @@ isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( + 869E665222B2F071000E5866 /* logo.png in Resources */, AA6671D322B1293000824252 /* LaunchScreen.storyboard in Resources */, AA6671D022B1293000824252 /* Assets.xcassets in Resources */, AA6671CE22B1292D00824252 /* Main.storyboard in Resources */, @@ -157,6 +164,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 869E665422B2F70E000E5866 /* HaViewController.swift in Sources */, AA6671CB22B1292D00824252 /* BaseViewController.swift in Sources */, 869E664C22B2C8A4000E5866 /* EditViewController.swift in Sources */, 869E665022B2C958000E5866 /* sendNotification.swift in Sources */, diff --git a/LocalNotificationBase/AppDelegate.swift b/LocalNotificationBase/AppDelegate.swift index 275d352..3959af9 100644 --- a/LocalNotificationBase/AppDelegate.swift +++ b/LocalNotificationBase/AppDelegate.swift @@ -13,16 +13,18 @@ import UserNotifications class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? - + let notificationCenter = UNUserNotificationCenter.current() func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. - let options: UNAuthorizationOptions = [.alert,.sound,.badge] - let notificationCenter = UNUserNotificationCenter.current() + notificationCenter.delegate = self + + let options: UNAuthorizationOptions = [.alert, .sound, .badge] + notificationCenter.requestAuthorization(options: options) { (didAllow, error) in if !didAllow { - print("Notifications not allowed by user") + print("User has declined notifications") } } return true @@ -54,3 +56,90 @@ class AppDelegate: UIResponder, UIApplicationDelegate { } +extension AppDelegate: UNUserNotificationCenterDelegate { + + + + func userNotificationCenter(_ center: UNUserNotificationCenter, + willPresent notification: UNNotification, + withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { + + completionHandler([.alert, .sound]) + } + + + + func userNotificationCenter(_ center: UNUserNotificationCenter, + didReceive response: UNNotificationResponse, + withCompletionHandler completionHandler: @escaping () -> Void) { + + //TAKE REPONSE OF THE ACTION + let identifier = response.actionIdentifier + + + //TAKE OPTION OF THE ACTION + if identifier == "repeat"{ + scheduleNotification("title", "String", "String", "identifier") + } + else if identifier == "open" { + + //Create a instance of the ViewController + let storyboard = UIStoryboard(name: "Main", bundle: nil); + let viewController: HaViewController = storyboard.instantiateViewController(withIdentifier: "HaViewController") as! HaViewController; + + // Then push that view controller onto the navigation stack + let rootViewController = self.window!.rootViewController as! UINavigationController; + rootViewController.pushViewController(viewController, animated: true); + + } + + completionHandler() + } + + + + func scheduleNotification(_ title:String, _ subtitle:String, _ body:String, _ identifier:String) { + + let content = UNMutableNotificationContent() + + //CREATE BODY OF THE NOTIFICATION + content.title = title + content.subtitle = subtitle + content.body = body + content.sound = UNNotificationSound.default + content.badge = 1 + content.categoryIdentifier = identifier + + + //SET IMAGE + let imageName = "logo" + guard let imageURL = Bundle.main.url(forResource: imageName, withExtension: "png") else { return } + let attachment = try! UNNotificationAttachment(identifier: imageName, url: imageURL, options: .none) + content.attachments = [attachment] + + + + + //REQUEST NOTIFICATION + let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 1, repeats: false) + let request = UNNotificationRequest(identifier: identifier, content: content, trigger: trigger) + + notificationCenter.add(request) { (error) in + if let error = error { + print("Error \(error.localizedDescription)") + } + } + + + + //ACTIONS IN THE NOTIFICATION + let snoozeAction = UNNotificationAction(identifier: "repeat", title: "Repeat", options: []) + let deleteAction = UNNotificationAction(identifier: "open", title: "Open", options: [.foreground]) + let category = UNNotificationCategory(identifier: identifier, + actions: [snoozeAction, deleteAction], + intentIdentifiers: [], + options: []) + + notificationCenter.setNotificationCategories([category]) + } +} diff --git a/LocalNotificationBase/Controller/BaseViewController.swift b/LocalNotificationBase/Controller/BaseViewController.swift index 0fb59bd..eb6da47 100644 --- a/LocalNotificationBase/Controller/BaseViewController.swift +++ b/LocalNotificationBase/Controller/BaseViewController.swift @@ -10,14 +10,15 @@ import UIKit import UserNotifications class BaseViewController: UIViewController { - + var appDelegate = UIApplication.shared.delegate as? AppDelegate override func viewDidLoad() { super.viewDidLoad() // Do any additional setup after loading the view. } @IBAction func remindButton(_ sender: Any) { - sendNotificationLocal("Lembre-se", "ocê se lembrou", "5", 5, true, 1) +// sendNotificationLocal("Lembre-se", "ocê se lembrou", "5", 5, true, 1) + self.appDelegate?.scheduleNotification("title", "subtitle", "body", "identifier") } } diff --git a/LocalNotificationBase/Controller/HaViewController.swift b/LocalNotificationBase/Controller/HaViewController.swift new file mode 100644 index 0000000..fbbbb8a --- /dev/null +++ b/LocalNotificationBase/Controller/HaViewController.swift @@ -0,0 +1,30 @@ +// +// HaViewController.swift +// LocalNotificationBase +// +// Created by Matheus Gois on 13/06/19. +// Copyright © 2019 Bruno Omella Mainieri. All rights reserved. +// + +import UIKit + +class HaViewController: UIViewController { + + override func viewDidLoad() { + super.viewDidLoad() + + // Do any additional setup after loading the view. + } + + + /* + // MARK: - Navigation + + // In a storyboard-based application, you will often want to do a little preparation before navigation + override func prepare(for segue: UIStoryboardSegue, sender: Any?) { + // Get the new view controller using segue.destination. + // Pass the selected object to the new view controller. + } + */ + +} diff --git a/LocalNotificationBase/Controller/sendNotification.swift b/LocalNotificationBase/Controller/sendNotification.swift index 8bada2c..a69dfa1 100644 --- a/LocalNotificationBase/Controller/sendNotification.swift +++ b/LocalNotificationBase/Controller/sendNotification.swift @@ -32,6 +32,19 @@ func sendNotificationLocal(_ title:String, _ body:String, _ identifier: String, } } + + + //Actions + let snoozeAction = UNNotificationAction(identifier: "Snooze", title: "Snooze", options: []) + let deleteAction = UNNotificationAction(identifier: "DeleteAction", title: "Delete", options: [.destructive]) + let category = UNNotificationCategory(identifier: identifier, + actions: [snoozeAction, deleteAction], + intentIdentifiers: [], + options: []) + + center.setNotificationCategories([category]) + + } else { print("Impossível mandar notificação - permissão negada") } diff --git a/LocalNotificationBase/View/Base.lproj/Main.storyboard b/LocalNotificationBase/View/Base.lproj/Main.storyboard index 88d3a1a..8e4a25a 100644 --- a/LocalNotificationBase/View/Base.lproj/Main.storyboard +++ b/LocalNotificationBase/View/Base.lproj/Main.storyboard @@ -13,7 +13,7 @@ - + @@ -43,6 +43,30 @@ + + + + + + + + + + + + + + + + + + @@ -152,6 +176,7 @@ + diff --git a/LocalNotificationBase/logo.png b/LocalNotificationBase/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..87e9f4a7e53d0cc49657c3204d7a60ce42c9f9de GIT binary patch literal 55976 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�N7W2p98OmMy+cAvBljXq7F2TGsCRJAj{ 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 ROB013la-c6xdtA8{11?fT