Ошибка при получении:
Ошибка при выполнении запроса: превышено время ожидания 10000 мс
для пользователей более 10000.
Трассировка стека:
Error: Error while making request: timeout of 10000ms exceeded.
at FirebaseAppError.FirebaseError [as constructor] (/srv/node_modules/firebase-admin/lib/utils/error.js:42:28)
at FirebaseAppError.PrefixedFirebaseError [as constructor] (/srv/node_modules/firebase-admin/lib/utils/error.js:88:28)
at new FirebaseAppError (/srv/node_modules/firebase-admin/lib/utils/error.js:122:28)
at /srv/node_modules/firebase-admin/lib/utils/api-request.js:123:23
at <anonymous>
at process._tickDomainCallback (internal/process/next_tick.js:229:7)
errorInfo:
{ code: 'app/network-timeout',
message: 'Error while making request: timeout of 10000ms exceeded.' },
codePrefix: 'app' }
Вот код для реализованных облачных функций:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp({
credential: admin.credential.applicationDefault(),
databaseURL: 'https://project-123.firebaseio.com/'
});
exports.sendPushNotificationToAllDevices = functions.https.onRequest((request, response) => {
const domain = request.body.Domain;
if (typeof domain == "undefined" || domain == null || domain == "") {
response.status(400).send("Domain is empty.");
return;
}
const url = domain + '/Users';
admin.database().ref(url).once('value')
.then(snapshot => {
let tokens = [];
let counter = 0;
const count = snapshot.numChildren();
snapshot.forEach(function (data) {
counter++;
const token = data.val().FirebaseToken;
if (typeof token !== "undefined" && token !== null && token != "") {
tokens.push(token);
}
if (counter == count && tokens.length > 0) {
const payload = getNotificationPayload(request);
console.log(tokens.length);
const tokensChunk = chunk(tokens,999);
tokensChunk.forEach(function(tokens){
sendPushNotificationTo(tokens, payload);
});
}
});
});
response.status(200).send("sending");
});
function getNotificationPayload(request) {
const notificationTitle = request.body.Title;
const notificationBody = request.body.Body;
return {
notification: {
title: notificationTitle,
body: notificationBody,
sound: 'default'
}
};
}
function sendPushNotificationTo(registrationToken, payload) {
admin.messaging().sendToDevice(registrationToken, payload)
.then(function (response) {
console.log("push notification message sent");
})
.catch(function (error) {
console.log("error in sending message");
console.log(error);
});
}
function chunk(array, size) {
if (!array) return [];
const firstChunk = array.slice(0, size);
if (!firstChunk.length) {
return array;
}
return [firstChunk].concat(chunk(array.slice(size, array.length), size));
}
// получаем эту ошибку для токенов> 10000
- Ошибка: ошибка при выполнении запроса: превышено время ожидания 10000 мс. в FirebaseAppError.FirebaseError [как конструктор] (/srv/node_modules/firebase-admin/lib/utils/error.js:42:28) в FirebaseAppError.PrefixedFirebaseError [как конструктор] (/ srv / node_mo_ lib / utils / error. js: 88: 28) в новом FirebaseAppError (/srv/node_modules/firebase-admin/lib/utils/error.js:122:28) в / srv / node_modules / firebase-admin /lib/utils/api-request.js:123:23 at at process._tickDomainCallback (internal / process / next_tick. js: 229: 7) errorInfo: {code: 'app / network-timeout', сообщение : «Ошибка при выполнении запроса: превышено время ожидания 10000 мс.» }, codePrefix: 'app'}