4

У меня есть встроенные push-уведомления для моего приложения. Чтобы поймать уведомления, я использовал этот делегат.Ошибка приложения при запуске с уведомлением push

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo в моем делете приложения.

Итак, когда приложение работает в фоновом режиме, если получено уведомление, и когда я нажимаю на него, этот делегат запускается. Если приложение не работает даже в фоновом режиме, если нажал на ntification то выстреливает

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

Софара он работал хорошо. Затем я хотел получить уведомление в фоновом режиме. Так что я нашел

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler

это работает для него.

Так что я только что изменил свой предыдущий метод didReceive в этот новый метод didReceive. Теперь моя проблема заключается в том, когда приложение запускается с push-уведомлением (если приложение не работает в фоновом режиме или под землей и при нажатии на уведомление, когда оно приходит), мое приложение выходит из строя. Даже я не могу отлаживать и улавливать эту ситуацию.

В чем разница между этими двумя делегатами. Мой второй делегат запускается при запуске приложения с уведомлением? Пожалуйста, помогите мне.

+0

проверьте, что у вас есть полезная нагрузка правильно serilize или нет –

+0

У меня есть несколько типов уведомлений. Если тип уведомления равен 12, мне нужно сделать что-то в фоновом режиме. Поэтому я добавил 'содержательное строение ключа $ тела [' АПС] = массив ( \t 'тревога' => $ сообщения, \t 'звук' => 'по умолчанию', \t 'знак' => 1, \t 'content-available' => 1 \t); Если мой тип уведомления - 12 доступных для контента, станет 1 во всех других случаях 0 – user1960169

+0

. Посмотрите на это ans, может быть полезно http://stackoverflow.com/a/20851481/3743322 – Alexi

ответ

1

Обычно, когда уведомление пришло тогда этот метод выполняется (если приложение является активным) - (Недействительными) применение: (UIApplication *) применение didReceiveRemoteNotification: (NSDictionary *) USERINFO

Но если приложение закрыто или убит система, то нажмите на notificatin первым называют «didFinishLaunchingWithOptions» метод я Thsi метода, который мы должны проверить Wether приложения начинается с уведомления или начать новую жизнь мы можем использовать этот код для вызова «didReceiveRemoteNotification» метод снова

UILocalNotification *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; 

if (notification) { 
    [self application:application didReceiveRemoteNotification:(NSDictionary*)notification]; 
} 
+0

Единственное, что я сделал, это изменение void) application: (UIApplication *) приложение didReceiveRemoteNotification: (NSDictionary *) userInfo в UIApplication *) приложение didReceiveRemoteNotification: (NSDictionary *) userInfo fetchCompletionHandler: (void (^) (UIBackgroundFetchResult)) completeHandler, но это привело к сбою моего приложения при запуске с уведомление. В чем причина этого? В методе didFinishLunch im перенаправляется на другое представление. Он отлично работает без fetchCompletionHandler: (void (^) (UIBackgroundFetchResult)) completeHandler. – user1960169

+0

простое решение вашей проблемы в том, что просто использовать этот метод для осуществления уведомления и обработки (аннулируются) применение: (UIApplication *) применение didReceiveRemoteNotification: (NSDictionary *) USERINFO и поместить этот код в «didFinishLaunchingWithOptions» метод , так что если приложение ur активно, оно отправлено непосредственно в уведомление mehod , но если приложение ur началось с нажатия на уведомление, то снова код [само приложение: приложение didReceiveRemoteNotification: (NSDictionary *) уведомление]; отправьте элемент управления методу уведомления –

Смежные вопросы