Es gibt viele Stackoverflow-Threads zu diesem Thema, aber ich habe immer noch keine gute Lösung gefunden.
Wenn sich die App nicht im Hintergrund befindet, kann ich einen Anruf einchecken, launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]
um application:didFinishLaunchingWithOptions:
festzustellen, ob sie über eine Benachrichtigung geöffnet wurde.
Wenn sich die App im Hintergrund befindet, schlagen alle Beiträge vor, application:didReceiveRemoteNotification:
den Anwendungsstatus zu verwenden und zu überprüfen. Aber wie ich experimentiert habe (und auch wie der Name dieser API andeutet), wird diese Methode aufgerufen, wenn die Benachrichtigung empfangen wird, anstatt darauf zu tippen.
Das Problem ist also, wenn die App gestartet und dann im Hintergrund ausgeführt wird und Sie wissen, dass eine Benachrichtigung von empfangen wird application:didReceiveNotification
( application:didFinishLaunchWithOptions:
wird zu diesem Zeitpunkt nicht ausgelöst), woher Sie wissen, ob der Benutzer die App wieder aufgenommen hat, indem Sie auf die Benachrichtigung tippen oder einfach auf tippen App-Symbol? Wenn der Benutzer auf die Benachrichtigung getippt hat, wird erwartet, dass die in dieser Benachrichtigung erwähnte Seite geöffnet wird. Sonst sollte es nicht.
Ich könnte handleActionWithIdentifier
für benutzerdefinierte Aktionsbenachrichtigungen verwenden, dies wird jedoch nur ausgelöst, wenn auf eine benutzerdefinierte Aktionsschaltfläche getippt wird, nicht, wenn der Benutzer auf den Hauptteil der Benachrichtigung tippt.
Vielen Dank.
BEARBEITEN:
Nachdem ich eine Antwort unten gelesen hatte, dachte ich, dass ich auf diese Weise meine Frage klären kann:
Wie können wir diese beiden Szenarien unterscheiden:
(A) 1.app geht in den Hintergrund; 2. Benachrichtigung erhalten; 3. Der Benutzer tippt auf die Benachrichtigung. 4. App tritt in den Vordergrund
(B) 1.app geht in den Hintergrund; 2. Benachrichtigung erhalten; 3. Der Benutzer ignoriert die Benachrichtigung und tippt später auf das App-Symbol. 4. App tritt in den Vordergrund
Da application:didReceiveRemoteNotification:
wird in beiden Fällen in Schritt 2 ausgelöst.
Oder sollte application:didReceiveRemoteNotification:
in Schritt 3 nur für (A) ausgelöst werden, aber ich habe meine App irgendwie falsch konfiguriert, sodass ich sie in Schritt 2 sehe?