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

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

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

Я ищу UIApplicationLaunchOptionsRemoteNotificationKey и эй Presto там это.

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

2 ответа

Решение

Проверять, выписываться 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
    ...
}

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

- (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);
    }
}
Другие вопросы по тегам