Сбой при обращении с удаленным уведомлением, когда приложение не работает
Я получаю удаленное уведомление и в соответствии с типом уведомления изменяю контроллеры просмотра контроллера навигации.
Все работает отлично, когда приложение находится на переднем плане или когда приложение находится в фоновом режиме, но не полностью закрыто (из многозадачной панели).
Но, когда приложение закрыто и получает удаленное уведомление, он сработает, как только он откроется. Я делаю неправильно с тем, как я настраиваю ViewControllers?
Вот какой код.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary
*)launchOptions {
// Push required screens into navigation controller
UILocalNotification *remoteNotif = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];
//Accept push notification when app is not open
if (remoteNotif) {
[self handleRemoteNotification:application userInfo:remoteNotif.userInfo];
return YES;
}
[window addSubview:navigationController.view];
[window makeKeyAndVisible];
return YES;
}
-(void) handleRemoteNotification:(UIApplication *)application userInfo:(NSDictionary *)userInfo {
application.applicationIconBadgeNumber = 0;
NSMutableArray *viewControllers = [NSMutableArray array];
[viewControllers addObject:driverWaitViewController];
[viewControllers addObject:newJobsViewController];
[navigationController setViewControllers:viewControllers];
}
Ответы
Ответ 1
Я понял это, и это не имеет никакого отношения к контроллерам представлений, как я думал.
Проблема была в следующих строках. Я отправил в remoteNotif.userInfo, а не remoteNotif. Кроме того, remoteNotif явно не относится к типу UILocalNotification. Это объект NSDictionary.
До
UILocalNotification *remoteNotif = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];
[self handleRemoteNotification:application userInfo:remoteNotif.userInfo];
Должно быть
NSDictionary *remoteNotif = [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];
[self handleRemoteNotification:application userInfo:remoteNotif];
Ответ 2
если вы закроете приложение, которое начинается с режима отладки xcode, и когда приложение начнет с push-уведомления (закрытое приложение), если ваш телефон подключен к Mac (все еще ваш телефон в режиме отладки с xcode), он будет аварийно завершен. проверьте этот сенарио с отключенным телефоном.
Ответ 3
Вы не правильно инициализируете свое приложение при получении уведомления.
Измените приложение: didFinishLaunchingWithOptions: метод для этого:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions (NSDictionary *)launchOptions {
// Push required screens into navigation controller
NSDictionary *notif= [launchOptions objectForKey: UIApplicationLaunchOptionsRemoteNotificationKey];
[window addSubview:navigationController.view];
[window makeKeyAndVisible];
//Accept push notification when app is not open
if (notif) {
[self handleRemoteNotification:application userInfo:notif];
}
return YES;
}