Как настроить уведомления FCM Push для приложения группового чата - PullRequest
0 голосов
/ 09 ноября 2018

Я пытаюсь реализовать push-уведомления для приложения группового чата, структура базы данных которого вставлена ​​ниже. Мне было интересно, как использовать узел dialog_users для отправки push-уведомлений только в том случае, если пользователь участвует в этом разговоре, а также как отправлять push-уведомления на несколько устройств, поскольку код, который у меня есть сейчас, только отправляет его на мое устройство, используя специальный fcmToken. Должен ли я подписывать пользователей на темы, причем эти темы являются отдельными идентификаторами? Это мой первый раз, когда я использую FCM, поэтому любые рекомендации будут с благодарностью.

Структура базы данных:

  conversation_messages {
    conversationId: {
      message1: {
        text: "Hello"
        timestamp: 1095819823.123
        senderId: aSLKN12KLSDNFK
      }
    }
  }, 
  conversation_users {
    conversationId: {
      userUID:1
      userUID2:1
    }
  },
  users {
    userUID: {
      fcmToken: "fcmToken"
      bio: "bio"
      username: "username"
    }
  }

Код Index.js: прямо сейчас этот код отправляет push-уведомления на мое устройство для любых сообщений, отправляемых в приложении. Я хочу ограничить уведомления только теми разговорами, к которым присоединился пользователь, и запретить push-уведомления для отправленных мной сообщений.

exports.observeMessages = functions.database.ref('/conversation_messages/{convoId}/{messageId}')
  .onCreate((snapshot, context) => {

    var convoId = context.params.convoId;
    var messageId = context.params.messageId;
    var message = snapshot.val();

    return admin.database().ref('/conversations/' + convoId).once('value', snapshot => {

      var conversation = snapshot.val();  // This gives us the conversation name

        return admin.database().ref('/users/' + message.senderId).once('value', snapshot => {

          var user = snapshot.val();

          var notification = {
            notification: {
              title: conversation.conversationName,
              body: user.username + ": " + message.text
            },
            token: 'dFlruzs91OM:APA91bHVx-Ga11GZ4fEwGAkrvFIegXPgPkvFrNuYa0U6yL_bdC7urM721SQGdnylpBNYPYMWAFpLbDk7pahe1RUMlQ8rN7iK7EAU89Xg6xpbIcBi6ZbTM7TB8N5zxPwhq0MTdIxIRH61'
          }

          admin.messaging().send(notification)
            .then((response) => {
              // Response is a message ID string.
              console.log('Successfully sent message:', response);
              return response
            })
            .catch((error) => {
              console.log('Error sending message:', error);
              throw new Error("Error sending message");
            });

      })

    })

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