Jest wiele wątków związanych z przepełnieniem stosów dotyczących tego tematu, ale nadal nie znalazłem dobrego rozwiązania.
Jeśli aplikacja nie jest w tle, można sprawdzić launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]
na application:didFinishLaunchingWithOptions:
wezwanie, aby zobaczyć czy jest otwarty od zgłoszenia.
Jeśli aplikacja działa w tle, wszystkie posty sugerują użycie application:didReceiveRemoteNotification:
i sprawdzenie stanu aplikacji. Ale jak eksperymentowałem (i jak sugeruje nazwa tego API), ta metoda jest wywoływana po odebraniu powiadomienia, zamiast dotknięcia.
Problem polega więc na tym, że jeśli aplikacja jest uruchomiona, a następnie działa w tle, i wiesz, że otrzymano powiadomienie application:didReceiveNotification
( application:didFinishLaunchWithOptions:
nie zostanie uruchomione w tym momencie), skąd wiesz, czy użytkownik wznowił aplikację, dotykając powiadomienia lub po prostu dotykając ikonę aplikacji? Ponieważ jeśli użytkownik dotknął powiadomienia, oczekuje się, że otworzy stronę wspomnianą w tym powiadomieniu. W przeciwnym razie nie powinno.
Mógłbym użyć handleActionWithIdentifier
do powiadomień o niestandardowych akcjach, ale jest to wyzwalane tylko po dotknięciu przycisku niestandardowej akcji, a nie po dotknięciu przez użytkownika głównej treści powiadomienia.
Dzięki.
EDYTOWAĆ:
po przeczytaniu jednej odpowiedzi poniżej pomyślałem, że mogę wyjaśnić swoje pytanie:
Jak możemy rozróżnić te 2 scenariusze:
(A) 1. aplikacja przechodzi w tło; 2. otrzymane powiadomienie; 3. użytkownik dotyka powiadomienia; 4. aplikacja przechodzi na pierwszy plan
(B) 1. aplikacja przechodzi w tło; 2. otrzymane powiadomienie; 3. użytkownik ignoruje powiadomienie i później dotyka ikony aplikacji; 4. aplikacja przechodzi na pierwszy plan
Ponieważ application:didReceiveRemoteNotification:
jest wyzwalane w obu przypadkach w kroku 2.
A może powinien application:didReceiveRemoteNotification:
zostać uruchomiony w kroku 3 tylko dla (A), ale w jakiś sposób skonfigurowałem nieprawidłową aplikację, więc widzę ją w kroku 2?