Files
OrderScheduling/OrderSchedulingNotificationService/NotificationService.swift
2023-09-13 10:58:41 +08:00

134 lines
6.4 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// NotificationService.swift
// OrderSchedulingNotificationService
//
// Created by on 2023/8/28.
//
import UserNotifications
import AVFoundation
class NotificationService: UNNotificationServiceExtension {
var contentHandler: ((UNNotificationContent) -> Void)?
var bestAttemptContent: UNMutableNotificationContent?
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
self.contentHandler = contentHandler
bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
if let bestAttemptContent = bestAttemptContent {
// Modify the notification content here...
JPushNotificationExtensionService.jpushSetAppkey(JPushKey)
JPushNotificationExtensionService.jpushReceive(request) {
contentHandler(request.content)
}
let userInfo = bestAttemptContent.userInfo
if let dict = GROUP.parserAlertToDictionary(userInfo: userInfo) {
if let title = dict[pushNoti_title_key] {
bestAttemptContent.title = title
}
if let body = dict[pushNoti_body_key] {
bestAttemptContent.body = body
}
}else if let body = GROUP.parserAlertToString(userInfo: userInfo) {
bestAttemptContent.body = body
}
//
if GROUP.isOrderPushNotification(userInfo: userInfo) == true {
var sound : UNNotificationSound?
let juheVehcileName = userInfo[pushNoti_juheVehcileName_key] as? String
if juheVehcileName?.isEmpty == false {
sound = UNNotificationSound(named: UNNotificationSoundName(rawValue: juheNewOrderAudio_key))
}else{
sound = UNNotificationSound(named: UNNotificationSoundName(rawValue: newOrderAudio_key))
}
bestAttemptContent.sound = sound
GROUP.setBestAttemptContentUserInfo(bestAttemptContentUserInfo: userInfo)
contentHandler(bestAttemptContent)
}else{
// group
if let isShowPop = (userInfo[pushNoti_isShowPop_key] as? Bool), isShowPop == true {
if let userInfo = GROUP.bestAttemptContentUserInfo,GROUP.isOrderPushNotification(userInfo: userInfo) == true {
}else{
GROUP.setBestAttemptContentUserInfo(bestAttemptContentUserInfo: userInfo)
}
}
//
if GROUP.isAppointmentPushNotification(userInfo: userInfo) == true {
bestAttemptContent.sound = UNNotificationSound(named: UNNotificationSoundName(rawValue: appointmentOrderAudio_key))
contentHandler(bestAttemptContent)
}else if let broadcastKeywords = (userInfo[pushNoti_broadcastKeywords_key] as? String),broadcastKeywords.isEmpty == false {
bestAttemptContent.sound = .default
contentHandler(bestAttemptContent)
}else{
bestAttemptContent.sound = .default
contentHandler(bestAttemptContent)
}
}
}
}
override func serviceExtensionTimeWillExpire() {
// Called just before the extension will be terminated by the system.
// Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
let userInfo = bestAttemptContent.userInfo
if let dict = GROUP.parserAlertToDictionary(userInfo: userInfo) {
if let title = dict[pushNoti_title_key] {
bestAttemptContent.title = title
}
if let body = dict[pushNoti_body_key] {
bestAttemptContent.body = body
}
}else if let body = GROUP.parserAlertToString(userInfo: userInfo) {
bestAttemptContent.body = body
}
//
if GROUP.isOrderPushNotification(userInfo: userInfo) == true {
var sound : UNNotificationSound?
let juheVehcileName = userInfo[pushNoti_juheVehcileName_key] as? String
if juheVehcileName?.isEmpty == false {
sound = UNNotificationSound(named: UNNotificationSoundName(rawValue: juheNewOrderAudio_key))
}else{
sound = UNNotificationSound(named: UNNotificationSoundName(rawValue: newOrderAudio_key))
}
bestAttemptContent.sound = sound
GROUP.setBestAttemptContentUserInfo(bestAttemptContentUserInfo: userInfo)
contentHandler(bestAttemptContent)
}else{
// group
if let isShowPop = (userInfo[pushNoti_isShowPop_key] as? Bool), isShowPop == true {
if let userInfo = GROUP.bestAttemptContentUserInfo,GROUP.isOrderPushNotification(userInfo: userInfo) == true {
}else{
GROUP.setBestAttemptContentUserInfo(bestAttemptContentUserInfo: userInfo)
}
}
//
if GROUP.isAppointmentPushNotification(userInfo: userInfo) == true {
bestAttemptContent.sound = UNNotificationSound(named: UNNotificationSoundName(rawValue: appointmentOrderAudio_key))
contentHandler(bestAttemptContent)
}else if let broadcastKeywords = (userInfo[pushNoti_broadcastKeywords_key] as? String),broadcastKeywords.isEmpty == false {
bestAttemptContent.sound = .default
contentHandler(bestAttemptContent)
}else{
bestAttemptContent.sound = .default
contentHandler(bestAttemptContent)
}
}
}
}
}