0

特定の種類の通知を有効または無効にするオプションをユーザーに与えたいと考えています。たとえば、プライベートメッセージのプッシュ通知をオンにしますが、パブリック投稿の場合はオフにします。 didReceiveRemoteNotificationが呼び出される前に通知が既に表示されているかどうかわからなかったのですが、APN(didReceiveRemoteNotification)を受け取った後でクライアント側でこれを行うことが可能かどうかは疑問でした。カスタムデータに基づくリモート通知を表示しない

現在、私はプッシュ通知を送信するのにOneSignalを使用しており、コンテンツ利用可能true(1)で送信しています。これは、アプリケーションがバックグラウンドにある間、didReceiveRemoteNotificationを正しくトリガします。送信したデータに基づいて、バナープッシュ通知を表示したり表示したりしないようにしたいと考えています。

ここ

は、私がこれまで試みられてきたものですが、私は私が必要なデータを取得することができるが、私はまったくそれを表示しないようにのiDeviceに伝える方法を見つけ出すことができませんでした:

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { 
    print("****this happened****") 
    print("\(userInfo)") 
    if let customData = userInfo["custom"] as? [String: Any] { 
     if let additionalData = customData["a"] as? [String: Any] { 
      if let notificationType = additionalData["notification_type"] as? String { 
       if notificationType == "follow" { 
        print("do not want to display") 
        if var apsData = userInfo["aps"] as? [String: Any] { 
         apsData.removeValue(forKey: "content-available") 
        } 
       } else { 
        print("dispaying this notification") 
       } 
      } 
     } 
    } 
} 

私が考えているもう1つの方法は、ユーザーの通知設定をデータベースに保存し、プッシュ通知を送信してプッシュ通知を送信して、プッシュを送信する必要があるかどうかを確認するときです。私はちょうどそれがより多くのデータベースクエリを追加せずにこれに取り組むことが可能かどうかを見たいと思うでしょう。

編集:私はまたOneSignal.initWithLaunchOptionsを使用し、これは、私があなたのサーバー上でフィルタリングをお勧めしますここでプッシュ通知代わりに

if receivedNotification?.payload != nil { 
    if receivedNotification?.payload.additionalData != nil { 
     if let data = receivedNotification?.payload.additionalData["notification_type"] as? String { 
      if data == "follow" { 
       print("do not display this") 
      } 
     } 
    } 
} 

答えて

0

を停止することが可能であるならば、私は疑問に思ってhandleNotificationReceivedでdidReceiveRemoteNotification前に呼び出されることに気づきましたすべてのデバイスに通知を送信する(表示されないようにするだけで)、以下のような面があります。ユーザーがアプリをスワイプしたときに余分なバッテリーの消耗とcontent-available通知が機能しません。

mutable-contentを使用すると、UNNotificationServiceExtensionが発生する可能性がありますが、これはiOS 10でのみ有効ですが、バッテリーを考慮する必要があります。

このデバイスのOneSignalプレーヤーIDは、IdsAvailableに電話することで取得できます。この番号はバックエンドに保存できます。次に、create notification REST API callinclude_player_idsを使用して、通知を受け取るユーザーのみを対象とすることができます。

+0

これは、私が行っていた解決策かもしれないと感じていました.AppleやOneSignal iOS SDKがAndroid向けのNotificationExtenderServiceに似ていることを期待していました。このように実装する必要があります。ありがとう! – Hellojeffy

+0

@Hellojeffy私は2番目のオプションのために私の答えに 'mutable-content'を追加しました。 Androidで 'NotificationExtenderService'を使用しても、iOSのような' include_player_ids'を使うことをお勧めします。これは、デバイスが最初に目を覚まさないようにし、ユーザのバッテリーを節約するためです。 – jkasten

関連する問題