5

ここで、アプリケーションが実行されていないときにプッシュ通知を受信することに関する多くの質問を読みました (バックグラウンドよりも、完全にシャットダウンされていることを意味します)。特にこの質問は、launchOptions 辞書を使用して受信していたかどうかを判断する方法を理解するのに最も役立ちます。

しかし、私は非常に混乱しており、これが私の大きな見落としである可能性があることを完全に認めています。アプリがシャットダウンされている間にデバイスがこのアプリケーションのプッシュ通知を受信し、後でアプリケーションを開くと、launchOptions ディクショナリはヌル ポインター。前述のリンクやその他の場所で受け入れられた回答の説明から、通知ペイロードを確認できるはずであることがわかります。しかし、何もありません。iOS 5.1.1 向けに開発しています。

私の他の唯一の考えは、起動時にバッジの数をチェックすることです(ゼロより大きい、何かをする...)が、これは非常に信頼できないようです.

私が欠けているものを誰か教えてもらえますか?よろしくお願いします。

4

1 に答える 1

8

application:didFinishLaunchingWithOptions:通知によりアプリが起動されたときに、ペイロード情報でのみ呼び出されます。たとえば、ユーザーが通知アラート (通知センターに追加) またはcontent-avialble = 1ペイロードで受信した通知 (ニューススタンド通知) をタップし、アプリがフォアグラウンドでもバックグラウンドでもない場合に、これが発生する可能性があります。

アプリがバックグラウンドにあるときにアプリが通知を受け取る場合。ニューススタンドの通知の場合、またはユーザーがアラートの下のアクション ボタンをタップした場合、メソッドが呼び出されます

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

[[UIApplication sharedApplication] applicationState]等しくないUIApplicationStateActive

上記の場合、ユーザーが通知アラートのアクション ボタンをタップせず、それをタップしてアプリを起動しない場合、どちらもdidFinishLaunchingWithOptions呼び出さdidReceiveRemoteNotificationれません。

フォアグラウンドdidReceiveRemoteNotificationで呼び出されたときにアプリが通知を受信した場合、 は[[UIApplication sharedApplication] applicationState]と等しくなりUIApplicationStateActiveます。

バッジのnotification場合、アプリが実行されていない場合、コードは実行されず、バッジはアプリ アイコンで 1 増加します。アプリを起動すると(アプリアイコンをタップ)didFinishLaunchingWithOptions、通常通り呼び出されます。(通知を受信したときにアプリがバックグラウンドまたはフォアグラウンドにある場合は、上記と同じ)

したがって、これは考えられるすべてのケースをカバーしていると思います。また、背景のケースが有効であることにも注意してくださいiOS SDK >= 4.0

于 2012-08-29T21:25:20.763 に答える