Я пытаюсь внедрить систему заказов Android и использую базу данных реального времени. Для отправки уведомлений я использую функции Firebase в JavaScript.
Каждый пользователь хранится в базе данных вместе со своим идентификатором, токеном для отправки уведомления, среди других данных. Я пытаюсь определить, когда пользователь получает заказ, и отправить ему уведомление .
Проблема появляется здесь. В некоторых случаях уведомление отправляется, а в других оно не . Просматривая логи моей функции sendNotif, я вижу, что ошибка такая:
TypeError: Cannot read property 'idcomprador' of null
at exports.sendNotif.functions.database.ref.onWrite (/user_code/index.js:133:32)
at Object.<anonymous> (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:112:27)
at next (native)
at /user_code/node_modules/firebase-functions/lib/cloud-functions.js:28:71
at __awaiter (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:24:12)
at cloudFunction (/user_code/node_modules/firebase-functions/lib/cloud-functions.js:82:36)
at /var/tmp/worker/worker.js:827:24
at process._tickDomainCallback (internal/process/next_tick.js:135:7)
Мой код:
exports.sendNotif = functions.database.ref('/Usuarios/{vendedorId}/Solicitudes/Venta/{pushId}').onWrite((change, context) => {
// Grab the current value of what was written to the Realtime Database.
const solicitud = change.after.val();
const compradorId = solicitud.idcomprador
const pedidoId = solicitud.idpedido
const vendedorId = solicitud.idvendedor
var solicitudTokens = [vendedorId];
// Notification details.
const payload = {
notification: {
title: `Order`,
body: `order`,
icon: 'photoURL',
tag: 'solicitudventa',
sound: 'default',
clickAction: 'ACTIVITY_ORDER',
badge: '2'
},
data: {
extra: 'extra_data',
},
};
const options = {
collapseKey: 'demo',
contentAvailable: true,
priority: 'high',
timeToLive: 60 * 60 * 24,
};
var ref = admin.database().ref(`Usuarios/${vendedorId}/token/result/token`);
return ref.once("value", function(snapshot){
admin.messaging().sendToDevice(snapshot.val(), payload)
},
function (errorObject) {
console.log("The read failed: " + errorObject.code);
});
});
Строка 133 выглядит следующим образом: const compradorId = solicitud.idcomprador .
Я не могу понять, почему это иногда работает, а иногда нет.