mirror of
https://github.com/jphong1111/awesome-ios-developer.git
synced 2024-12-22 17:15:13 +07:00
Add files via upload
This commit is contained in:
parent
c3d55e3937
commit
cfb186e0ea
@ -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)
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user