2015-05-18 7 views
7

Nel mio progetto attuale ho una notifica push. Quando si tocca l'icona dell'applicazione voglio ottenere la notifica ricevuta dal lancio opzioni oggetto, ma restituisce sempre nil:non UIApplicationLaunchOptionsRemoteNotificationKey ottenere userinfo

NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey]; 
+0

u può mostrare tutto il codice o in quale metodo ti sei trovato a userinfo? – Vizllx

+0

in "- (BOOL) applicazione: (UIApplication *) didFinishLaunchingWithOptions di applicazione: (NSDictionary *) launchOptions {}" e "- (BOOL) Applicazione: (UIApplication *) willFinishLaunchingWithOptions di applicazione: (NSDictionary *) launchOptions" –

risposta

7

Non si può rilevare che il caso, perché l'applicazione non è aperta con notifica push (è è stato aperto tramite l'icona dell'app).
Provare ad aprire l'applicazione facendo scorrere la notifica push.

EDIT:

Se si desidera ad essere invocate per notifica push (via sfondo prendere, quando l'applicazione non è attiva) è necessario chiedere il vostro sviluppatore di back-end per impostare "content-available": 1 nella notifica push.

Dopo che -application:didReceiveRemoteNotification:fetchCompletionHandler: verrà richiamato (quando la notifica push-arriva), in modo da poter salvare il payload in un file e poi quando l'applicazione sarà aperto, è possibile leggere il file e prendere azioni.

- (void)application:(UIApplication *)application 
didReceiveRemoteNotification:(NSDictionary *)userInfo 
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler 
{ 
    NSLog(@"#BACKGROUND FETCH CALLED: %@", userInfo); 
    // When we get a push, just writing it to file 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"userInfo.plist"]; 

    [userInfo writeToFile:filePath atomically:YES]; 
    completionHandler(UIBackgroundFetchResultNewData); 
} 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    // Checking if application was launched by tapping icon, or push notification 
    if (!launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]) { 
     NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
     NSString *documentsDirectory = [paths objectAtIndex:0]; 
     NSString *filePath = [documentsDirectory stringByAppendingPathComponent:@"userInfo.plist"]; 

     [[NSFileManager defaultManager] removeItemAtPath:filePath 
                error:nil]; 
     NSDictionary *info = [NSDictionary dictionaryWithContentsOfFile:filePath]; 
     if (info) { 
      // Launched by tapping icon 
      // ... your handling here 
     } 
    } else { 
     NSDictionary *info = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]; 
     // Launched with swiping 
     // ... your handling here 
    } 
    return YES; 
} 

Inoltre, non dimenticare di abilitare le notifiche "remote" in "Modalità di sfondo" enter image description here

+0

applicazione aperta da strisciata notifica push funziona, ma voglio anche stessa cosa su app icona tocca –

+0

@JaydeepChauhan, vedere la mia modifica. – l0gg3r

+0

@ l0gg3r dopo abilitata la modalità di sfondo notifiche a distanza di fronte lo stesso problema in un dispositivo iOS 8 anche .. –

6

Quando si avvia l'applicazione da un AZIONE PUSH NOTIFICA, [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey] lo restituisca il payload notifica push (in formato dizionario). Quando dico azione di notifica push, significa toccare la notifica push dal centro di azione o dalla finestra di dialogo di avviso di notifica push (A seconda delle impostazioni del dispositivo, il meccanismo di invio delle notifiche push varia).

Se si avvia l'applicazione toccando l'icona dell'applicazione, [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey] restituisce sempre zero. Perché, non è stato lanciato da nessun tipo di notifica push.

Problemi correlati