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 № 1Jeś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.