Подтвердить что ты не робот

Как реагировать на push-уведомление, если приложение уже работает в фоновом режиме

У меня есть что-то довольно простое, что я хочу сделать. Я прикрепляю пользовательский фрагмент данных к некоторым push-уведомлениям, которые обрабатываю в

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

Я ищу UIApplicationLaunchOptionsRemoteNotificationKey и знаю, что он есть.

Этот метод вызывается только в том случае, если приложение запускается в первый раз. Как я могу прочитать тот же самый ключ, если мое приложение работает в фоновом режиме уже при входе уведомления, и пользователь нажал кнопку "Просмотр" в уведомлении? Я хочу отправить их в определенный контроллер представления с открытыми на нем данными, так же, как и я, если приложение запускается в первый раз из уведомления.

4b9b3361

Ответ 1

Проверьте application:didReceiveRemoteNotification:fetchCompletionHandler: в iOS 7 и более поздних версиях.


Метод application:didReceiveRemoteNotification: вызывается, если ваше приложение работает на переднем плане. Он также вызывается, если ваше приложение работает в фоновом режиме, и пользователь взаимодействует с вашим push-уведомлением (таким образом, ваше приложение активно).

Итак, реальный вопрос заключается в том, как определить, было ли приложение на переднем плане или было ли оно активировано пользователем, взаимодействующим с вашим уведомлением push.

Похоже этот ответ на вопрос 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
    ...
}

Ответ 2

Чтобы определить, было ли приложение активировано удаленным уведомлением, попробуйте следующее:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
    if (userInfo == NULL)
    {
        NSLog(@"didFinishLaunchingWithOptions user startup userinfo: %@", userInfo);
    }
    else
    {
        NSLog(@"didFinishLaunchingWithOptions notification startup userinfo: %@", userInfo);
    }
}