Как реагировать на push-уведомление, если приложение уже работает в фоновом режиме
У меня есть что-то довольно простое, что я хочу сделать. Я прикрепляю пользовательский фрагмент данных к некоторым push-уведомлениям, которые обрабатываю в
-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
Я ищу UIApplicationLaunchOptionsRemoteNotificationKey и знаю, что он есть.
Этот метод вызывается только в том случае, если приложение запускается в первый раз. Как я могу прочитать тот же самый ключ, если мое приложение работает в фоновом режиме уже при входе уведомления, и пользователь нажал кнопку "Просмотр" в уведомлении? Я хочу отправить их в определенный контроллер представления с открытыми на нем данными, так же, как и я, если приложение запускается в первый раз из уведомления.
Ответы
Ответ 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);
}
}