2017-08-18 2 views
0

Meine Push-Benachrichtigungen enthalten benutzerdefinierte Daten, mit denen die App beim Klicken auf die Benachrichtigung an den richtigen Ort geleitet wird. Diese funktionieren einwandfrei, wenn die App geöffnet ist oder im Hintergrund, funktionieren aber nicht, wenn die App geschlossen wird. Die Benachrichtigung öffnet die App, aber mein Code erkennt das referenzierte Benachrichtigungsereignis nicht, sodass ich es weiterleiten kann. Ich habe dies in AppDelegate.mErkennen eines Push-Benachrichtigungsereignisses in der cordova App nach dem Kaltstart (von der Benachrichtigung aus klicken)

#ifndef DISABLE_PUSH_NOTIFICATIONS 

    - (void)         application:(UIApplication*)application 
     didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken 
    { 
     // re-post (broadcast) 
     NSString* token = [[[[deviceToken description] 
      stringByReplacingOccurrencesOfString:@"<" withString:@""] 
      stringByReplacingOccurrencesOfString:@">" withString:@""] 
      stringByReplacingOccurrencesOfString:@" " withString:@""]; 

     [[NSNotificationCenter defaultCenter] postNotificationName:CDVRemoteNotification object:token]; 
    } 

    - (void)         application:(UIApplication*)application 
     didFailToRegisterForRemoteNotificationsWithError:(NSError*)error 
    { 
     // re-post (broadcast) 
     [[NSNotificationCenter defaultCenter] postNotificationName:CDVRemoteNotificationError object:error]; 
    } 
#endif 

Ich habe JS diesen Code in Ort, um die Benachrichtigung in meiner app zu fangen

document.addEventListener('push-notification', function(event) { 
          //get the notification payload 

          console.log("incoming PUSH notification!") 
          console.log(event); 
          factory.reactToIncomingPushNotification(event) 


         }); 

Meine Frage ist, wie verweise ich das Benachrichtigungsereignis in der App einmal die App hat kalt angefangen?

Ich habe eine cordova/ionic App mit Pushwoosh als Anbieter. Ich teste auf IOS.

Antwort

0

Wenn App beendet wird, und Benutzer benutzerdefinierte Daten vom Fass mitteilungs wollen, dann didFinishLaunchingWithOptions von AppDelegate ist Ihre Methode, da sie die Daten im Schlüssel UIApplicationLaunchOptionsRemoteNotificationKey

+0

Danke. Ich sehe diese Funktion (und postete sie in meiner Frage). Ich glaube jedoch, dass diese Funktionalität (Fähigkeit, Benachrichtigungsdaten in die App zu senden, wenn sie geöffnet wird) in den Plug-in-Plugin-Code eingebettet wird. Ich versuche, die Benachrichtigung durch die pushwhoosh delegate.m-Datei zu folgen, aber bin verloren. Kann nicht herausfinden, warum der JS-Listener nicht ausgelöst wird. –

0

Die Antwort für mich angerufen enthalten war ein setzen Timeout beim Pushwoo-Broadcast-Ereignis. Es schickte die Sendung, bevor ich meinen Zuhörer eingerichtet hatte. Dies ist nur bei Kaltstart-Apps passiert. Momentan erkenne ich, ob die 'onStart'-Taste der Push-Benachrichtigung auf' true 'gesetzt ist. Wenn ja, habe ich ein Timeout von 1,3 Sekunden auf die Funktion dispatchEvent gesetzt. Hier ist die geänderte Funktion für die PushNotification.js-Datei.

// file: plugins/pushwoosh-cordova-plugin/www/PushNotification.js 
PushNotification.prototype.notificationCallback = function(notification) { 
    var ev = document.createEvent('HTMLEvents'); 
    ev.notification = notification; 
    // test for the cold start 
    var tout = notification.onStart ? 1300 : 10 ; 
    setTimeout(function() { 
     ev.initEvent('push-notification', true, true, arguments); 
     document.dispatchEvent(ev); 
    }, tout); 
}; 
0

Ich hatte ein ähnliches Problem, also habe ich versucht, den Event-Listener so früh wie möglich in das Javascript einzufügen. Dann konnte ich die Push-Benachrichtigung von Pushwoosh erhalten. Dies bedeutet, dass das DOM-Ereignis ausgelöst wurde, bevor der "Push-Notification" -Listener im JS Ihrer App eingerichtet wurde.

Die Verwendung von setTimeout scheint das Problem zu verschleiern, indem das DOM-Ereignis verzögert wird und der Listener bereit sein kann.

Ich schlage vor, den Hörer so früh wie möglich zu bewegen.

document.addEventListener('push-notification', function(event) { 
    ... 
}) 

Dies ist jedoch möglicherweise keine Idee, da die App möglicherweise nicht bereit ist, das Ereignis aus der Push-Benachrichtigung zu verwenden. Meine Lösung bestand darin, das Ereignis zwischenzuspeichern und danach zu überprüfen, nachdem meine App vollständig hochgefahren war.

Hoffe, das hilft!

Verwandte Themen