Add files via upload

This commit is contained in:
Jungpyo Hong 2021-06-22 10:07:06 -05:00 committed by GitHub
parent c3d55e3937
commit cfb186e0ea
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -0,0 +1,89 @@
//
// LocalNotificationManager.swift
// Local_Notification
//
// Created by JungpyoHong on 6/21/21.
//
import Foundation
import UserNotifications
import UIKit
struct LocalNotification {
var id: String
var title: String
var body: String
}
enum LocalNotificationDurationType {
case days
case hours
case minutes
case seconds
}
struct LocalNotificationManager {
static private var notifications = [LocalNotification]()
static private func requestPermission() -> Void {
UNUserNotificationCenter
.current()
.requestAuthorization(options: [.alert, .badge, .alert]) { granted, error in
if granted == true && error == nil {
// Permission accept
}
}
}
static private func addNotification(title: String, body: String) -> Void {
notifications.append(LocalNotification(id: UUID().uuidString, title: title, body: body))
}
static private func scheduleNotifications(_ durationInSeconds: Int, repeats: Bool, userInfo: [AnyHashable : Any]) {
UIApplication.shared.applicationIconBadgeNumber = 0
for notification in notifications {
let content = UNMutableNotificationContent()
content.title = notification.title
content.body = notification.body
content.sound = UNNotificationSound.default
content.badge = NSNumber(value: UIApplication.shared.applicationIconBadgeNumber + 1)
content.userInfo = userInfo
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: TimeInterval(durationInSeconds), repeats: repeats)
let request = UNNotificationRequest(identifier: notification.id, content: content, trigger: trigger)
UNUserNotificationCenter.current().removeAllPendingNotificationRequests()
UNUserNotificationCenter.current().add(request) { error in
guard error == nil else { return }
print("Scheduling notification with id: \(notification.id)")
}
}
notifications.removeAll()
}
static private func scheduleNotifications(_ duration: Int, of type: LocalNotificationDurationType, repeats: Bool, userInfo: [AnyHashable : Any]) {
var seconds = 0
switch type {
case .seconds:
seconds = duration
case .minutes:
seconds = duration * 60
case .hours:
seconds = duration * 60 * 60
case .days:
seconds = duration * 60 * 60 * 24
}
scheduleNotifications(seconds, repeats: repeats, userInfo: userInfo)
}
static func cancel() {
UNUserNotificationCenter.current().removeAllPendingNotificationRequests()
}
static func setNotification(_ duration: Int, of type: LocalNotificationDurationType, repeats: Bool, title: String, body: String, userInfo: [AnyHashable : Any]) {
requestPermission()
addNotification(title: title, body: body)
scheduleNotifications(duration, of: type, repeats: repeats, userInfo: userInfo)
}
}