Я работаю над облачной функцией Firebase, чтобы отправлять инициированные push-уведомления.Прямо сейчас моя функция отправляет push, как только пользователь запускает событие «IAP» в моем приложении.
'use strict';
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
exports.sendIAPAnalytics = functions.analytics.event('IAP').onLog((event) => {
const user = event.user;
const uid = user.userId; // The user ID set via the setUserId API.
sendPushToUser();
return true;
});
function sendPushToUser(uid) {
// Fetching all the user's device tokens.
var ref = admin.database().ref(`/users/${uid}/tokens`);
return ref.once("value", function(snapshot){
const payload = {
notification: {
title: 'Hello',
body: 'Open the push'
}
};
console.log("sendPushToUser ready");
admin.messaging().sendToDevice(snapshot.val(), payload)
}, function (errorObject) {
console.log("The read failed: " + errorObject.code);
});
}
Эта функция работает, push отправляются и принимаются.
Я прочитал некоторыеновости о планировании для Firebase Cloud Функции:
Я понял, это только для триггеров HTTP или PUB / SUBтриггеры.Поэтому сейчас всегда невозможно запускать функции с задержками, записывая их в базу данных в реальном времени или когда запускаются аналитические события.
Я прав?или есть хитрость?
Я ничего не читал об этом.
РЕДАКТИРОВАТЬ: Официальная документация https://firebase.google.com/docs/functions/schedule-functions
Мой синтаксис неправильный, но мне нужно что-то вроде этого:
function sendPushToUser(uid) {
var ref = admin.database().ref(`/users/${uid}/tokens`);
return ref.once("value", function(snapshot){
const payload = {
notification: {
title: 'Hello',
body: 'Open the push'
}
};
functions.pubsub.schedule('at now + 10 mins').onRun((context) => {
admin.messaging().sendToDevice(snapshot.val(), payload)
})
}, function (errorObject) {
console.log("The read failed: " + errorObject.code);
});
}