Многократный прием факсимильных сообщений в Xamarin - PullRequest
0 голосов
/ 25 ноября 2018

Я пытаюсь интегрировать Firebase FCM в свое приложение, но я получаю сообщения несколько раз.

Я отправляю сообщения через облачную функцию, которая срабатывает при добавлении уведомления в базу данных, например:

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);
            });

    });
}

Это нормально работает. Я получаю токен устройства, отправляю сообщение и получаю его в своем приложении в службе сообщений.

using System;
using Android.App;
using Android.Support.V4.App;
using Firebase.Messaging;
using Android.Util;
using Doshi.Xamarin.Abstractions.StaticData;
using Android.Content;
using System.Collections.Generic;
using System.Text;
using Newtonsoft.Json;
using Android;
using Xamarin.Forms;
using Plugin.CurrentActivity;
using Acr.UserDialogs;
using Doshi.Xamarin.Core.Helpers;
using Doshi.Xamarin.Abstractions.Misc;
using Doshi.Xamarin.Android.Logic.Interfaces;
using Doshi.Xamarin.Android.Logic.Implementations;

namespace Doshi.Droid
{
    [Service(Name = "com.doshi.droid.DoshiMessagingService")]
    [IntentFilter(new[] {"com.google.firebase.MESSAGING_EVENT"})]
    public class DoshiMessagingService : FirebaseMessagingService
    {
        INoticePresenter _noticePresenter = new DoshiNoticePresenter();

        public override void OnMessageReceived(RemoteMessage message)
        {
            HandleNotice(message);
        }

        private void HandleNotice(RemoteMessage message)
        {
            int id = DateTime.Now.Millisecond;
            //Create the hardware notice.
            _noticePresenter.PresentNotice(this, message, id, Xamarin.Droid.Resource.Drawable.ic_logo, typeof(MainActivity));
        }
    }

Проблема возникает, когда я выхожу из системы.мое приложение и затем войдите снова те же уведомления, которые я получил ранее, получены снова.Я использую аутентификацию google с firebase в своем приложении и удаляю токен устройства из базы данных при выходе из системы и добавляю текущий токен при повторном входе в систему.Может ли это быть проблемой?

Из того, что я вижу в журналах Firebase, функция облака выполняется только один раз для каждого сообщения, поэтому я предполагаю, что что-то не так на стороне клиента.Я читал в другом посте stackoverflow, что установка ttl в 0 решит эту проблему, но это никак не повлияет на то, что я вижу.

Кто-нибудь еще сталкивался с этой проблемой или имеет представление о том, что я делаю неправильно?Я использую последнюю "стабильную" версию Xamarin.Firebase. * Nugets.

1 Ответ

0 голосов
/ 25 ноября 2018

Нашел мою проблему.Я должен использовать «один раз» вместо «вкл» в моей функции firebase, которая объясняет, почему он был отправлен несколько раз, так как мой слушатель был запущен, когда я добавил / удалил токены устройства

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...