Мы внедрили действенное уведомление с помощью службы расширения уведомлений.Мы получаем push-уведомления, и он показывает соответствующий контент для заголовка уведомления, тела, кнопок действий.Мы определили 3 категории, скажем, onebtn , twobtn , threebtn и все уникальные действия для каждой категории.
Итак, все отлично работает дляодно уведомление, но поскольку мы получаем более одного уведомления в области уведомлений, текст кнопки недавнего действия уведомления заменяет текст всех остальных кнопок действия уведомления .Ex.Я получил уведомление для категории threebtn , тогда он покажет мне три кнопки с тремя разными текстами, скажем Now, Later и Cancel (Эти три названия кнопок будут частью полезной нагрузки, полученной отОтправить уведомление).Теперь я получил еще одно уведомление для категории twobtn с именами кнопок, Ответить и пометить как прочитанное и показано для этого уведомления.
Теперь проблема в том, что он перезаписывает имена кнопок категории twobtnк уведомлению, полученному для трехлетнего уведомления.Это означает, что когда я перетаскиваю и открываю уведомление категории threebtn, имена ее кнопок будут Ответить, пометить как оплаченные и отменить (третий текст по умолчанию, определенный при назначении действия) .Таким образом, каждое уведомление будет иметь имя «Ответить и пометить как оплаченное».
Пробные решения:
- Установить категории в качестве словаря под NSNotification (ранее мыдобавленные категории во время выполнения)
- Назначено уникальное действие и имя категории.
Я застрял с этой проблемой уже неделю, но не нашел правильного решения.Пожалуйста, дайте мне подсказку, чтобы я мог это исправить.
Спасибо.
class NotificationService: UNNotificationServiceExtension {
override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
let (pushNotificationBean, _) = saveNotificationAppGroupDefault(saveNotificationUserInfo: request.content.userInfo)
registerNotificationCategory(pushNotificationBean: pushNotificationBean)
self.contentHandler = contentHandler
bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
}
// MARK: - Register Notificaion Categories and Actions
func registerNotificationCategory(pushNotificationBean: PushNotificationBean) {
// Define Actions
if #available(iOS 10.0, *) {
// Define Action Yes
var singleBtnAction : UNNotificationAction
var trippleBtnYesAction : UNNotificationAction
var trippleBtnNoAction : UNNotificationAction
var trippleBtnPartialAction : UNNotificationAction
var doubleBtnYesAction : UNNotificationAction
var doubleBtNoAction : UNNotificationAction
// Positve Button Text
if let okActionText = pushNotificationBean.actionPositiveText, okActionText.count > 0{
// Single Button Action
singleBtnAction = UNNotificationAction(identifier: self.OkAction,
title: okActionText,
options: .foreground)
// Double Button Action
doubleBtnYesAction = UNNotificationAction(identifier: self.YesAction,
title: okActionText,
options: .foreground)
// Tripple Button Action
trippleBtnYesAction = UNNotificationAction(identifier: self.YesAction,
title: okActionText,
options: .foreground)
}else{
// Single Button Action
singleBtnAction = UNNotificationAction(identifier: self.OkAction,
title: self.OkAction,
options: .foreground)
// Double Button Action
doubleBtnYesAction = UNNotificationAction(identifier: self.YesAction,
title: self.YesAction,
options: .foreground)
// Tripple Button Action
trippleBtnYesAction = UNNotificationAction(identifier: self.YesAction,
title: self.YesAction,
options: .foreground)
}
// Negative Action Text
if let noActionText = pushNotificationBean.actionNegativeText, noActionText.count > 0{
// Double Button Action
doubleBtNoAction = UNNotificationAction(identifier: self.NoAction,
title: noActionText,
options: .foreground)
// Tripple Button Action
trippleBtnNoAction = UNNotificationAction(identifier: self.NoAction,
title: noActionText,
options: .foreground)
} else{
// Double Button Action
doubleBtNoAction = UNNotificationAction(identifier: self.NoAction,
title: self.NoAction,
options: .foreground)
// Tripple Button Action
trippleBtnNoAction = UNNotificationAction(identifier: self.NoAction,
title: self.NoAction,
options: .foreground)
}
// Partial Action Text
if let trippleBtnPartialActionText = pushNotificationBean.actionNeutralText, trippleBtnPartialActionText.count > 0{
// Tripple Button Action
trippleBtnPartialAction = UNNotificationAction(identifier: self.PartialAction,
title: trippleBtnPartialActionText,
options: .foreground)
}else{
// Tripple Button Action
trippleBtnPartialAction = UNNotificationAction(identifier: self.PartialAction,
title: self.PartialAction,
options: .foreground)
}
// Define Single Category
let singleButtonCategory = UNNotificationCategory(identifier: self.SingleButton,
actions: [singleBtnAction],
intentIdentifiers: [self.OkAction],
options: [])
// Define Double Category
let doubleButtonCategory = UNNotificationCategory(identifier: self.DoubleButton,
actions: [doubleBtnYesAction,doubleBtNoAction],
intentIdentifiers: [self.YesAction,self.NoAction],
options: [])
// Define Tripple Category
let tripleButtonCategory = UNNotificationCategory(identifier: self.TripleButton,
actions: [trippleBtnYesAction,trippleBtnNoAction,trippleBtnPartialAction],
intentIdentifiers: [self.YesAction,self.NoAction,self.PartialAction],
options: [])
UNUserNotificationCenter.current().setNotificationCategories([singleButtonCategory,doubleButtonCategory,tripleButtonCategory])
}
}
}
![First Notification with three buttons](https://i.stack.imgur.com/n2yXU.png)
![Second Notification with One Button](https://i.stack.imgur.com/xS58b.png)
![First Notification with three Buttons after receiving Second Notification](https://i.stack.imgur.com/4bdPs.png)