ホーム>source

リッチプッシュがバックグラウンドで処理された後(ユーザーがアプリを開かずにUNNotificationActionをクリックした-フォアグラウンドなし)、アプリに入ると、プッシュイベントが重複して「didReceiveRemoteNotification」が実行されます。

私の質問は:

なぜリッチプッシュを処理する場合:

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {

competionHandler()を呼び出すと、同じプッシュが受信されます:

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)

プッシュ設定:

UNUserNotificationCenter.current().delegate = self
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { (granted, error) in
                if granted {
                    print("UNUserNotificationCenter auth granted")
                    Utils.performTaskOnMain {
                        application.registerForRemoteNotifications()
                    }
                } else {
                    print("UNUserNotificationCenter auth error = \(error?.localizedDescription ?? "")")
                }

プッシュハンドラー

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
    {
        print("AppDelegate didReceiveRemoteNotification, with info:\(userInfo)")
        handleNotificationUserInfo(userInfo)
        completionHandler(UIBackgroundFetchResult.newData)
    }

    @available(iOS 10.0, *)
    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
                 UserNotificationsManager.shared.handleActionIdentifierForReceivedNotification(response)
         completionHandler()
    }

プッシュ通知ペイロード:

info:[AnyHashable("content-available"): 1, AnyHashable("messageInfo"): {"push_type":"XXXX","category":"videoCategory","mediaUrl":"https://XXXX.png","threadId":"24274","alertTitle":null,"initiator":"XXXXX XXXX.mp3","alertBody":null,"mutableContent":true}, AnyHashable("media-url"): https://XXXXX.png, AnyHashable("aps"): {
alert =     {
    body = "XXXXX";
};
badge = 56;
category = "XXX.videoCategory";
"content-available" = 1;
"mutable-content" = 1;
sound = "XXXX.mp3";

}]

あなたの答え
  • 解決した方法 # 1

    アプリに配信される「重複」プッシュは、サイレントプッシュ通知です。プッシュ通知に content-available が含まれています   alert に加えてキー  辞書。

    ザ・ウィズウィズ  辞書により、ユーザーに表示される通知が配信されます。

    ザ・ウィズウィズ  キーを押すと、サイレントプッシュ通知として再度配信されますが、ユーザーには表示されません。

    これはサポートされていない構成です。 alert を削除する  キーとユーザーに見えるプッシュ通知のみが配信されます。サイレントプッシュをアクティブに使用している場合は、 content-available のみを使用して個別のプッシュとして送信します 、 content-available  カスタムキー。

    content-available

関連記事

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ リスト内包表記のPythonリストの最後の要素を変更するには?