Как активировать didReceiveRemoteNotification из UNNotificationContentExtension, когда UNNotificationExtensionUserInteractionEnabled имеет значение true - PullRequest
1 голос
/ 14 мая 2019

Справочная информация:

Я реализовал UNNotificationContentExtension, чтобы можно было отформатировать полученные данные APNS и отобразить их в соответствии с моими потребностями, как показано ниже

enter image description here

Я бы хотел, чтобы пользователь нажимал на звезды и оценивал их, поэтому я включил взаимодействие с пользователем на UNNotificationContentExtension, используя

<dict>
    <key>NSExtensionAttributes</key>
    <dict>
        <key>UNNotificationExtensionCategory</key>
        <string>test</string>
        <key>UNNotificationExtensionDefaultContentHidden</key>
        <true/>
        <key>UNNotificationExtensionInitialContentSizeRatio</key>
        <real>1</real>
        <key>UNNotificationExtensionOverridesDefaultTitle</key>
        <false/>
        <key>UNNotificationExtensionUserInteractionEnabled</key>
        <true/>
    </dict>
    <key>NSExtensionMainStoryboard</key>
    <string>MainInterface</string>
    <key>NSExtensionPointIdentifier</key>
    <string>com.apple.usernotifications.content-extension</string>
</dict>

В чем проблема?

Теперь пользователь может нажимать на звезды и оценивать их, но поскольку взаимодействие с пользователем включено, независимо от того, где пользователь находится в представлении уведомлений, уведомление не отклоняется и не передает данные родительскому приложению. Поэтому didReceiveRemoteNotification не вызывается независимо от того, сколько раз пользователь нажимает на пользовательский интерфейс.

Чего я хочу достичь?

Мне бы хотелось, чтобы обычный поток уведомлений iOS включал и передавал полезную нагрузку уведомлений родительскому приложению iOS, когда пользователь нажимает на любую звездочку или в любом месте пользовательского интерфейса. Если пользователь нажмет на звезду, я буду распространять рейтинг, в противном случае будет пройдено 0.

Как я могу отклонить уведомление и вызвать родительское приложение didReceiveRemoteNotification или didFinishLaunchingWithOptions, когда пользователь нажимает на пользовательский интерфейс, когда UNNotificationExtensionUserInteractionEnabled имеет значение true?

1 Ответ

1 голос
/ 14 мая 2019

Понял это :) Apple представила performNotificationDefaultAction() с iOS 12 и выше.

Согласно документам

    // Opens the corresponding applicaton and delivers it the default notification action response
    @available(iOS 12.0, *)
    open func performNotificationDefaultAction()

Так что все, что мне нужно было сделать, - как только пользователь нажмет на любую из звезд, мне придется программно performNotificationDefaultAction позвонить

@IBAction func ratingTapped(_ sender: UIButton) {
        debugPrint("\(sender.tag)")
        if #available(iOSApplicationExtension 12.0, *) {
            self.extensionContext?.performNotificationDefaultAction()
        } else {
            // Fallback on earlier versions
        }
    }
* 1010.* Если вы хотите получать уведомление о передаче обслуживания родительскому приложению, когда пользователь нажимает в любом месте пользовательского интерфейса (не только на звездочках), вы можете переопределить hitTest или pointInside и выполнить то же выражение: D
self.extensionContext?.performNotificationDefaultAction()

Надеюсьэто помогает людям, которые сталкиваются с подобной проблемой в будущем :)

...