Получить уведомление APNS при открытии приложения

Я не уверен, что кто-нибудь сталкивался с этим случаем, но это так:

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

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

** РЕДАКТИРОВАТЬ **

Благодаря 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, когда открываю приложение из фона, как это, как я могу это сделать? Или я должен сказать своему боссу, что не может быть приобретен? Мы не хотим, чтобы пользователь пропускал уведомление об обновлениях.

2 ответа

Решение

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

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

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

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

РЕДАКТИРОВАТЬ:

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

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

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

[[UIApplication sharedApplication] setApplicationIconBadgeNumber: 0];
[[UIApplication sharedApplication] cancelAllLocalNotifications];
Другие вопросы по тегам