В консоли Firebase, в представлении Cloud Messaging, пользователи могут создавать тестовые уведомления. Эта функция также позволяет планировать время отправки уведомления на устройство или набор устройств.
Можно ли создавать и отправлять запланированные уведомления FCM для указания c устройства с использованием облачных функций Firebase и Firebase Admin SDK? Есть ли альтернативный способ решения этой проблемы?
Текущий способ отправки запланированных сообщений пользователям выглядит примерно так:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
const schedule = require('node-schedule');
admin.initializeApp();
exports.setScheduledNotification = functions.https.onRequest(async (req, res) => {
const key = req.query.notification_key;
const message = {
notification: {
title: 'Test Notification',
body: 'Test Notification body.'
}
};
var currentDate = new Date();
var laterDate = new Date(currentDate.getTime() + (1 * 60000));
var job = schedule.scheduleJob(key, laterDate, () => {
const snapshot = admin.messaging().sendToDevice(key, message);
});
return res.status(200).send(`Message has been scheduled.`);
});
Прежде всего, я не уверен, как взаимодействует node-schedule
с огненной базой облачных функций. Появляются логи, что функция завершается очень быстро, что, я думаю, будет правильным. Чем дольше длится операция, тем дороже она оплачивается в наших счетах. Уведомление все еще работает в запланированное время, хотя. Я не понимаю, как все это работает за кулисами.
Во-вторых, у меня возникают проблемы с отменой этих запланированных уведомлений. Скорее всего, уведомления будут поступать по 2-часовому расписанию с момента его создания. До истечения 2 часов я хотел бы иметь возможность отменить / перезаписать уведомление с обновленным запланированным временем.
Я попытался отменить это уведомление, но мне не удалось найти ранее созданное уведомление. Вот код для этого:
exports.cancelScheduledNotification = functions.https.onRequest(async (req, res) => {
const key = req.query.notification_key;
var job = schedule.scheduledJobs[key];
job.cancel();
return res.status(200).send(`Message has been canceled.`);
});
Возможно ли задействовать функции планирования облачных сообщений Firebase за пределами консоли Firebase? Или я застрял в этом вопросе?