複数のプッシュ通知を同じデバイスに同時に送信すると、didReceiveRemoteNotification
通知が送信されるたびに呼び出されないようです。6 つの通知を送信didReceiveRemoteNotification
し、平均で 3 回しか呼び出されないとします。それは、アプリが現在実行されている場合です。しかし、アプリの外にいて 6 つのプッシュ通知を送信すると、すべてが通知センター/ロック画面に配信されます。これは予想される動作ですか?
1 に答える
これが予想される動作です。
Apple プッシュ通知サービスには、ストア アンド フォワード機能を実行するデフォルトのサービス品質 (QoS) コンポーネントが含まれています。
APNs が通知の配信を試みたがデバイスがオフラインの場合、通知は限られた期間保存され、利用可能になったときにデバイスに配信されます。
特定のアプリケーションの最近の通知は 1 つだけ保存されます。デバイスがオフラインのときに複数の通知が送信されると、新しい通知ごとに前の通知が破棄されます。最新の通知のみを保持するこの動作は、結合通知と呼ばれます。
デバイスが長時間オフラインのままである場合、保存されていた通知は破棄されます。
あなたの場合、デバイスはオンラインですが、注意すべき重要なことは、APNs によって各デバイスのアプリに対して 1 つの通知のみが保存されることです。一度に 3 つの通知を送信するとします。APN サーバーは、2 番目のメッセージが到着したときに最初のメッセージをデバイスに配信しています。2 番目のメッセージを格納します。次に、最初のメッセージがまだ配信されている間に 3 番目のメッセージが到着するため、3 番目のメッセージが 2 番目のメッセージを上書きし、2 番目のメッセージは配信されません。
より説得力のある別の引用を次に示します。
一部の通知を受信しましたが、すべてではありません
短期間に同じデバイスまたはコンピューターに複数の通知を送信している場合、プッシュ サービスは最後の通知のみを送信します。
理由は次のとおりです。デバイスまたはコンピューターは、各通知の受信を確認します。プッシュ サービスは、その受信確認を受信するまで、デバイスまたはコンピューターが何らかの理由でオフラインになったと想定し、将来の再配信のためにサービスの品質 (QoS) キューに通知を格納します。もちろん、ここでの往復ネットワーク遅延は主要な要因です。
Local and Push Notification Programming Guide で説明されているように、QoS キューは、デバイスまたはコンピューターごとにアプリごとに 1 つの通知を保持します。キュー内の通知が送信される前にサービスが別の通知を受信した場合、新しい通知によって前の通知が上書きされます。
これらはすべて、プロバイダーで重要な変更があったことを通知がアプリに示すことを意図していることを示しており、アプリはプロバイダーにチェックインして詳細を取得する必要があります。通知には、他の場所では利用できないデータを含めるべきではなく、ステートフルであってはなりません。
すぐに配信されないプッシュ通知は、デバイスがサービスに接続されていなかったため、将来の再配信のためにキューに入れられました。もちろん、「すぐに」では、接続の待ち時間を考慮する必要があります。その時点で APN がタイムアウトするため、範囲外のケースは 60 秒を超えます。