特定の種類の通知を有効または無効にするオプションをユーザーに与えたいと考えています。たとえば、プライベートメッセージのプッシュ通知をオンにしますが、パブリック投稿の場合はオフにします。 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")
}
}
}
}
これは、私が行っていた解決策かもしれないと感じていました.AppleやOneSignal iOS SDKがAndroid向けのNotificationExtenderServiceに似ていることを期待していました。このように実装する必要があります。ありがとう! – Hellojeffy
@Hellojeffy私は2番目のオプションのために私の答えに 'mutable-content'を追加しました。 Androidで 'NotificationExtenderService'を使用しても、iOSのような' include_player_ids'を使うことをお勧めします。これは、デバイスが最初に目を覚まさないようにし、ユーザのバッテリーを節約するためです。 – jkasten