2017-08-08 6 views
1

私の現在のアプリケーションでは、APNSは問題なく稼動しています。しかし、通知タイプに基づいて特定のペイロードをフィルタリングする方法を混乱させています。タイプに基づいたAPNSの制限、Swift 3

  • すべての通知
  • グループ通知
  • アップロード通知
  • 内容の通知
  • enter image description here

    が上から下まで、UISwitchesが対応する:下の画像をご参照ください。

  • コメント通知

である。

UISwitchは、後で使用できるようにUserDefaultsに保存されています。しかし、私は、メッセージが届くのを制限するために適切に使用する方法を考えるのに苦労しています。

クライアント側の方法/ペイロードにカスタムキー/価値情報? Ex/Payloadには{"type": "comment"}が含まれています。

編集: 所望の効果、UISwitchが「オフ」であり、バナーUIトリガしないように、音声を表示するが、そのタイプのペイロード情報がまだ配信されるのを許可しないようにするためのための(ありますUITabBarControllerさんのバッジを更新しています)。

UITabBarControllerさんのバッジの更新をペイロードなしで制限するものとして、サイレント通知の修正版が必要なようです。すべての参照やコメントは非常に感謝しています。

+2

このためのクライアントサイドの解決策はかなり無駄でしょうが、あなたがアクセスできないAPIのクライアントを作っているなら、後者の考え方は妥当であると思います。 – the4kman

答えて

1

APIにアクセスできる場合は、サーバー側のソリューションが最適です。しかし、クライアント側のソリューションが本当に必要な場合は、同様に可能です。

プッシュ通知をユーザーに表示するかどうかを決めることはできません。サイレントプッシュ通知は表示されず、アプリケーションにのみ配信されるのに対して、システムは自動的にサイレントではないプッシュ通知を配信してユーザーに表示します。この動作を変更することはできません。

しかし、私が今考えることのできる少なくとも1つの回避策があります。すべてのプッシュ通知をサイレントに配信し、ユーザーの設定に応じて、オンになっている通知に対して、サイレントプッシュ通知の内容を即座にコピーするローカル通知を配信します。こうすることで、配信後のカテゴリに基づいて通知をフィルタリングできます。通知が時間的に重要である場合、プッシュ通知とローカル通知との間にわずかな遅延が生じる可能性があるため、これは最善の方法ではない可能性があることに注意してください。

+0

サーバ側の解決策が考えられるとすれば、これを処理する合理的な方法は、 'UISwitch'のセレクタ関数が特定の型のメッセージの送信を有効/無効にするフラグをトリガするAPI呼び出しを行うことでしょうか? 私は元の投稿を誤って元の投稿で明らかにしなかったこのアプリケーション機能の要件のより具体的な説明を編集しました。 – iMoment

+0

まだペイロードを配信する必要がある場合は、通知の 'content-available'プロパティを切り替えて、通知と表示の間で変更する必要があります。はい、スイッチを切り替えたときにトリガされるAPI呼び出しを実装する必要があります。 –

+0

私はそれを得たと思う。ただ明確にするには:(1)アプリケーション設定 - >機能 - >背景モード - >リモート通知を有効にする必要があります。 (2)スイッチの切り替え時にAPI呼び出しを実装する。 (3)ペイロードの 'content-available'プロパティをAPIに調整させます。サイレントの場合は1、通常の場合は0、通知の特定の「タイプ」に関連します。このように、UIは表示されず、サウンドは無効になりますが、私はまだペイロードを受け取り、バックグラウンドでUIを更新することができます。私が何かをつぶやいてくれたら、私に知らせてください。本当にありがとう。 – iMoment

関連する問題