在Xamarin中多次接收Firebase FCM消息

时间:2018-11-25 14:05:19

标签: c# android firebase xamarin firebase-cloud-messaging

我正在尝试将Firebase FCM集成到我的应用程序中,但是我收到消息 多次。

我通过云功能发送消息,每次向数据库添加通知时都会触发该功能:

union

这很好用,我可以检索设备令牌,发送消息,然后在我的消息服务中通过我的应用接收它。

import { DataSnapshot } from "firebase-functions/lib/providers/database";
import { EventContext } from "firebase-functions";
import * as admin from 'firebase-admin'
import { ResolvePromise } from "./misc";

export function doSendNoticeFCM(snapshot: DataSnapshot, context?: EventContext) {
const uid = context.params.uid;
const noticeid = String(context.params.noticeid);

const notice = snapshot.val();

return admin.database().ref('device-tokens').child(uid).child('0')
    .on('value', (data) => {
        const token = data.val();

        if (token === null) {
            return ResolvePromise();
        }

        const title = String(notice['Title']);
        const body = String(notice['Body']);

        console.log("Title: " + title);
        console.log("Body: " + body);

        const payload: admin.messaging.Message = {
            data: {
                notice_id: noticeid,
                title: title,
                body: body
            },
            android: {
                ttl: 0
            },
            token: token
        };

        return admin.messaging().send(payload)
            .then((response) => {
                // Response is a message ID string.
                console.log('Successfully sent message:', response);
            })
            .catch((error) => {
                console.log('Error sending message:', error);
            });

    });
}

当我注销我的应用程序然后再次登录时,再次出现我收到的相同通知的问题。我在我的应用程序中使用带有Firebase的Google身份验证,并且注销后从数据库中删除了设备令牌,并在再次登录时添加了当前令牌。这可能是问题吗?

根据我在Firebase日志中看到的内容,对于每个消息,云功能仅执行一次,因此我猜测客户端出现了问题。我在另一篇stackoverflow帖子中读到,将ttl设置为0可以解决此问题,但不会影响我所看到的任何东西。

是否有人遇到这个问题或对我做错了什么有任何想法? 我正在使用Xamarin.Firebase。* nugets的最新“稳定”版本。

1 个答案:

答案 0 :(得分:0)

发现了我的问题。我应该在firebase函数中使用“ once”而不是“ on”,它解释了为什么在添加/删除设备令牌时触发了侦听器时多次发送该消息的原因