我正在开发 Firebase Cloud Function,以发送触发的推送通知。现在,只要用户在我的应用程序中触发“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);
});
}
此功能有效,发送和接收推送。
我阅读了一些有关 Firebase Cloud Functions 调度的新闻:
- https://medium.com/@pascalluther/scheduling-firebase-cloud-functions-with-cloud-scheduler-b5ec22ace683
- https://firebase.googleblog.com/2019/04/schedule-cloud-functions-firebase-cron.html
我理解,它仅适用于 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);
});
}