как отправить уведомление указанных пользователей по облачной функции? - PullRequest
0 голосов
/ 31 января 2020

Есть ли способ отправить уведомление указанным пользователям?

const res = await db.collection('users')
    .where('businessDetails.serviceSubCategories','array-contains',subId)
    .where('businessDetails.isApplied','==','Y')
    .get();

    if(res.empty){
        return;
    }else{

     //send notification only response users

        const payload: admin.messaging.MessagingPayload = {
            notification:{
                title: `New Enquiry`,
                body:`${customerName} published to ${subName}`,
                badge: '1',
                sound: 'default'
            }
        }

        return fcm.sendToTopic('requirements',payload);
    }

1 Ответ

1 голос
/ 31 января 2020

Firebase имеет 2 различных способа отправки сообщений FCM:

  • Либо через topi c с, как вы делаете.
  • Или с помощью registrationToken, который предназначен для одного пользователя / устройство с указанным c ключом.

ссылка на документацию FCM Токен генерируется на стороне клиента и вам необходимо очень надежно отправить в БД (если у кого-то есть доступ к этому токену, он сможет отправлять уведомления вашему пользователю).

Вот код для отправки уведомления:


    // This registration token comes from the client FCM SDKs.
    var registrationToken = 'YOUR_REGISTRATION_TOKEN';

    var message = {
      data: {
        score: '850',
        time: '2:45'
      },
      token: registrationToken
    };

    // Send a message to the device corresponding to the provided
    // registration token.
    admin.messaging().send(message)
      .then((response) => {
        // Response is a message ID string.
        console.log('Successfully sent message:', response);
      })
      .catch((error) => {
        console.log('Error sending message:', error);
      });

Теперь просит вопрос о том, как получить токен от пользователя: Больше информации там

Вот код для WEB:

    // Get Instance ID token. Initially this makes a network call, once retrieved
    // subsequent calls to getToken will return from cache.
    messaging.getToken().then((currentToken) => {
      if (currentToken) {
        sendTokenToServer(currentToken);
        updateUIForPushEnabled(currentToken);
      } else {
        // Show permission request.
        console.log('No Instance ID token available. Request permission to generate one.');
        // Show permission UI.
        updateUIForPushPermissionRequired();
        setTokenSentToServer(false);
      }
    }).catch((err) => {
      console.log('An error occurred while retrieving token. ', err);
      showToken('Error retrieving Instance ID token. ', err);
      setTokenSentToServer(false);
    });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...