Активный текст уведомления переписывается в Swift - PullRequest
0 голосов
/ 22 октября 2018

Мы внедрили действенное уведомление с помощью службы расширения уведомлений.Мы получаем 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

Second Notification with One Button

First Notification with three Buttons after receiving Second Notification

...