2015-04-19 3 views
5
func application(application: UIApplication, didReceiveRemoteNotification data: [NSObject : AnyObject]) { 
     var dat = JSON(data) 
     if application.applicationState == UIApplicationState.Active { 
      // app was already in the foreground 
      println("App is in foreground") 
      processNotification(dat) 
     }else{ 
      // app was just brought from background to foreground via PUSH 
      println("App brought back via PUSH") 
      processNotification(dat) 
     } 
    } 

So überprüfe ich nach Push-Benachrichtigungen. Wenn ich jedoch eine Push-Benachrichtigung sende, verfehlt der Benutzer diese und öffnet dann die App über das Symbol? Wie kann ich überprüfen, wann die App über das Symbol geöffnet wurde?Wie kann ich überprüfen, wenn eine App aus dem Hintergrund in den Vordergrund rückt, aber nicht von einer Push-Benachrichtigung?

+1

Sie meinen, wie zu erkennen, ob die App geöffnet ist, aber es ist eine ungeöffnete Benachrichtigung hängen? – Simon

+0

@Simon ja, ich denke schon. – TIMEX

Antwort

10

The UIApplicationDelegate protocol definiert mehrere Methoden, mit denen Sie Code zu mehreren Lebenszyklusereignissen Ihrer Anwendung hinzufügen können.

Von besonderem Interesse für Sie wäre die folgende:

  • application(_:willFinishLaunchingWithOptions:) - genannt, kurz bevor die Anwendung gestartet wird beendet, wenn die Anwendung im Hintergrund nicht bereits aktiv war
  • application(_:didFinishLaunchingWithOptions:) - kurz nach der Anwendung aufgerufen wurde gestartet, wenn die Anwendung nicht bereits im Hintergrund aktiv war
  • applicationDidBecomeActive(_:) - aufgerufen, sobald die Anwendung aktiv ist, wird dies aufgerufen, wenn der Benutzer von Grund auf neu startet, öffnet wieder aus dem Hintergrund und auch w Henne ein Benutzer kehrt von einer vorübergehenden Unterbrechung (wie ein Telefonanruf)
  • applicationWillEnterForeground(_:) - dies kurz vor der Anwendung aufgerufen wird tritt in den Vordergrund, nachdem im Hintergrund gewesen - es sofort von dem applicationDidBecomeActive(_:) Anruf
folgt

Diese Lebenszyklusereignisse können ausgelöst werden, wenn der Benutzer Ihre Anwendung über eine Benachrichtigung oder durch Antippen des Symbols öffnet. Soweit ich weiß, gibt es keine Möglichkeit zu sagen, dass die Anwendung durch Antippen des Symbols geöffnet wurde. Sie können (ish) wissen, dass die Anwendung nicht über eine Benachrichtigung geöffnet wurde, da die relevanten Benachrichtigungsmethoden nie ausgelöst werden. Aber das erlaubt dem Benutzer immer noch zwei (mindestens) Methoden, die Anwendung zu öffnen: Tippen Sie auf das App-Symbol oder tippen Sie zweimal auf die Home-Taste und tippen Sie auf die App, um sie aus dem Hintergrund aufzuwecken.

+0

Ich rate "applicationDidBecomeActive" ist was ich suche, richtig? – TIMEX

+0

Wahrscheinlich. Es ist einfach genug, Breakpoints oder 'println' in alle zu setzen und herumzuspielen, um * genau * zu sehen, wie der Lebenszyklus funktioniert und herauszufinden, was genau benötigt wird. – nhgrif

+0

Entsprechend den Referenzseiten gibt es ein Wörterbuch mit Schlüsseln, in denen Sie herausfinden können, ob noch Benachrichtigungen hängen: https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplicationDelegate_Protocol/#/apple_ref/doc/Konstante_Gruppe/Launch_Options_Keys – Simon

Verwandte Themen