Запись данных в Service Worker в Cloud Firestore - PullRequest
0 голосов
/ 05 августа 2020

Я работаю над проектом Firebase и хочу получать облачные сообщения Firebase (отправленные с сервера Node.js) в моем сервис-воркере в моем проекте javascript. Это работает нормально, но теперь я хочу сохранить некоторые данные в моем облачном хранилище firebase от моего сервис-воркера после получения уведомления. И есть проблема, у меня ошибка, указанная ниже:

 Uncaught ReferenceError: XMLHttpRequest is not defined at Ln.<anonymous> (xmlhttp.js:167) at Me (channelrequest.js:512) at Ce (webchannelbase.js:1249) at Kn.xa (webchannelbase.js:1251) at re (run.js:124)

Уже несколько дней я пытаюсь найти ошибку, но не могу найти решение до сих пор. Поэтому я надеюсь, что вы можете мне сейчас помочь. Я попытался сохранить данные в базе данных firebase в реальном времени, которая работает, но поскольку мне нужно иметь автономную постоянную работу, мне пришлось переключиться на облачный firestore, который запускается при указанной выше ошибке.

Вот код из мой node.js сервер для отправки уведомления (userID и registrationToken определены ранее):

payload = {
     data: {
     "title": "This is a Notification",
     "body": "This is the body of the notification message."
     },
};

options = {
     priority: "high",
     timeToLive: 7200
};

// send message to the registration token
admin.messaging().sendToDevice(registrationToken, payload, options).then(function(response) {
     admin.firestore().collection("Logging").doc(userID).set({active: "true"});
}).catch(function(error) {
     console.log("Error sending message:", error);
}); 

А вот код для получения уведомления в моем служебном файле firebase-messagins (userID определен ранее) :

self.addEventListener('notificationclick', function(event) {
  event.notification.close();
  const keepAlive = async() => {
      firebase.firestore().collection("Logging").doc(userID).update({"open": "true"}); 
  }
  event.waitUntil(keepAlive()); 
});

Кто-нибудь может мне помочь, пожалуйста? У меня больше нет идей для решения моей проблемы: /

1 Ответ

2 голосов
/ 05 августа 2020

Вы не можете использовать XMLHttpRequest внутри сервис-воркера. Вместо этого вам нужно использовать Fetch API .

Исходя из вашего кода, это клиентская библиотека Firebase, которая использует XMLHttpRequest под капотом. Я не думаю, что вы можете это контролировать (по крайней мере, не исходя из того, что я вижу в текущей документации JavaScript для Firebase).

Вместо использования клиентской библиотеки Firebase в вашем сервис-воркере, вы можете попробовать использовать REST API напрямую, используя fetch() для отправки ваших HTTP-запросов. Вы будете отвечать за такие вещи, как аутентификация и установка любых идентификаторов пользователей и т. Д. c. что клиентская библиотека в противном случае справилась бы за вас, но я думаю, что это ваш лучший выбор внутри сервис-воркера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...