2012-09-05 10 views
8

Próbuję odczytywać otrzymywanie powiadomień w mojej aplikacji, ale nie działa to prawidłowo.Obsługa powiadomień iOS po uruchomieniu aplikacji z niedziałającego stanu

Kiedy używam didReceiveLocalNotification:(UILocalNotification *)notification. Mogę otrzymywać i używać powiadomień, które są używane do wejścia do aplikacji, bez żadnych problemów.

Jednak ta funkcja jest uruchamiana tylko wtedy, gdy aplikacja jest już z uruchomioną (aktywna, nieaktywna, tła i prawdopodobnie zawieszona, ale ja jeszcze tego nie próbowałem).

Teraz jest ta funkcja didFinishLaunchingWithOptions:(NSDictionary *)launchOptions, gdzie można użyć [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey], która zwróci UILocalNotification.

Jednak po uruchomieniu aplikacji z nie uruchomionych stan ten zdarzenie nie jest uruchamiane. LocalNotification następnie otwiera aplikację, ale nie mogę jej użyć w żaden sposób.

Moje pytanie brzmi: Jak mogę sprawić, aby działało, więc mogę odbierać i przetwarzać powiadomienia podczas uruchamiania aplikacji, z powiadomienia, gdy aplikacja nie jest uruchomiona? Czy jest coś, co robię tutaj źle?

Oto przykładowy fragment kodu z mojej aplikacji:

pierwsze, funkcja didFinishLaunchingWithOptions, która niestety nie działa. Funkcja [sharedLocalNotificationsInstance processNotification:notification] nie jest uruchomiona ...

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

LocalNotificationsController *sharedLocalNotificationsInstance = [LocalNotificationsController sharedLocalNotificationsInstance]; 
[sharedLocalNotificationsInstance checkNotifications]; 

UILocalNotification *notification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey]; 
if (notification != nil) { 

    // Process the received notification 
    [sharedLocalNotificationsInstance processNotification:notification]; 

    application.applicationIconBadgeNumber = 0; 
} 

return YES; 
} 

I drugi fragment kodu: Funkcja didReceiveLocalNotification, który działa perfekcyjnie: I odbierać powiadomienia, a [sharedLocalNotificationsInstance processNotification: Zawiadomienie] działa idealnie.

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{ 

// Used when the application launches from a notification 
LocalNotificationsController *sharedLocalNotificationsInstance = [LocalNotificationsController sharedLocalNotificationsInstance]; 

// Process the received notification 
[sharedLocalNotificationsInstance processNotification:notification]; 
} 
+0

Cześć laarsk. Mam ten sam dokładny problem. Mogę przechwytywać powiadomienia, gdy aplikacja znajduje się na polach lub na całym świecie, ale śmieszne rzeczy dzieją się, gdy aplikacja jest zamknięta. Klikam na powiadomienie, aplikacja otwiera się, pozostaje na ekranie przez 1 sekundę, a ekran staje się czarny. widzę aplikację w tle, ale nie widzę powiadomienia o otrzymaniu powiadomienia. Naprawdę nie jestem pewien, czy UILocalNotification * notification = (UILocalNotification *) [launchOptions objectForKey: UIApplicationLaunchOptionsLocalNotificationKey]; działa lub nie. Czy znalazłeś solidne rozwiązanie? – Add080bbA

Odpowiedz

4

W ten sposób iOS obsługuje powiadomienia lokalne. To zależy od stanu aplikacji, np. aktywne, działające w tle lub jeszcze nie rozpoczęte. System iOS wywoła metodę didFinishLaunchingWithOptions lub didReceiveLocalNotification lub w ogóle jej nie dotknie.

Proszę zobaczyć ten artykuł do wyjaśnienia - http://www.thekspace.com/home/component/content/article/62-uilocalnotification-demystified.html

+0

Dzięki za link! Niestety, ta strona mówi również, że aplikacja uruchomi didFinishLaunchingWithOptions, gdy aplikacja będzie w stanie niedziałającym, co, niestety, nie ... Najmniej, o ile wiem. Coś, o czym teraz myślę, to prawdopodobnie coś innego: uruchom aplikację, a następnie uruchom wydarzenie didReceiveLocalNotification. Zaprogramowałem tylko to zdarzenie, aby coś zrobić, gdy applicationState = 1 (active), ale może potrzebuję tego użyć. Zobaczę! – laarsk

+0

Jeśli aplikacja nie jest uruchomiona, po powiadomieniu lokalnym i użytkownik aktywuje powiadomienie, system iOS uruchomi aplikację i przekaże obiekt powiadomień za pośrednictwem usługi didFinishLaunchingWithOptions. Jeśli jednak użytkownik nie aktywuje powiadomienia, nic się nie stanie. –

+0

W iOS7 nie zobaczyłem żadnego powiadomienia z iOS, gdy aplikacja jest nieaktywna. Znaczek jest ustawiony, ale po kliknięciu w ikonę aplikacji nie są wywoływane żadne funkcje. – Brave

1

<Matrix-Morpheus-Meme title="WHAT IF I TOLD YOU">

Gdy aplikacja jest uruchamiana z „nie-systemem” stanie ponieważ użytkownik podsłuchu na lokalnym powiadomienie o zagrożeniu, aplikacja została uruchomiona przez iOS, a nie przez Xcode, więc NIE DZIAŁA POD WPŁYWEM DEBUGGERA. Nie można złamać wewnątrz niego ani NSLog() nie wysyła niczego do konsoli Xcode. Przetestuj za pomocą UIAlertController.

</Matrix-Morpheus-Meme>

Powiązane problemy