2

このシナリオを考えてみましょう。

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

だから私の質問は、アプリケーションが1番目、2番目、および3番目の通知のペイロードをどのように取得できるかということです。

これを100%再現できます。デバイスが受信した最後の通知に対してdidReceiveRemoteNotification:が呼び出され、最初にapplicationDidBecomeActiveが呼び出され、途中で何も起こらないことに気付きました。

つまり、7つの通知がデバイスに送信された場合、didReceiveRemoteNotification:は7番目に呼び出され、ユーザーが6番目、5番目、4番目、3番目、および2番目のアラートダイアログの[起動]をクリックしても何も起こりません。最後のダイアログ(最初に受信した通知用)を起動すると、applicationDidBecomeActive:が呼び出されます。

4

2 に答える 2

0

このペイロードを取得できません。また、APN には配信が保証されていないため、とにかくサーバーから情報を取得する必要があると考えるかもしれません。プッシュ データは、アプリの特定のビューをユーザーに表示するためのものです。アプリのロジック部分では、プッシュはサーバーのデータによる強制更新のみをトリガーする必要があります。

于 2012-10-17T13:27:13.727 に答える
0

私は他の答えに同意します。サーバーに保存してそこから読み取る最良の方法。

非常によく似た質問/回答へのもう1つの参照:

バックグラウンドで APNS リモート通知を処理する

于 2012-10-16T22:51:46.927 に答える