0

Ich verwende eine phonegap-plugin-push für den Empfang von Benachrichtigungen in Cordova Application. Ich bin im Einsatz auf Android Marsh-Mellow zum Testen.Hintergrund Firebase Push Benachrichtigungen in Cordova

Ich möchte den Inhalt der Benachrichtigungen sehen und speichern, die über Firebase Console empfangen werden, wenn die App im Hintergrund ist.

Hier ist mein Code -

document.addEventListener("deviceready",onDeviceReady,false); 
    function onDeviceReady(){ 

     var push = PushNotification.init({ "android": {"senderID": "91254247XXXX"}}); 

     push.on('registration', function(data) { 
      console.log(data.registrationId); 
      //document.getElementById("gcm_id").innerHTML = data.registrationId; 
     }); 

     push.on('notification', function(data) { 

      alert("On Notification function!!"); 
      // data.message, 
      // data.title, 
      // data.count, 
      // data.sound, 
      // data.image, 
      // data.additionalData 
      console.log("notification event"); 
      console.log(JSON.stringify(data)); 
      alert(JSON.stringify(data)); 
      //Do something 
     }); 

     push.on('error', function(e) { 
      alert(e); 
     }); 
    } 

Wenn die App in Vordergrund (auf dem Bildschirm), die ich erhalte, den Inhalt (Titel, Nachricht, Daten, etc.) richtig und ich bin in der Lage, sie zu sehen in der Alarmbox direkt in der App.

Aber wenn App ist in Hintergrund (nicht auf dem Bildschirm, aber im Hintergrund läuft), bekomme ich die Benachrichtigung im Infobereich. Wenn ich auf die Benachrichtigung klicke, wird die zuletzt geöffnete Seite in der App umgeleitet.

Die Funktion push.on('notification', function(data) {} wird nicht aufgerufen. Es werden keine Warnmeldungen angezeigt. Kann mir jemand helfen, auf die Benachrichtigung und die Daten zuzugreifen?

Antwort

0

Ich fand die Antwort nach 2 Tagen der Forschung. Wir müssen "content-available" im Datenfeld auf 1 setzen. Andernfalls wird der Benachrichtigungsblock nicht aufgerufen, wenn sich die App im Hintergrund befindet.

Und das ist ab sofort nicht möglich durch Google Firebase Console.

Wir müssen send our custom payload messages (Daten oder Benachrichtigung oder beides) separat mit einem der firebase servers.

Detaillierte Informationen finden Sie unter plugin's GitHub Page im Hintergrund Benachrichtigungen.

Ich verwendete NodeJs firebase-admin. Ich folgte diesen setup guidelines und diese steps for sending messages und es funktionierte für mich.

Hier ist meine Arbeitscode (NodeJS) -

var admin = require("firebase-admin"); 

var serviceAccount = require("pushnotificationapp-xxxxx.json"); //this is the service account details generated from server 

admin.initializeApp({ 
    credential: admin.credential.cert(serviceAccount), 
    databaseURL: "https://pushnotificationappxxxxx.firebaseio.com/" //your database URL here. 
}); 

var registrationToken = "eYjYT0_r8Hg:APA91bG0BqWbT7XXXXX....."; //registration token of the device 
var payload ={ 
    "data": { 
     "title": 'Test Push', 
     "message": 'Push number 1', 
     "info": 'super secret info', 
     "content-available": '1' //FOR CALLING ON NOTIFACATION FUNCTION EVEN IF THE APP IS IN BACKGROUND 
    } 
}; 

//send the notification or message 
admin.messaging().sendToDevice(registrationToken, payload) 
.then(function(response) { 
    console.log("Successfully sent message:", response); 
}) 
.catch(function(error) { 
    console.log("Error sending message:", error); 
}); 

UPDATE:

implementiert ich das gleiche auch mit PHP-Server. Hier ist mein Arbeits PHP-Code für

<?php 

$url = 'https://fcm.googleapis.com/fcm/send'; 

$data = 
    array(
      "to" => "eYjYT0_r8Hg:APA91bG0BqWbT7XXXXX.....", 
      "data" => array(
       "title"=> 'Test Push', 
       "message"=> 'Push number 1', 
       "info"=> 'super secret info', 
       "content-available"=> '1') 

    ); 

// use key 'http' even if you send the request to https://... 
$options = array(
    'http' => array(
     'header' => array("Content-Type:application/json", 
     "Authorization:key=AAAA1HfFM64:APA91XXXX...."), //this is the server authorization key from project settings tab in your Firebase Project 
     'method' => 'POST', 
     'content' => json_encode($data) 
    ) 
); 

$context = stream_context_create($options); 
$result = file_get_contents($url, false, $context); 

if ($result === FALSE) { echo "Caught an error"; } 
else{ 
    echo $result; 
} 
?> 
0

server- Benachrichtigungen mit HTTP POST zu FCM Senden i durch das gleiche Problem gehe, aber ich fügte hinzu: „Content-verfügbar“: ‚1‘ auch, aber mein Handy empfängt nicht Hintergrund drücken.

Schließlich fand ich, dass es Problem mit meinem Handy wie hier erwähnt: https://github.com/phonegap/phonegap-plugin-push/blob/master/docs/PAYLOAD.md#huawei-and-xiaomi-phones

Huawei und Xiaomi Telefone

Diese Telefone haben eine besondere Marotte, dass, wenn die App Kraft ist geschlossen, dass Sie nicht mehr sein wird Kann Benachrichtigungen erhalten, bis die App neu gestartet wird.Damit Sie Hintergrundbenachrichtigungen erhalten:

Gehen Sie auf Ihrem Huawei Gerät zu Einstellungen> Geschützte Apps> überprüfen Sie "Meine App" wo. Stellen Sie auf Ihrem Xiaomi sicher, dass auf Ihrem Telefon die Eigenschaft "Auto-Start" für Ihre App aktiviert ist. Stellen Sie auf Ihrem Asus sicher, dass auf Ihrem Telefon die Eigenschaft "Auto-Start" für Ihre App aktiviert ist.

Ich hoffe, es wird jemandem helfen.

Verwandte Themen