web-dev-qa-db-ja.com

アプリが既にバックグラウンドで実行されている場合、プッシュ通知ビューに応答する方法

私がやりたいことはかなり簡単です。処理するプッシュ通知にカスタムデータを添付します

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

IApplicationLaunchOptionsRemoteNotificationKeyを探します。

このメソッドは、アプリを初めて起動する場合にのみ呼び出されます。通知が届き、ユーザーが通知の「表示」ボタンを押したときに、アプリケーションがすでにバックグラウンドで実行されている場合、同じキーを読み取るにはどうすればよいですか?通知からアプリを初めて起動する場合と同じように、そのデータが開かれている特定のView Controllerにそれらを送信します。

45
rustyshelf

チェックアウト application:didReceiveRemoteNotification:fetchCompletionHandler: iOS 7以降。


メソッドapplication:didReceiveRemoteNotification:は、アプリがフォアグラウンドで実行されている場合に呼び出されます。また、アプリがバックグラウンドで実行されており、ユーザーがプッシュ通知に関与している場合にも呼び出されます(したがって、アプリがアクティブになります)。

したがって、本当の問題は、アプリがフォアグラウンドにあったかどうか、またはプッシュ通知に関与しているユーザーによってアプリがアクティブになったかどうかを判断する方法です。

質問に対する この回答バックグラウンドにあるときのdidReceiveRemoteNotification にはキーがあります:

アプリがフォアグラウンドになったかどうかは、application:didReceiveRemoteNotification:次のコードを使用:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    if ( application.applicationState == UIApplicationStateActive )
        // app was already in the foreground
    else
        // app was just brought from background to foreground
    ...
}
108
gerry3