Облачная функция Firebase для уведомлений pu sh, отправляющих все старые сообщения новому участнику группового чата - PullRequest
0 голосов
/ 29 апреля 2020

Я новичок в android разработчике, поэтому, пожалуйста, прости меня, если я допустил некоторые базовые c ошибки в своем коде. Я создаю приложение для размещения мероприятий, и приложение имеет функцию чата. Я получил базовый чат c, и теперь я хочу включить уведомления pu sh.

У меня не было опыта с машинописью (или javascript), так что это был настоящий вызов. Но я получил его, работая со следующей облачной функцией:

const functions = require('firebase-functions');
//import admin module
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);

exports.sendNotification = functions.database.ref('/messages/{post_id}/{message_id}').onCreate((snap: { val: () => any; }, context: any) => {

    const createdData = snap.val(); // data that was created
    const post_id = context.params.post_id; // ID of the post the message was sent in

    var ref = admin.database().ref('/participants/'+ post_id); //Get the Token from each participant of the chat
    ref.on("value", function(snapshot: any[]) {
      snapshot.forEach(function(childSnapshot) {
       var childData = childSnapshot.val();
       console.log(childData);
       const Token = childData.T; 

       console.log('The info is: ', createdData);
      console.log('The post Id is: ', post_id);
      console.log('The Token is: ', Token);

      const payload = {  // Push notification input
        notification: {
        title : createdData.n,
        body: createdData.message,
        tag: post_id
        }
    };

     admin.messaging().sendToDevice(Token, payload).then(function(response: { results: { error: any; }[]; }) { // sending the message
      console.log("Successfully sent message:", response);
      console.log(response.results[0].error);
  })
  .catch(function(error: any) {
      console.log("Error sending message:", error);
  })

      }); // end of the forEach loop
     });

    return
});

Этот код работает, но у него есть несколько проблем. Мои проблемы / вопросы заключаются в следующем:

1) Когда новый пользователь входит в групповой чат, он / она получает уведомления pu sh от всех сообщений, уже отправленных в группу до того, как пользователь присоединился. Это вероятно потому что код не заканчивается правильно. Я попробовал некоторые вещи, но код остановился, когда я изменил возврат. Предполагается, что старые сообщения все еще могут быть прочитаны новыми пользователями, но я не хочу, чтобы они объединялись, когда присоединяется новый пользователь ..

2) Интересно, является ли это масштабируемой функцией. Теперь он работает нормально, но я пропускаю отдельные сообщения в forEach l oop. Кто-нибудь знает, как такая функция будет работать с 1000 пользователей? За каждое отправляемое сообщение я получаю следующее предупреждение в своем журнале облачных функций: «Функция вернула неопределенное, ожидаемое обещание или значение». На данный момент это не проблема, но намекает на то, что мой код может быть неоптимальным (может быть, связан с моей проблемой в пункте 1?).

Заранее спасибо!

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