/ / Obsługa powiadomień lokalnych, gdy użytkownik naciśnie ikonę zamiast alertu - ios, objective-c, notyfikacje, uilocalnotification, localnotification

Obsługa powiadomień lokalnych, gdy użytkownik naciśnie ikonę zamiast alertu - ios, cel-c, powiadomienia, informacje o błędach, powiadomienie lokalne

Oto sytuacja, z którą chcę sobie poradzić, cytowana z dokumentacji Apple.

W wyniku przedstawionego zawiadomienia, plikużytkownik naciska przycisk akcji alertu lub stuka (lub klika) ikonę aplikacji. W przypadku dotknięcia przycisku akcji (na urządzeniu z systemem iOS) system uruchamia aplikację, a aplikacja wywołuje aplikację delegata: didFinishLaunchingWithOptions: metoda (jeśli zaimplementowana); przechodzi w ładunku powiadomienia (w przypadku powiadomień zdalnych) lub w obiekcie powiadomienia lokalnego (w przypadku powiadomień lokalnych).

Jeśli ikona aplikacji zostanie dotknięta na urządzeniuz systemem iOS aplikacja wywołuje tę samą metodę, ale nie dostarcza żadnych informacji o powiadomieniu. Jeśli ikona aplikacji zostanie kliknięta na komputerze z systemem OS X, aplikacja wywoła metodę applicationDidFinishLaunching: delegata, w której delegat może uzyskać ładunek powiadomienia zdalnego.

Jak sobie z tym poradzić, jeśli nie ma informacji o powiadomieniu?

Odpowiedzi:

5 dla odpowiedzi № 1

Jeśli dobrze cię rozumiem, to brzmi jak tymają UILocalNotification, który został uruchomiony, ale nadal musisz go obsłużyć, jeśli użytkownik dotknie ikony aplikacji zamiast powiadomienia. Poprawny?

Jeśli tak jest, to o ile wiem, tynie będzie w stanie obsłużyć powiadomienia od delegata aplikacji, ponieważ aplikacja nie jest uruchamiana ani wyprowadzana z tła przez powiadomienie, ale zamiast tego przez interakcję użytkownika.

Jeśli jednak ustawiasz BadgeNumber w aplikacji z powiadomieniem, możesz spróbować czegoś takiego:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) {
UILocalNotification *notification = launchOptions[UIApplicationLaunchOptionsLocalNotificationKey];
} else if ([UIApplication sharedApplication].applicationIconBadgeNumber > 0) {
// Assume that user launched the app from the icon with a notification present.
}}

Być może będziesz musiał sprawdzić numer odznaki w - (void)applicationDidBecomeActive:(UIApplication *)application także.


1 dla odpowiedzi nr 2

Popraw odpowiedź @Aron Crittendon:

Rozważ również obsłużenie tego w applicationDidBecomeActive:

-(void)applicationDidBecomeActive:(UIApplication *)application
{
if ([UIApplication sharedApplication].applicationIconBadgeNumber > 0) {
//application is in background, fired notification and user tapped app icon with badge
}
}

0 dla odpowiedzi № 3

Jak podaje dokumentacja, dotknięcie ikonyw systemie iOS (a nie w alercie / banerze powiadomienia) wywoływana jest ta sama metoda, ale nie otrzymujesz żadnych informacji o powiadomieniu. Nie ma sposobu, aby obsłużyć lokalne powiadomienie, po prostu dotykając ikony aplikacji.