2014-02-14 4 views
11

Wenn mein app auf dem Hintergrund ist und ich erhalte eine Remote-Benachrichtigung, passieren zwei Dinge können:didReceiveRemoteNotification nicht aufgerufen wird, wenn ich auf App-Symbol tippen, nachdem eine Push-Benachrichtigung, während auf dem Hintergrund Empfang

  1. ich den Hahn Push-Benachrichtigungsbanner, meine Apps kommen in den Vordergrund und didReceiveRemoteNotification wird aufgerufen.

  2. Ich tippe auf mein App-Symbol vom Sprungbrett, meine App kommt in den Vordergrund und didReceiveRemoteNotification wird nicht aufgerufen.

Also, im Szenario 1, kann ich meine Zähler der ungelesenen Nachrichten in der App als Reaktion auf didReceiveRemoteNotification aktualisieren. In Szenario 2 kann ich nicht.

Wie kann ich das mit Quickblox lösen?

+1

sind Sie in der Lage, dieses Problem zu lösen? – Nameet

+0

haben Sie dieses Problem gelöst? – AnshaD

+0

@MarioFrade ich proxi Antwort mit neuem Dokument aktualisiert, und Ihr Problem ist das erwartete Verhalten – onmyway133

Antwort

3

Als eine mögliche Variante:

@implementation AppDelegate 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; 
    if (userInfo) { 
     [self handleRemoteNotifications:userInfo]; 
    } 

    // Override point for customization after application launch. 
    return YES; 
} 

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { 
    [self handleRemoteNotifications:userInfo]; 
} 

#pragma mark - Remote notifications handling 

-(void)handleRemoteNotifications:(NSDictionary *)userInfo { 
    // do your stuff 
} 

@end 
+0

didFinishLaunchingWithOptions doesnt aufgerufen wird, wenn App im Hintergrund und wurde nicht getötet, und ich benutze Symbol die App – sheetal

+0

didReceiveRemoteNotification zu starten: sollte – frankWhite

+0

in diesem Fall in Anspruch genommen werden hi, @sheetal, ich habe ein ähnliches Szenario, aber ein wenig Modifikation erforderlich, wie wenn ich die Push-Benachrichtigung bekomme, sollte die App im Hintergrund aktiv werden und die Aufgabe in gegeben, (wie Standort-Update-Code des Benutzers), - (void) Anwendung : (UIApplication *) Anwendung didReceiveRemoteNotification: (NSDictionary *) userInfo, aber meine App würde nicht aktiv werden oder angerufen werden, bis der Benutzer auf die Benachrichtigung tippt. Also, wie würde ich dies tun, während App im Hintergrund ist? jemand weiß die Lösung dafür? – Moxarth

1

Sie müssen Remote-Benachrichtigungen in den Hintergrund-Modus aktivieren.

so zu tun, automatisch: (Xcode5)

- Go to your Project settings -> Capabilities -> Background Modes 
- Tick "Remote Notifications" 

so zu tun, manuell:

- Open your %appname%-Info.plist 
- Right click and tick "Show Raw Keys/Values" 
- Right click and choose "Add Row" 
- Type in "UIBackgroundModes" (Key) 
- The key will be created, and the type is an Array 
- Add new item in the array with the value of "remote-notification" (Value) and press enter 
- Now you have 1 item in your array called: "Item 0", if you had any other items in there, just add this item (remote-notification) to the array. 

Seien Sie sicher, dass diese Methoden verwendet frankWhite verwenden :)

this helps ;)

+4

Ich habe ähnliches Problem. Dies hat das Problem nicht gelöst. – Nameet

+0

Aus der Dokumentation: "Apps, die den Benutzer mithilfe von Push-Benachrichtigungen darüber informieren, dass neuer Inhalt verfügbar ist, können den Inhalt im Hintergrund abrufen. Um diesen Modus zu unterstützen, fügen Sie den Schlüssel UIBackgroundModes mit dem Wert für die Remote-Benachrichtigung in die Info.plist-Datei Ihrer App ein. Sie müssen auch die Anwendung implementieren: didReceiveRemoteNotification: fetchCompletionHandler: Methode in Ihrem App-Delegaten. "Ich denke also, dass dies im Allgemeinen nicht relevant ist. – mxcl

2

Das Problem ist wahrscheinlich, dass application:didReceiveRemoteNotification: nicht aufgerufen wird, wenn t Die App läuft nicht. Zu zitieren Apple-Dokumentation:

Dieses Dokument veraltet ist

Wenn die App nicht läuft, wenn eine Push-Benachrichtigung eintrifft, startet das Verfahren die App und stellt die entsprechenden Informationen in den Startoptionen Wörterbuch. Die App ruft diese Methode nicht auf, um diese Push-Benachrichtigung zu verarbeiten. Stattdessen muss Ihre Implementierung der Anwendung: willFinishLaunchingWithOptions: oder application: didFinishLaunchingWithOptions: method die Push-Notification-Nutzdaten abrufen und entsprechend reagieren.

Dies ist das neue Dokument

Mit dieser Methode können eingehende Remote-Benachrichtigungen für Ihre Anwendung zu verarbeiten. Im Gegensatz zur Anwendung: didReceiveRemoteNotification: Methode, die nur aufgerufen wird, wenn Ihre App im Vordergrund ausgeführt wird, ruft das System diese Methode auf, wenn Ihre App im Vordergrund oder im Hintergrund ausgeführt wird. Wenn Sie den Hintergrundmodus für Remote-Benachrichtigungen aktiviert haben, startet das System Ihre App (oder weckt sie aus dem Status "Ausgesetzt") und versetzt sie in den Hintergrund, wenn eine Remote-Benachrichtigung eintrifft. Das System startet Ihre App jedoch nicht automatisch, wenn der Benutzer die Anwendung beendet hat. In diesem Fall muss der Nutzer Ihre App neu starten oder das Gerät neu starten, bevor das System versucht, Ihre App erneut automatisch zu starten.

+2

und in didFinishLaunchingWithOptions: Sie diesen Code für Nutzlast get Push verwenden können: NSDictionary* userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

+0

@proxi diese docs veraltet scheint – onmyway133

+0

Hallo, ich ein ähnliches Szenario, aber leicht erforderlich Modifikation, wie wenn ich die Push-Benachrichtigung zu erhalten, sollte die App erhalten aktiv im Hintergrund und die angegebene Aufgabe ausführen (wie der Standort-Update-Code des Benutzers), - (void) Anwendung: (UIApplication *) Anwendung didReceiveRemoteNotification: (NSDictionary *) userInfo, aber meine App wird erst aktiv, wenn der Benutzer auf die Benachrichtigung tippt . Also, wie würde ich dies tun, während App im Hintergrund ist? jemand weiß die Lösung dafür? – Moxarth

2

Wenn App läuft nicht, in didFinishLaunchingWithOptions:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{  
    NSDictionary* userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; 

NSString *myKey = [userInfo objectForKey:@"myKeyFromPayload"]; 
    } 

Denken Sie daran, die Erlaubnis zu setzen in plist

Für die Remote-Push Sie verwenden können: Sie diesen Code für Nutzlast get Push des verwenden können Ihre AppDelegate:

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