私はAppleのドキュメントを読んでいます
そして、矛盾する声明があるように私には見えます。誰かがこれらの混乱点を解決できますか? ここでは、(ローカルではなく) リモート通知について厳密に話しましょう。
ドキュメントによると、通知のアクション ボタンが押されると、application:didFinishLaunchingWithOptions が呼び出され、通知ペイロードが渡されます。後で、アプリがフォアグラウンドで実行されている場合は、application:didReceiveRemoteNotification: を介して通知を配信すると述べています。これは、アプリがバックグラウンドで実行されているか実行されていないときに、 application:didFinishLaunchingWithOptions が呼び出されることを意味します。それ以外の場合は、application:didReceiveRemoteNotification: が呼び出されます。
その後、次のような iOS Note があります。
「iOS 注: iOS では、ユーザーがアクション ボタンをタップした結果としてアプリケーションが起動されたのか、アプリケーションの状態を調べることで既に実行中のアプリケーションに通知が配信されたのかを判断できます。アプリケーションのデリゲートの実装では、 :didReceiveRemoteNotification: または application:didReceiveLocalNotification: メソッド, get the value of the applicationState property and evaluate it. 値が UIApplicationStateInactive の場合、ユーザーはアクション ボタンをタップしました; 値が UIApplicationStateActive の場合、アプリケーションは通知を受信したときに最前面にありました。 "
これは、アプリケーションが既にフォアグラウンドにある場合と、ユーザーがアクション ボタンを押した場合 (または iOS 5 でアクション スライダーをスライドさせた場合) の両方で application:didReceiveRemoteNotification: が呼び出され、アプリをフォアグラウンド/起動することを意味します。
私の混乱の原因は、ドキュメントが通知ペイロードが application:didFinishLaunchingWithOptions: メソッドで送信されることを暗示している最初の部分、または「実行中」のアプリケーションが何であるかについての誤解にある可能性があります (バックグラウンドのアプリは「実行中」と見なされますか?) . application:didReceiveRemoteNotification: のドキュメントには、「実行中」のアプリケーションに対して呼び出されると記載されています。
要約すると、次の点について明確にすることができますか。
1) application:didReceiveRemoteNotification: は、アプリがフォアグラウンドになったとき、またはユーザーが通知に対して「アクション」を選択したときに常に呼び出されますか? そうでない場合、アプリケーションの状態がアクティブか非アクティブかを判断する際の iOS Note をどのように理解すればよいでしょうか?
2) バックグラウンド アプリは「実行中」ですか?
3) 完了するために、バックグラウンド アプリは UIApplicationStateInactive または Active ですか?