web-dev-qa-db-ja.com

プッシュ通知の配信ステータスを知る方法

アプリでプッシュ通知を使用しています。すべて順調です。

サーバーから送信されたメッセージがアプリ側で受信されない場合があります。

この状況では、配信するメッセージが不足していることを知る必要があります(アプリは受信しませんでした)。

アプリが受信したメッセージとそうでないメッセージをサーバー側から知る方法はありますか?

18
Salim

いいえ、プッシュ通知は発火して忘れます。

Appleは次のことを教えません。

  1. メッセージが正常に送信されたかどうかはわかりません
  2. ユーザーがプッシュ通知をオプトアウトしたかどうかはわかりません
  3. 他の多くのことをとにかく...

しかしながら

一方、ユーザーがプッシュ通知を選択した場合、アプリはこれを処理できますが、ある程度は次のようになります。

基本的に、-didReceiveRemoteNotification:-didFinishLaunchingWithOptions:にロジックを追加してサーバーに接続し、メッセージが受信されたことをサーバーに通知できます。
特定の時間枠内に受信されなかった場合は、再送信できます。

しかし、ご覧のようにこれにより、無害なユーザーに同じプッシュ通知が殺到する可能性があります。
ある意味、彼にあなたの愚かなプッシュ通知をタップするように嫌がらせをすると、アプリのプッシュ通知を完全にオフにする可能性がありますが、ほとんどの場合、彼はアプリを削除し、評価を低くすることさえありますか?
正しくお応えします。

とにかく、これを続行する場合、一意のmessage identifierをPush通知のペイロードに挿入する識別パターンを実装する必要があり、アプリがこのPush通知を受け取ったときに、このmessage identifierをサーバーに送信する必要があります。
サーバーは、特定のデバイストークンがmessage identifierを返したことをログに記録する必要があります。これは、その特定のプッシュ通知を受け取ったことを意味します。

サーバーは1時間ごと、毎日、または何にでもチェックし、特定のメッセージを相対message identifierで報告していないデバイストークンに再送信できます。

繰り返しますが、これは、サーバーが動作する必要があることを意味しますOT時々。


このアプローチ全体には他の問題があります:

  1. ユーザーはプッシュ通知を受け取りましたが、それを使用してアプリを開くのではなく、却下します
    • サーバーは、ユーザーにプッシュ通知が表示されなかったと想定し、このプッシュ通知を再度送信します
  2. ゴーストデバイストークン
    • ユーザーは最初にプッシュ通知を受け入れましたが、後でこの特権を取り消しました
    • ユーザーがアプリをアンインストールしました
    • 基本的に、一度プッシュ通知を受信するために使用されていたが、もはや受信しないデバイストークン。おそらくメッセージフラッディングレピュテーションが原因です。
  3. ユーザーはプッシュ通知を受け取りましたが、後でそれをタップしました
    • 同じプッシュ通知を複数回受け取る可能性があります(非常に苛立たしい
  4. ユーザーはプッシュ通知を受け取りましたが、インターネット接続がないときにタップしました
  5. ユーザーはプッシュ通知を受け取りましたが、サーバーがダウンしています。おそらく揚げられています\ m /

アプリに、サーバーに送信されるメッセージIDをキューに入れ、サーバーが正常に応答した場合にのみそれを削除するロジックを追加することで、最後の3つのシナリオを回避できます。

サーバー側とクライアント側の作業が多すぎます。
さらに、大量のユーザーを処理したり、アプリのパフォーマンスを少しだけ低下させたりする場合、サーバー側のパフォーマンスが大幅に低下します。

27
staticVoidMan

フィードバックサービス

Appleプッシュ通知サービスには、失敗したプッシュ通知に関する情報を提供するフィードバックサービスが含まれています。目的のアプリがデバイスに存在しないためにプッシュ通知を配信できない場合、フィードバックサービスはそれを追加しますデバイスのトークンをリストに追加します。配信される前に期限切れになるプッシュ通知は、配信の失敗とは見なされず、フィードバックサービスに影響を与えません。この情報を使用して、配信に失敗するプッシュ通知の送信を停止することで、不要なメッセージのオーバーヘッドとシステム全体のパフォーマンスを向上させます。

フィードバックサービスを毎日クエリして、デバイストークンのリストを取得します。タイムスタンプを使用して、フィードバックエントリが生成されてからデバイストークンが再登録されていないことを確認します。再登録されていないデバイスごとに、通知の送信を停止します。 APNsは、フィードバックサービスをチェックし、デバイス上に存在しないアプリケーションにプッシュ通知を送信しないようにするための注意力についてプロバイダーを監視します。

6
meda

1。デバイスにアプリケーションがインストールされているデバイスで通知が配信されない、および通知が配信される前に期限切れになるためだけに通知する場合それ以外の場合、通知は配信されません。

次に答えは

いいえ。

通知の有効期限が切れていて、有効なデバイスに配信されていないかどうかを確認できるサポートは提供していません。

Appleアプリがプッシュ通知を取得するかどうか)を知るためのオプション

上記のリンクのMosheの回答を参照してください。リンクが切れてしまった場合でも、今後の皆様のお役に立てるように、ここに彼の回答を掲載しております。

簡単に言えば、APNSは一方通行なので、できません。ただし、アプリは通知の受信時に任意のコードを実行できるため、これを使用して、通知を受け取ったときに自分のサーバーにhttpリクエストを送信することができます。

2。ユーザーがアプリケーションをアンインストールしたために配信されない通知を要求する場合、meda'sこの投稿で回答。

これがお役に立てば幸いです。また、私の説明について質問がある場合はお知らせください。

3
Sr.iOSDev

サーバーではなくアプリから、 "Service Extension"を使用して、プッシュjsonの少し変更を加えて、プッシュ通知の配信レポートを取得できます。 。チェックアウト このリンク 詳細な説明。

0
manishsharma93