Подтвердить что ты не робот

Перетаскивание уведомлений

Я читаю документы Apple на

Обработка локальных и удаленных уведомлений

и мне кажется, что я имею противоречивые утверждения. Может кто-то прояснить эти путаницы? Пусть сейчас говорят о дистанционном уведомлении (по сравнению с местным).

Документы говорят, что если кнопка действия в уведомлении нажата, она вызывает приложение: doneFinishLaunchingWithOptions и передает в полезную нагрузку уведомления. Позже он говорит, что приложение работает на переднем плане, оно отправляет уведомление через приложение: didReceiveRemoteNotification:. Это подразумевает, что когда приложение зашифровывается или не работает, вызывается приложение: didFinishLaunchingWithOptions. В противном случае вызывается application: didReceiveRemoteNotification:

Позже есть примечание iOS, в котором говорится следующее:

"iOS Примечание. В iOS вы можете определить, запускается ли приложение в результате нажатия пользователем кнопки действия или отправки уведомления в уже запущенное приложение путем изучения состояния приложения. В реализации делегатов приложения: didReceiveRemoteNotification: или application: didReceiveLocalNotification: метод, получить значение свойства applicationState и оценить его. Если это значение UIApplicationStateInactive, пользователь нажал кнопку действия, если значение является UIApplicationStateActive, приложение было на самом раннем этапе, когда оно было получено уведомление.

Это означает, что приложение: didReceiveRemoteNotification: вызывается как при первом приложении, так и при нажатии пользователем кнопки действия (или слайды ползунка действий в iOS 5) для запуска/запуска приложения.

Источником моей путаницы может быть первая часть, где документы подразумевают, что полезная нагрузка уведомления отправляется с приложением: метод didFinishLaunchingWithOptions: или с непониманием того, что такое "запущенное" приложение (это фоновая идея считается "запущенной" "?). Документация для приложения: didReceiveRemoteNotification: утверждает, что он вызывается для" запущенных" приложений.

Итак, чтобы подвести итог, могу ли я получить разъяснение:

1) Является ли приложение: didReceiveRemoteNotification: всегда вызывается, когда приложение находится на переднем плане или когда пользователь выбирает "действовать" в уведомлении? Если нет, то как мы понимаем примечание iOS о том, что состояние приложения является активным или неактивным?

2) Является ли фоновое приложение "запущенным", по крайней мере, в смысле приложений, требующих приложения: didReceiveRemoteNotification вызывается для запуска приложений?

3) Для завершения используется фоновая команда UIApplicationStateInactive или Active?

4b9b3361

Ответ 1

Формулировка здесь сбивает с толку, особенно вокруг фона.

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

NSDictionary *remoteNotif = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

if(remoteNotif)
{
    //Handle remote notification
}

Если приложение загружено в память и ACTIVE (например, приложение открыто на устройстве), то вызывается только application:didReceiveRemoteNotification:.

Если приложение загружено в память, но не является АКТИВНЫМ и НЕ ПРЕДПОСЫЛКИ (например, вы запустили приложение, затем нажали кнопку "Домой" и ждали 10 секунд), а затем вы нажимаете кнопку действия только на push-уведомление, только Вызывается doReceiveRemoteNotification.

Вы можете записать этот случай следующим образом:

-(void)application:(UIApplication *)app didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    if([app applicationState] == UIApplicationStateInactive)
    {
        //If the application state was inactive, this means the user pressed an action button
        // from a notification. 

    //Handle notification
    }
}

Ответ 2

В соответствии с сценарием iOS 9.1 я тестировал push-уведомление в режиме Kill, когда мое приложение не работает в каком-либо режиме в то время, если я нажимаю push-уведомление, которое система сначала вызовет,

- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary *)userInfo{

//your code execution will here.

}

И второй вызов метода будет,

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

//Your initial code execution.

}

Этот сценарий, который я тестировал в своем приложении.