Следите за методами реагирования на жизненный цикл!
Я работал несколько часов, чтобы узнать, что getDerivedStateFromProps
будет вызван после каждого setState()
.
Делегат UIApplication имеет метод
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
, который необходимо реализовать. Он получает уведомление при запуске приложения.
Если ваше приложение в данный момент не запущено, и получено уведомление, то ваше приложение может быть запущено с помощью
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
с информацией об уведомлении, содержащейся в словаре launchOptions. если словарь нулевой, то пользователь нажал на иконку приложения, как обычно.
В документации Apple по push-уведомлениям объясняется следующее:
Однако есть две ситуации, когда приложениеDidFinishLaunching: не является подходящим местом реализации:
- Приложение запускается, когда приходит уведомление.
- Полезная нагрузка уведомлений содержит пользовательские данные, которые приложение может использовать.
В первом случае, когда приложение запускается, когда iPhone OS получает удаленное уведомление, необходимо реализовать метод application:didReceiveRemoteNotification: UIApplicationDelegate, если вы хотите загрузить данные немедленно. После загрузки обязательно удалите значок с иконки приложения. (Если ваше приложение часто проверяет у провайдера на наличие новых данных, реализация этого метода может не потребоваться)
Это означает, что если вызывается метод application:didReceiveRemoteNotification: делегирования, то ваше приложение работает.
Вот более подходящий способ обработки активного/неактивного состояния приложения.
- (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:
.