В настоящее время я пытаюсь использовать Notification Service Extension
в качестве обходного пути для приложения, которое не получает действительное количество значков в push notification payload
.Чтобы исправить это, я решил создать расширение службы уведомлений, которое будет отслеживать количество полученных сообщений и соответствующим образом отслеживать количество.Я получил эту работу на прошлой неделе, теперь я продолжил ее, и она больше не работает, и я не понимаю, почему это так.
Идентификатор пакета Notification Service Extension
изменяется в соответствии с целью,Этот сценарий предварительной сборки выглядит следующим образом для 2 целей, которые у меня есть
buildID=${PRODUCT_BUNDLE_IDENTIFIER}
extId="AppPushNotification"
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $buildID.$extId" "${SRCROOT}/${extId}/Info.plist"
Код, который я использую в своем расширении
import UIKit
import UserNotifications
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...
let userDefaults = UserDefaults.init(suiteName: "group.com.my.bundle.notification-service-extension")
let unreadMessages = userDefaults?.integer(forKey: "unreadMessages")
let newUnreadMessages = unreadMessages != nil ? unreadMessages! + 1 : 0
bestAttemptContent.title = "\(bestAttemptContent.title) [modified]"
bestAttemptContent.badge = NSNumber(value: newUnreadMessages)
let userInfo = bestAttemptContent.userInfo
guard let info = userInfo["aps"] as? [AnyHashable: Any],
let data = info["data"] as? [AnyHashable: Any],
let chatId = data["chatId"] as? String else { return }
let unreadMessagesInChat = userDefaults?.integer(forKey: chatId)
let newUnreadMessagesInChat = unreadMessagesInChat != nil ? unreadMessagesInChat! + 1 : 0
userDefaults?.set(newUnreadMessages, forKey: "unreadMessages")
userDefaults?.set(newUnreadMessagesInChat, forKey: chatId)
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 {
contentHandler(bestAttemptContent)
}
}
}
Я загружаю свою полезную нагрузку тестового уведомления наиспользуя Pusher
.Полезная нагрузка, которую я отправляю:
{
"aps":{
"mutalbe-content":1,
"content-available":1,
"sound":"true",
"alert":{
"title":"Vera Pauw",
"body":"test bericht"
},
"data":{
"type":"test",
"message":"test bericht",
"chatId":"3b002aa6-1117-4206-b54f-8bc2bd689f1c",
"fromId":"",
"fromname":"Vera Pauw"
}
}
}
Я получаю уведомление успешно, но он никогда не вызывает код расширения.Я пробовал отлаживать несколькими способами, например, выбирать цель отладки после запуска приложения или запускать приложение из цели расширения, но процесс Notification Service
всегда скажет Waiting to Attach
.Я пытался поиграться с полезными данными push-уведомлений, но это не изменило результат.
Кто-нибудь знает, почему это происходит или где я ошибаюсь.