2012-05-18 10 views
5

Ich möchte Daten von Push-Benachrichtigung erhalten. Ich erhalte die Daten erfolgreich, wenn die App im Vordergrund und im Hintergrund ist. aber ich bin nicht in der Lage, Daten zu erhalten, wenn die App beendet wird und der Benutzer die Schaltfläche zum Anzeigen der Push-Benachrichtigung drückt. Ich schreibe den Code in der Anwendung wurde fertig gestartet. Dieser Code führt zum Absturz der App beim Drücken der Schaltfläche "Anzeigen" der Push-Benachrichtigung. Wenn ich den Code kommentiere, stürzt App nicht ab. Bitte helfen Sie mir, Daten aus der Push-Benachrichtigung zu holen, wenn die App beendet wird und der Benutzer die Anzeige-Taste auf der Push-Benachrichtigung drückt. Ich werde das wirklich zu schätzen wissen.Push-Benachrichtigungsdaten abrufen

if(launchOptions != nil){ 
     NSDictionary *tmpDic = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; 
     if (tmpDic!=nil) { 
      pushedMessage=[NSString stringWithFormat:@"%@",[[tmpDic objectForKey:@"aps"] objectForKey:@"alert"]]; 
      pushedCountry=[NSString stringWithFormat:@"%@",[tmpDic objectForKey:@"country"]]; 
      [self saveToDatabase]; 
     } 
    } 
+0

Sie arbeiten in Ios 4 Ya IOS 5 – Deepesh

+0

bedeuten laufen Sie es ist nicht möglich, in IOS4 und 5? –

+0

bitte Nslog tmpDic und einchecken Gerätekonsole – Deepesh

Antwort

-1

Wenn Sie Ansicht klicken

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

diese Methode aufgerufen wird und Userinfo werden alle Daten

Dinge enthalten, die Sie in didfinishlaunch Methode tun in didReceiveRemoteNotification tun:

0

Ich verstehe nicht ganz, was Ihr fragen, aber sie Dinge mit tun kann, was in der AppDelegate mit einer Funktion der Push ist sein

- (void)application:(UIApplication*)application didReceiveRemoteNotification: 
(NSDictionary*)userInfo 
{ 
NSLog(@"Received notification: %@", userInfo); 
[self addMessageFromRemoteNotification:userInfo updateUI:YES]; 
} 

Jetzt können Sie diese Daten auf Kerndaten hinzufügen oder sqlite. Dies ist möglicherweise nicht relevant für Ihre Frage, aber es ist das Beste, was ich geben kann, basierend auf dem, was Sie in Ihrer Frage gefragt haben.

0

Siehe meinen Kommentar zu der obigen Antwort.

Hier ist doc Apple:

Wenn die App, wenn eine Push-Benachrichtigung kommt nicht läuft, wird die Methode startet die App und stellt die entsprechenden Informationen in der Startoptionen Wörterbuch. Die App ruft diese Methode nicht auf, um die Push-Benachrichtigung zu behandeln. Stattdessen muss Ihre Implementierung der Anwendung: willFinishLaunchingWithOptions: oder Anwendung: didFinishLaunchingWithOptions: Methode muss die Push-Benachrichtigung Nutzdaten erhalten und entsprechend reagieren.

So müssen Sie implementieren:

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

Neben den Umgang mit den launchOptions in:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
+0

Finicky Implementierung von Apple. – Chris

1

Bitte versuchen, diese ...

dieser Code hinzufügen AppDelegate. m => didFinishLaunchingWithOptions

if ([launchOptions valueForKey:@"UIApplicationLaunchOptionsRemoteNotificationKey"]) { 

    [self application:application didReceiveRemoteNotification:launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]]; 

} 
1

Von ios7 haben wir die unten Delegatmethode die Push-Benachrichtigung zu behandeln, wenn die App im Boden zurück ist oder nicht

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))handler