Как узнать, запущено ли приложение iPhone при получении Push-уведомления?

Следите за методами реагирования на жизненный цикл!

Я работал несколько часов, чтобы узнать, что getDerivedStateFromProps будет вызван после каждого setState().

29
задан thebossman 4 January 2010 в 08:26
поделиться

3 ответа

Делегат UIApplication имеет метод

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

, который необходимо реализовать. Он получает уведомление при запуске приложения.

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

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

с информацией об уведомлении, содержащейся в словаре launchOptions. если словарь нулевой, то пользователь нажал на иконку приложения, как обычно.

18
ответ дан 28 November 2019 в 00:36
поделиться

В документации Apple по push-уведомлениям объясняется следующее:

Однако есть две ситуации, когда приложениеDidFinishLaunching: не является подходящим местом реализации:

  • Приложение запускается, когда приходит уведомление.
  • Полезная нагрузка уведомлений содержит пользовательские данные, которые приложение может использовать.

В первом случае, когда приложение запускается, когда iPhone OS получает удаленное уведомление, необходимо реализовать метод application:didReceiveRemoteNotification: UIApplicationDelegate, если вы хотите загрузить данные немедленно. После загрузки обязательно удалите значок с иконки приложения. (Если ваше приложение часто проверяет у провайдера на наличие новых данных, реализация этого метода может не потребоваться)

Это означает, что если вызывается метод application:didReceiveRemoteNotification: делегирования, то ваше приложение работает.

2
ответ дан 28 November 2019 в 00:36
поделиться

Вот более подходящий способ обработки активного/неактивного состояния приложения.

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {   
        // check for the app state
        UIApplicationState state = [application applicationState];

        if (state == UIApplicationStateActive) {
            //the app is in the foreground, so here you do your stuff since the OS does not do it for you
            //navigate the "aps" dictionary looking for "loc-args" and "loc-key", for example, or your personal payload)
        }

    application.applicationIconBadgeNumber = 0;
}

didReceiveRemoteNotification: вызывается, когда приложение работает, да, но когда оно приостановлено, iOS позаботится о размещении значка и т. д. Если приложение находится на переднем плане, ОС ничего не делает, а просто вызывает ваш didReceiveRemoteNotification:.

76
ответ дан 28 November 2019 в 00:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: