2012-08-29 15 views
5

Ich habe eine Reihe von Fragen hier zu SO bezüglich des Empfangens von Push-Benachrichtigungen gelesen, während die Anwendung nicht ausgeführt wird (mehr als im Hintergrund, was bedeutet, dass sie vollständig heruntergefahren wird) . This question in particular ist am hilfreichsten, wenn Sie herausfinden möchten, wie Sie feststellen können, ob jemand das launchOptions-Wörterbuch verwendet.Push-Benachrichtigung, während App nicht ausgeführt wird - launchOptions-Wörterbuch ist leer

Allerdings bin ich sehr verwirrt, und ich gestehe voll und ganz zu, dass dies ein massives Versehen sein könnte: wenn mein Gerät eine Push-Benachrichtigung für diese Anwendung erhält, während die App heruntergefahren ist, und ich später meine Anwendung öffne, Das launchOptions-Wörterbuch ist ein Nullzeiger. Aus der Beschreibung der angenommenen Antwort in dem zuvor erwähnten Link und anderen Orten, versichere ich, dass ich in der Lage sein sollte, eine Benachrichtigungsnutzlast zu sehen; Aber da ist nichts. Ich entwickle für iOS 5.1.1.

Mein einziger anderer Gedanke ist, die Anzahl der Abzeichen beim Start zu überprüfen (größer als Null, etwas tun ...), aber das scheint sehr unzuverlässig.

Kann mir jemand sagen, was ich vermisse? Vielen Dank im Voraus für Ihre Hilfe!

+0

gilt. Was ist in der Nutzlast? – msk

+0

@MSK Es tut mir leid, verstehe ich nicht ganz - fragen Sie, was der ursprüngliche Push (von meinem Server) als seine Nutzlast enthielt? Wenn dies der Fall ist, ist die Nutzlast grundlegend, sie enthält nichts, was über das übliche Abzeichen, den Alarm und den Ton hinausgeht. –

+0

siehe meine Antwort unter – msk

Antwort

7

application:didFinishLaunchingWithOptions: werden nur mit Nutzinformationen aufgerufen, wenn die App aufgrund einer Benachrichtigung gestartet wird. Z.B. Dies kann passieren, wenn der Benutzer die Benachrichtigungsbenachrichtigung (hinzugefügt im Benachrichtigungscenter) oder die Benachrichtigung mit content-avialble = 1 in Payload (Nachrichtenstandbenachrichtigung) & abgreift, vorausgesetzt, Ihre App befindet sich nicht im Vordergrund und auch nicht im Hintergrund.

Wenn Ihre App benachrichtigt wird, wenn sich die App im Hintergrund befindet. Wenn es Zeitungen Zeitschriften Benachrichtigung oder wenn Benutzer über Aktionstaste Alarm unten Methode tippt wird

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 

mit [[UIApplication sharedApplication] applicationState] nicht gleich UIApplicationStateActive genannt.

In obigem Fall, wenn Benutzer nicht über Aktionsschaltfläche der Benachrichtigung Alarm tippen und App durch Antippen starten, wird weder didFinishLaunchingWithOptions noch aufgerufen.

Wenn Ihre App im Vordergrund benachrichtigt wird didReceiveRemoteNotification heißt [[UIApplication sharedApplication] applicationState] wird gleich UIApplicationStateActive sein.

Wenn Ihre App in notification nicht ausgeführt wird, wird kein Code ausgeführt und das Badge wird im App-Symbol um 1 erhöht. Wenn Sie App starten (tippen Sie auf App-Symbol) didFinishLaunchingWithOptions wird mit normal aufgerufen. (Wenn die App im Hintergrund oder im Vordergrund ist, wenn die Benachrichtigung empfangen wurde, wie oben)

Also ich denke, dies deckt jeden möglichen Fall ab. Beachten Sie auch, dass der Hintergrundfall für iOS SDK >= 4.0

+0

Ah ha, danke für deine Antwort. Mein Hauptziel war es, einige Daten von einem Server zu holen, wenn ein Push empfangen wird; wir haben dies im Hintergrund und im Vordergrund, und ich hatte gehofft, dass ich beim Laden erkennen könnte, ob ein Push empfangen wurde, während die App offline war. Aufgrund Ihrer Antwort scheint es, dass dies unmöglich ist, es sei denn, der Benutzer berührt die Benachrichtigungsleiste. Ist es Ihrer Meinung nach zuverlässig, die Plakettenanzahl unter Last zu prüfen? –

+0

Sie müssen die Anzahl der Plaketten in Ihrem Server verwalten. Siehe [diese SO Frage] (http: // stackoverflow.com/questions/1942605/push-notification-badge-auto-increment) – msk

+0

Ah ja cool, das wusste ich schon. Das ist nicht ganz das, was ich gefragt habe: Ich weiß, dass ich in der App die Badge-Zählung mit [applicationIconBadgeNumber] überprüfen kann. Was ich mich gefragt habe, ob es zuverlässig ist, zu überprüfen, ob die Plakettenanzahl größer als Null ist ('[application applicationIconBadgeNumber]> 0'). Gibt es irgendeinen Grund, warum ich das nicht tun sollte? –