Ermitteln, ob App aufgrund von UILocalNotification den Fokus erhalten hat

7

Ich mache eine App, die einige Erinnerungen verfolgt, die mit einem benutzerdefinierten Intervall wiederholt werden.

Ich habe es so gemacht, wenn die Warnung angezeigt wird, der Action-Titel lautet "Renew". Wenn Sie darauf klicken, wird die App geöffnet, und hier möchte ich die nächste Erinnerung erstellen, aber das Problem ist, dass ich nicht weiß, ob die App geöffnet wird, weil die Benachrichtigungsschaltfläche angetippt wurde oder die Benachrichtigung ausgelöst wurde, während die App ausgeführt wurde.

Hat jemand irgendwelche Ideen?

    
oskob 03.10.2011, 15:32
quelle

6 Antworten

13

Der richtige Weg, dies zu tun, besteht darin, die applicationState-Eigenschaft Ihrer NSApplication in der Anwendung zu überprüfen: didReceiveRemoteNotification: Methode Ihres Delegaten.

Aus der Dokumentation zum Umgang mit lokalen Benachrichtigungen:

  

iOS Hinweis: In iOS können Sie bestimmen, ob eine Anwendung gestartet wird   dadurch, dass der Benutzer auf die Aktionsschaltfläche klickt oder ob der   Die Benachrichtigung wurde an die bereits laufende Anwendung von   Überprüfen des Anwendungsstatus. In der Implementierung von   die Anwendung: didReceiveRemoteNotification: oder   Anwendung: didReceiveLocalNotification: Methode, erhalten Sie den Wert der   applicationState-Eigenschaft und evaluieren sie. Wenn der Wert ist   UIApplicationStateInactive, der Benutzer hat auf die Aktionsschaltfläche geklickt; wenn die   Wert ist UIApplicationStateActive, die Anwendung war vorderste wann   Es hat die Benachrichtigung erhalten.

Dies entspricht Ihrer Lösung, die Flags verwendet, die in applicationWillEnterForeground und applicationDidBecomeActive gesetzt sind, aber mit Systemunterstützung.

    
Robin Summerhill 05.10.2011, 13:37
quelle
13

Ich weiß nicht, ob meine Frage unklar war, aber es scheint, dass ich vier verschiedene Antworten bekommen habe, die alle meine Frage falsch interpretiert haben: P

Allerdings habe ich festgestellt, dass die didReceiveLocalNotivication zwischen willEnterForeground und didBecomeActive auftritt, also habe ich das getan, um festzustellen, ob die App bereits geöffnet war oder nicht:

%Vor%     
oskob 03.10.2011 16:01
quelle
0

Lesen Sie die Dokumentation für UIApplication-Startoptionsschlüssel. Der letzte Parameter für Ihre Anwendung: didFinishLaunchingWithOptions: Die Delegate-Methode enthält die benötigten Informationen.

Siehe auch Anwendung: didReceiveLocalNotification .

    
Robin Summerhill 03.10.2011 15:38
quelle
0

Sie suchen nach

%Vor%

oder

%Vor%

Dokumentation

    
filipe 03.10.2011 15:36
quelle
0

Wenn Ihre Anwendung bereits ausgeführt wird, erhalten Sie diese Delegiertenmeldung auf dem App-Delegaten

%Vor%

Wenn es nicht ausgeführt wurde, müssen Sie

verwenden %Vor%

Sie müssen in beiden Methoden entsprechend reagieren, um alle Fälle abzudecken

AKTUALISIERT

Um festzustellen, ob der Benutzer die Aktionsschaltfläche aktiviert hat, ist etwas mehr Komplexität erforderlich. Wir können sagen, dass application:didFinishLaunchingWithOptions: die lokale Benachrichtigung als Startoption haben wird, aber es ist schwieriger mit application:didReceiveLocalNotification: .

Da die Anwendung aktiv wird, nachdem der Benutzer auf die Schaltfläche geklickt hat, müssen wir warten, bis wir diese Nachricht sehen (oder nicht). Legen Sie eine NSTimer in application:didReceiveLocalNotification fest und stornieren Sie sie in didBecomeActive . Das bedeutet, dass der Benutzer den Aktionsknopf gedrückt hat. Wenn der Timer nicht abgebrochen wird, befand sich der Benutzer beim Starten in der App.

    
Jason Harwig 03.10.2011 15:43
quelle
0

In Ihrem App-Delegaten in dieser Methode:

%Vor%

Sie müssen die Startoptionen auf diesen Schlüssel untersuchen:

UIApplicationLaunchOptionsLocalNotificationKey

Wenn Sie bereits aktiv sind, wird dies aufgerufen:

%Vor%     
EricLeaf 03.10.2011 16:21
quelle

Tags und Links