Firebase FCM отправляет уведомления только тем пользователям, которые имеют переменную в своем пользовательском объекте - PullRequest
0 голосов
/ 22 января 2019

У меня есть 5000 пользователей, зарегистрированных для приложения.

Что я хотел бы сделать, так это использовать функции Firebase при создании нового сообщения администратора, просто получить все объекты пользователя и проверить, есть ли у них переменные, а затем отправить уведомление всем 5000 пользователям, кроме этих.которые отказались.

Я также предпочел бы не использовать firebase topics ..

Код моей функции:

exports.qotd = functions.database
  .ref('users/XxN0gROzNCdIH3cCt16S5d7UT632/send_notification/{notificationId}')
  .onCreate(async (snapshot, context) => {

    const data = snapshot.val();
    const uid = context.auth.uid;
    let recipients = 0;
    let parent;
    console.log(uid)
    if (uid === "XxN0gROzNCdIH3cCt16S5d7UT632") {
      await adb.ref('users/').once('value').then(allUsers => {
        parent = allUsers.val();
        // console.log(allUsers.numChildren())
        return true;
      }).catch(error => console.log(error))

      // Notification content
      const payload = {
        notification: {
          title: 'QOTD',
          body: data.message
        }
      }

      const tokens = [];
      const db = admin.firestore()
      for (const key in parent) {
        if (parent[key].unsub_qotd !== true) {

          // const devicesRef = db.collection('devices').where('userId', '==', key)
          //
          // const devices = await devicesRef.get();
          // devices.forEach(result => {
          //   const token = result.data().token;
          //
          //   tokens.push(token)
          // })
          recipients++;
        }
      }
      console.log(recipients);
      await snapshot.ref.update({ 'recipients': recipients }).then(() => {
        console.log("Number of recipients: " + recipients)
      }).catch(error => console.log(error))
      await snapshot.ref.update({ 'sent': true }).then(() => {
        //do nothing
      }).catch(error => console.log(error))
      return true;
      // return admin.messaging().sendToDevice(tokens, payload)
    } else {
      return false;
    }
  });

Часть кодазакомментировал, когда я тестировал, но когда я выполняю этот код, я получаю ошибку:

Выполнение функции заняло 20150 мс, завершается со статусом: «ошибка соединения»

Я предполагаю, что это потому, что объект users слишком велик.Но мне действительно нужно знать, существует ли unsub_qotd на этом объекте пользователя ...

Есть идеи?Спасибо!

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