Po otrzymaniu UILocalNotification
Ustalenie czy UILocalNotification zwolniony z aplikacji w planie lub w tle
- Metoda
application:DidReceiveLocalNotification
jest wywoływana, gdy aplikacja jest na pierwszym planie. - Gdy aplikacja jest w tle, otwiera aplikację, a następnie wywołuje
application:DidReceiveLocalNotification
.
Jak ustalić, który z tych scenariuszy ma miejsce? Chciałbym traktować je inaczej.
Jeśli aplikacja była w tle, użytkownik wskazał, że chce obejrzeć wydarzenie. Więc w application:DidReceiveLocalNotification
nie chcę ich ponownie pytać, chcę tylko zabrać ich na to wydarzenie.
Ale jeśli aplikacja jest na pierwszym planie, gdy powiadomienie odpala i dzwoni application:DidReceiveLocalNotification
, chcę zapytać użytkownika, czy chce obejrzeć wydarzenie.
W istocie musiałbym:
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
if (appLauncedFromBackground)
// go to event
else
// ask if user wants to view event
}
myślałem o napisaniu wartość bool do NSUserDefault wewnątrz applicationWillEnterForeground:application
a następnie odczyt i zerowanie go wewnątrz application:DidReceiveLocalNotification
. Ale pomyślałem, że jeśli istnieje sposób na sprawdzenie, to byłoby o wiele lepsza trasa.
Dzięki, Mark
EDIT * ** * ** * ** * ** * ** * ** * * ** ** * ** * **
Dzięki Xuzhe, ale to nie zadziała w tej sytuacji. Oto trochę więcej szczegółów, które mogą wyjaśnić, dlaczego to nie zadziała, i być może pomóc komuś w udzieleniu odpowiedzi:
Ustawienie UILocalNotification
, które tu ustawiam, jest zdarzeniem podobnym do zdarzenia kalendarza zaplanowanego do uruchomienia u wybranego użytkownika więc kiedy planuję powiadomienie, nie będę miał pojęcia, co zrobi użytkownik po uruchomieniu powiadomienia. Korzystam z parametru userInfo powiadomienia, aby przechowywać dane o zdarzeniu, które jest zaplanowane, ale ustawienie wartości takiej jak w BackBack zgodnie z sugestią nie będzie działać.
Wiem, że będzie to jedna z dwóch sytuacji, jeśli użytkownik zdecyduje, że chce "obejrzeć" wydarzenie. (wszystko to zakłada, że aplikacja jest albo w tle, albo na pierwszym planie, a NIE, aby zakończyć).
1 - Jeśli jest wyzwalana, gdy aplikacja nie jest używana & & aplikacja znajduje się w tle i nie rzucić, iOS poinformuje użytkownika, że wystąpiło zdarzenie i stanowią opcję dla zamiar odpowiedzialnego aplikacji (co w tym przypadku jest moje). W tym momencie zakładając, że użytkownik mówi "tak, zabierz mnie do tej fajnej aplikacji", otworzy aplikację z tła i zadzwoni do aplikacji: DidReceiveLocalNotification, gdzie mogę uzyskać wszystkie powiadomienia userInfo.
2 - Użytkownik przypadkowo znajduje się w mojej aplikacji, gdy ma miejsce zaplanowane wydarzenie. W tym momencie aplikacja: metoda DidReceiveLocalNotification jest wywoływana ponownie, gdzie mogę uzyskać wszystkie powiadomienia userInfo.
Ale jest w tym momencie, że chcę wiedzieć, które z tych dwóch scenariuszy właśnie miała miejsce 1 lub 2.
nadzieję, że ten dodatkowy szczegół o moim użytkowania UILocalNotification
pomogą w odpowiedzi na to pytanie. Dzięki z góry - znak
END EDIT * ** * ** * ** * ** * ** * ** * ** * ** * ***
Zmieniłem to pytanie, aby lepiej wyjaśnić. I dzięki, @usu, ale to nie zadziała dla mnie. Nie wylogowuję się z LocalNotification, jest to UILocalNotification, która została zaplanowana na jakiś czas. Dlatego nie mogę określić, co użytkownik będzie robić w tym czasie. –
Zmieniono odpowiedź ponownie. Możesz łatwo sprawdzić stan swojej aplikacji za pomocą właściwości UIApplicationState. – xuzhe
Bardzo, bardzo ładne. Naprawiono błąd, który miałem od dłuższego czasu. –