Arthur Feldman
Arthur Feldman

Reputation: 107

Firebase Messaging - Can't receive notifications from subscriptions

Here is the situation: I have a firebase cloud function that is running on every write to a certain database collection (called "jamrooms"). The NodeJS script is as follows:

const functions = require('firebase-functions');

// The Firebase Admin SDK to access the Firebase Realtime Database.
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

exports.newJamroom = functions.database.ref('/jamrooms/{jamroomId}').onWrite(event => {

        // Grab the current value of what was written to the Realtime Database.
        var jamroomId = event.params.jamroomId;

        var topic = "new-jamroom";
        var payload = {
            data: {
                title: "New jamroom available !",
                body: String("Jamroom id = ").concat(jamroomId)
            }
        };

        // Send a message to devices subscribed to the provided topic.
        return admin.messaging().sendToTopic(topic, payload)
            .then(function (response) {
                // See the MessagingTopicResponse reference documentation for the
                // contents of response.
                console.log("Successfully sent message:", response);
            })
            .catch(function (error) {
                console.log("Error sending message:", error);
            });
});

On the client side (Android), I've subscribed to the topic "new-jamroom":

FirebaseMessaging.getInstance().subscribeToTopic("new-jamroom");

The script is successfully executed each time a new key-value pair is added to the collection:

enter image description here

but the client never receives the notification, either in background or in foreground.

I don't know where to look at to understand what's not going right.

Update

Even sending notifications from the console (using topic "new-jamroom", that exists in the console) doesn't send it to the client (Firebase records 0 sent).

Upvotes: 0

Views: 712

Answers (1)

Bob Snyder
Bob Snyder

Reputation: 38289

Because your payload contains the data key, you are sending a data-only message, not a notification:

    var payload = {
        data: {
            title: "New jamroom available !",
            body: String("Jamroom id = ").concat(jamroomId)
        }

Data messages and notification messages are handled differently by the receiver. Data-only messages cause onMessageReceived() to be invoked in the receiver. To generate a notification, build your payload with the notification key:

    var payload = {
        notification: {  // <= CHANGED
            title: "New jamroom available !",
            body: String("Jamroom id = ").concat(jamroomId)
        }

Upvotes: 1

Related Questions