2016-12-12 2 views
1

Wie wird eine Firebase-Push-Benachrichtigung mit Datennutzdaten aktualisiert, wenn sich die App im Hintergrund befindet? Gibt es eine Möglichkeit, die Benachrichtigungs-ID in der Benachrichtigung für die Firebase-API anzugeben?Aktualisieren der Firebase-Push-Benachrichtigung, wenn sich die App im Hintergrund befindet

Meine Anfrage JSON zum firebase api.

{ 
"registration_ids": ["device id"], 
"collapse_key": "Updates Available" 
"notification": { 
        "title": "title", 
        "desc": "description", 
        "body": "Message received", 
        "sound": "TYPE_NOTIFICATION", 
        "click_action": "sometargetAction" 
       }, 
"data":   { 
        "user": 
        { 
         "id": 2 
         "name":"leapingwolf", 
         "occupation": "passionate coder" 
        } 
       } 
} 

Ich benutze die ID des "user" zu einer gelieferten Push-Benachrichtigung anhängen, wenn die App im Vordergrund in der onMessageReceived Funktion ist wie so

 User user = remoteMessage.getData().get("user"); 
     Gson gson = new GsonBuilder().create(); 
     User userModel = gson.fromJson(user, User.class); 
     Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); 
     NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) 
       .setContentTitle("FCM Message With Payload") 
       .setContentText(messageBody) 
       .setSmallIcon(R.mipmap.ic_launcher) 
       .setAutoCancel(true) 
       .setSound(defaultSoundUri) 
       .setContentIntent(pendingIntent); 

     NotificationManager notificationManager = 
       (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

     notificationManager.notify(userModel.getId(), notificationBuilder.build()); 

Das vollständige Projekt in Github ist https://github.com/akshatashan/FirebaseCloudMessagingDemo

+0

Wenn Sie App sagen, ist es eine Android App? –

+0

Ja, eine Android-App – Akshata

Antwort

1

denke ich, was Sie suchen Collapsible Messages ist:

A reduzierbare Nachricht ist eine Nachricht, die möglicherweise durch eine neue Nachricht ersetzt wird, die den gleichen Minimierungsschlüssel enthält, wenn sie noch nicht an das Gerät übermittelt wurde.

sowohl für message types (Benachrichtigung und Daten), es scheint, dass sie eingestellt werden können, sowohl als zusammenklappbar, in Ihrem Fall, Sie für die Datennutzlast fragen:

Daten Nachricht

  • Client-App ist verantwortlich für die Verarbeitung von Datennachrichten. Datennachrichten haben nur benutzerdefinierte Schlüssel/Wert-Paare.
  • Verwenden Sie den Anwendungsserver und die FCM-Server-API: Legen Sie nur den Datenschlüssel fest. Kann zusammenklappbar oder nicht kollabierbar sein.

Also um es einfach auszudrücken, man muss nur entsprechend Nutzung des collapse_key machen:

Dieser Parameter eine Gruppe von Nachrichten identifiziert (zB mit collapse_key: "Updates verfügbar"), die zusammengelegt werden können, so dass nur die letzte Nachricht gesendet wird, wenn die Zustellung wieder aufgenommen werden kann. Dies soll verhindern, dass zu viele gleiche Nachrichten gesendet werden, wenn das Gerät wieder online ist oder aktiv wird.

Beachten Sie, dass es keine Garantie für die Reihenfolge gibt, in der Nachrichten gesendet werden.

Hinweis: Es sind maximal 4 verschiedene Kollapsschlüssel zu jeder Zeit zulässig. Dies bedeutet, dass ein FCM-Verbindungsserver gleichzeitig 4 verschiedene Sende-to-Sync-Nachrichten pro Client-App speichern kann. Wenn Sie diese Zahl überschreiten, gibt es keine Garantie, welche 4 Minimierungsschlüssel der FCM-Verbindungsserver behalten wird.

+0

Collapse-Taste ist nützlich, wenn die Nachricht noch nicht an das Gerät geliefert wird. Ex. Wenn mehrere Nachrichten gesendet werden, während das Gerät offline ist, wird nur eine gesendet, wenn das Gerät online ist und ein collapse_key angegeben wurde. Meine Anforderung besteht darin, eine bereits gelieferte Nachricht zu aktualisieren oder zu ersetzen, wenn sich die App im Hintergrund befindet. Wenn App im Vordergrund ist, erreiche ich es, indem ich die selbe notifyId für den notificationManager in der onMessageReceived Funktion festlege. – Akshata

+0

@Akshata Sieht so aus als würdest du es ziemlich gut verstehen. Bei Ihrem Anwendungsfall dachte ich auch darüber nach, "delay_while_idle" zu verwenden, aber diese wurden als veraltet eingestuft. Wie auch immer, wenn deine App im Hintergrund ist, speicherst du sie irgendwie vorübergehend, bis die App in den Vordergrund geht? Können Sie den Code zeigen und mehr über Ihren Prozessablauf erfahren? –

+0

Ich habe der Frage mit einigen Codeschnipsel mehr Details hinzugefügt. Gibt es einen Schlüssel, den ich mit der Anfrage senden kann, um eine übermittelte Nachricht zu aktualisieren, anstatt eine neue zu erstellen, wenn die App in bg ist? – Akshata

3

dachte ich die Lösung basierend auf den gebuchten Antworten in den Link How to handle notification when app in background in Firebase

Um es zusammenzufassen, wenn die Anforderung json nicht die Benachrichtigung Tag hat, dann onMessageReceived, ob oder nicht, unabhängig von der Anwendung aufgerufen wird ist im Hintergrund.Senden Sie alle relevanten Felder im Daten-Tag und parsen Sie sie in onMessageReceived.

Verwandte Themen