3

Я не уверен, если кто-нибудь сталкивались с этим делом, но это так:Получить уведомление в APNs, когда открыто приложение

Я закончил APNs, приложение было получить уведомление. Он отлично работал, когда я открываю приложение из уведомления (которое вызывает appDidReceiveRemoteNotification:).

Странная вещь, когда приложение находится на фоне, оно получает уведомление (отображается в окне уведомлений). Когда я открываю приложение, коснувшись значка (а не уведомления), отладчик не остановился ни на appDidReceiveRemoteNotification:, ни на appDidFinishLaunchWithOption:, поэтому мое уведомление не было сохранено. Когда я снова вытащил окно уведомления и коснувшись уведомления, отладчик остановится на appDidReceiveRemoteNotification:, как и ожидалось. Как обновить уведомление с помощью открытого приложения на значке приложения?

** EDIT **

Благодаря Abhinav, я понял, что мне не хватает-использовать метод. Я должен использовать либо

- (void)applicationWillEnterForeground:(UIApplication *)iApplication // Or 
- (void)applicationDidBecomeActive:(UIApplication *)iApplication. 

Но, мое приложение - это дизайн, который показывает, что сервер может отправлять сообщение (об обновлении, новости ...) пользователю. Такой код:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
//.... 
    if (launchOptions) { 
     NSDictionary *dictionary = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; 
     if (dictionary) { 
      [Message saveMessage:dictionary]; 

      NSLog(@"Launched from push notification: %@", dictionary); 
     } 
    } 
//.... 
} 

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 
{ 
    // Save message to coredata. 
    [Message saveMessage:userInfo]; 

    // Perform seggue, showing inbox viewcontrollers here. 
} 

Но как использование метода при открытии приложения из фона не дает словарь уведомления, и мой босс потребовал, чтобы я обновить CoreData при открытии приложения из фона, как, что, как я мог бы сделать что? Или я должен сказать моему боссу, который не может быть приобретен? Мы не хотим, чтобы пользователь пропускал уведомление об обновлениях.

+0

пожалуйста показать ваш блок кода –

+1

'appDidReceiveRemoteNotification:' или 'appDidFinishLaunchWithOption:' никогда не вызывается Когда ваше приложение выходит из фона. Вы будете уведомлены делегатом 'applicationWillEnterForeground:' или 'applicationDidBecomeActive:' при входе в поле. Если вы хотите обновить значок уведомления, вы можете сделать это здесь. – Vijay

ответ

2

Здесь вы ничего не делаете для случая с уведомлением. Когда приложение находится в фоновом режиме и пользователь нажимает значок приложения, независимо от того, получено ли push-уведомление, вы получаете обратный вызов ниже.

- (void)applicationWillEnterForeground:(UIApplication *)iApplication 
- (void)applicationDidBecomeActive:(UIApplication *)iApplication 

application:didFinishLaunchingWithOptions: это метод, который вызывается во время запуска приложения - срабатывает либо в первый раз или уведомления. И вызывается appDidReceiveRemoteNotification:, когда приложение пробуждается с уведомлением.

Итак, чтобы ответить на ваш вопрос - вы испытываете естественное поведение iOS !!!

EDIT:

Если бы я тебя, я бы пошел к моему начальнику и объяснить способ IOS работы. И вежливо скажите ему, что его невозможно. Если в фоновом режиме, если пользователь не намеревался просмотреть отправленное уведомление, iOS не позволяет вам получать детали.

+0

Но как мне обновить уведомление там, так как у него нет опции, например 'application: didFinishLaunchingWithOptions:'? Кроме того, какой я должен использовать? 'AppDidBecomeActive' или' appWillEnterForeground'? – Eddie

+0

И еще вопрос: если я получил уведомление по указанному методу, как удалить уведомления в окне уведомления? – Eddie

+0

Что вы подразумеваете под уведомлением об обновлении в 'applicationWillEnterForeground:'? Я не думаю, что вы это делаете, потому что пользователь намерен запустить приложение и ничего не делать с уведомлением. Если пользователь хочет видеть уведомление, ему необходимо либо перехватить его, либо, как вы упомянули в своем вопросе, вытащить его из центра уведомлений. – Abhinav

3

Что именно вы хотите сделать? Если вы хотите обновить счетчик значок вашего приложения, то вам просто необходимо установить кол-приложение значок 0 в applicationDidBecomeActive:

для очистки уведомлений в использовании панели уведомлений следующий код: -

[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0]; 
[[UIApplication sharedApplication] cancelAllLocalNotifications]; 
Смежные вопросы