Flutter Firebase Уведомляет Администратора О Новом Запросе

# #firebase #flutter

Вопрос:

Я изучаю flutter /firebase и пытаюсь изучить функциональность, с помощью которой я могу получить электронное письмо по новому документу, созданному в определенной коллекции. Возможно ли это в flutter или firebase?

Ответ №1:

Да, вы можете использовать триггеры Cloud Firestore. Эти триггеры легко настроить с помощью облачных функций

Приведенный ниже код представляет собой функцию, которая запускается при создании нового документа в примере коллекции Users . После запуска мы можем извлечь имя пользователя и адрес электронной почты (которые получены из запроса на создание нового пользователя) и использовать Nodemailer для отправки пользовательского электронного письма.

{your_email} и {your_password} представляйте учетную запись электронной почты, которая отправляет это электронное письмо.

 const functions = require('firebase-functions');
import * as nodemailer from 'nodemailer';

const transporter = nodemailer.createTransport({
    host: 'smtp.gmail.com',
    port: 465,
    secure: true,
    priority: 'high',
    auth: {
        user: '{your_email}',
        pass: '{your_password}',
    },
});

export const onCreateUserTrigger = functions.firestore
  .document('Users/{userId}')
  .onWrite((snap, context) => { 

    const userEmail = snap.data().email;
    // this is the email we send to but you can make this any email: 
    // userEmail = 'admin@gmail.com';
    const userName = snap.data().name;
    const userId = context.params.userId;

    // send a mail
    const htmlText = `<p>Hello ${userName},  </p>
    <p> This is a notification about... </p>
    `;
    const mailOptions = {
        from: "{your_name} <{your_email}>",
        to: userEmail,
        subject: "Notification",
        html: htmlText,
    };
    await transporter.sendMail(mailOptions);

 });
 

Если вам нужна функция, которая запускается при любой записи (создании и редактировании) в Users коллекцию, вы можете изменить функцию firestore на onWrite :

 export const onWriteUserTrigger = functions.firestore
  .document('Users/{userId}')
  .onWrite((snap, context) => { 

   // send email
 });