简体   繁体   中英

How do I connect my Flutter App to a notification sent by a firebase cloud function?

I'm trying to automatically send a notification to a Flutter App whenever a specific value in my firestore changes. The cloud function is triggered but my App simply doesn't receive the message. I managed to get a message using the messaging in the firebase console, so I recon the cloud function doesn't send the message properly? I should also mention that I don't receive any errors.

A quick rundown of what I'm doing:

  1. Added a cloud function to my firebase project that listens to firestore changes
  2. Subscribed to the notification topic in my Flutter App
  3. Listened to the onMessage Event in my App

This is my cloud function

import * as functions from "firebase-functions";
import admin = require("firebase-admin");

admin.initializeApp();

exports.sendPhValueNotification = functions.firestore.document("/phValues/values").onUpdate(async (_, 
context) => {
   const phValue = context.params.ph;

   if (phValue < 7.2 || phValue > 7.8) {

    // Notification details.
    const payload = {
        topic: "phValues",
        notification: {
            title: `PH-Wert ${phValue < 7.2 ? "unter" : "über"} dem Richtwert!`,
            body: `Der PH-Wert im Whirlpool beträgt ${phValue}`
        }
    };

    // Send notifications to everyone
    await admin.messaging().send(payload);
}
});

And this is my setup in my Flutter App

await FirebaseMessaging.instance.subscribeToTopic('phValues');

FirebaseMessaging.onMessage.listen((RemoteMessage message) {
  print('Got a message whilst in the foreground!');
  print('Message data: ${message.data}');

  if (message.notification != null) {
    print('Message also contained a notification: ${message.notification}');
  }
});

Turns out it was just a dumb mistake on my part. The way I'm reading the value from the firestore is wrong and since I'm testing the value in the if statement, I never actually sennt a message.

This works now:

functions.firestore.document("/phValues/values").onUpdate(async (change) => {
const phValue = change.after.ph; // This line

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM