このシナリオを考えてみましょう。
- アプリケーションは現在フォアグラウンドではありませんが、一時停止されていない状態でバックグラウンドにあります(appDidEnterbackground:が呼び出されました)
- デバイスはアプリケーションに対して3つのAPNを受信し、ユーザーは「アラート」として設定されたアラートスタイルを持っています
- ユーザーは、通知アラートを表示している最上部(4番目のアラート)で[起動]をクリックします
- didReceiveRemoteNotification:が呼び出され、アプリはその特定の通知のペイロードを取得できます
- これでアプリがフォアグラウンドになり、その上にアラートダイアログ(他の3つの通知用)が表示されます
- ユーザーが通知アラート(3番目のアラート)で[起動]をクリックします-何も起こりません
- ユーザーが通知アラート(2番目のアラート)で[ランチ]をもう一度クリックします-それでも何も起こりません
- ユーザーは、最後の通知アラート(デバイスが最初に受信したアラート)で[起動]をクリックします-applicationDidBecomeActive:が呼び出されます。
だから私の質問は、アプリケーションが1番目、2番目、および3番目の通知のペイロードをどのように取得できるかということです。
これを100%再現できます。デバイスが受信した最後の通知に対してdidReceiveRemoteNotification:が呼び出され、最初にapplicationDidBecomeActiveが呼び出され、途中で何も起こらないことに気付きました。
つまり、7つの通知がデバイスに送信された場合、didReceiveRemoteNotification:は7番目に呼び出され、ユーザーが6番目、5番目、4番目、3番目、および2番目のアラートダイアログの[起動]をクリックしても何も起こりません。最後のダイアログ(最初に受信した通知用)を起動すると、applicationDidBecomeActive:が呼び出されます。