Как ответить на просмотр 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);
}
}