2012-05-23 4 views
3

Моя проблема такая.Приложение было открыто из значка или уведомления

Я отправляю запрос на сервер с просьбой уведомить меня о событии, которое произойдет через 2-10 минут и закройте приложение, и сервер ответит на этот запрос посредством push-уведомления. Пока сервер не ответит уведомлением, приложение покажет анимацию, на всякий случай, если она останется на переднем плане.

Когда я получаю уведомление, когда приложение открыто, анимация должна остановиться и отобразить некоторые данные из уведомления. Моя проблема: если я не открываю приложение из уведомления (я открываю его из значка), анимация продолжает отображаться, потому что метод обратного вызова для «didReceiveRemoteNotification» никогда не вызван.

Возможно ли это проверить, открыто ли приложение из значка или из уведомления (локальное или push)?

+0

Но если вы хотите, чтобы значок загрузки отображался до тех пор, пока не будет ответа, тогда это необходимо? Мне кажется, что анимация должна сказать «ожидание ответа от сервера». Другое дело, что вы можете узнать, какой метод делегата вызывается при нажатии на уведомление и использовать другие точки входа для очистки анимации (не открываются по ссылке уведомления) –

+0

Я использовал другую точку входа и заставил ее работать , как MrTj, и вы предложили. Спасибо. –

ответ

2

Абзац SDK помощи application:didFinishLaunchingWithOptions: объясняет очень хорошо, какие методы делегата называются в различных старт/Просыпайтесь сценариев (например, щелкнув зарегистрированный обработчик URL, открытие поддерживаемый тип mime, ответ на удаленные/локальные уведомления, щелчок на значке на главном экране и т. д.)

Кроме того, если ваше приложение уже запущено во время вышеуказанных событий, будут называться соответствующие методы делегата (например, didReceiveRemoteNotification, openURL и т. Д.), Кроме applicationDidBecomeActive:. Из комбинации вызываемых обратных вызовов вы можете выяснить, какое событие произошло.

+0

Использование «didfinishlaunch ..» не было возможным, поскольку приложение запускалось при открытии. Но я сделал вторую часть, и я получил ее на работу. Спасибо! –

1

Вы можете сделать это, проверив объект launchOptions. Это должно указать, открыли ли вы свое приложение напрямую или в результате уведомления.

Вы можете сделать некоторые вещи, как это:

if(!launchOptions){ 
    NSLog(@"App invoked directly"); 
} 
+1

Это было бы хорошим решением, если приложение еще не было запущено. Спасибо хоть. –

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