Gatilhos de alertas do Firebase

O Firebase conta com alertas para uma ampla variedade de eventos de gerenciamento de projetos e apps. Veja a seguir alguns exemplos de eventos em que o Firebase pode enviar esse tipo de alerta:

  • Para o Crashlytics, um alerta pode ser enviado se o app apresentar um aumento drástico de falhas.
  • Para o Monitoramento de desempenho, um alerta pode ser enviado se o tempo de inicialização do app ultrapassar o limite configurado.
  • Para o App Distribution, um alerta pode ser enviado se um dos testadores registrar um novo dispositivo iOS.

Dependendo do alerta e das preferências definidas pelo membro do projeto, o Firebase mostra esses tipos de alerta no Console do Firebase ou os envia por e-mail.

Esta página descreve como criar funções que processam eventos de alerta.

Como funciona?

É possível acionar funções em resposta a eventos de alerta emitidos pelas seguintes fontes:

Em um ciclo de vida comum, uma função acionada por um evento de alerta faz o seguinte:

  1. Detecta/aguarda a emissão de um tipo específico de alerta do Firebase.
  2. É acionada quando o alerta é emitido e recebe o payload do evento contendo informações específicas.
  3. Invoca o código da sua função para processar o payload do evento.

Acionar uma função em eventos de alerta

Use o subpacote firebase-functions/v2/alerts para criar uma função que processe eventos de alertas. Os seguintes exemplos específicos de produto mostram um fluxo de trabalho em que uma função usa um webhook para postar uma mensagem em um canal do Discord quando um alerta para esse produto é emitido a partir do Firebase.

Processar um evento de alerta do Crashlytics

No seguinte exemplo do Crashlytics, o Cloud Functions para Firebase é usado para processar um evento de alerta de um novo problema de falha fatal. Essa função posta as informações de alerta em uma mensagem enviada em um canal do Discord.

Exemplo de notificação de falha no Discord

Exemplo de notificação de novo problema de falha fatal

A função detecta o evento onNewFatalIssuePublished:

exports.postfatalissuetodiscord = onNewFatalIssuePublished(async (event) => {

A função analisa o objeto de evento retornado, criando uma mensagem para postar no canal do Discord:

  // construct a helpful message to send to Discord
  const appId = event.appId;
  const {id, title, subtitle, appVersion} = event.data.payload.issue;
  const message = `
🚨 New fatal issue for ${appId} in version ${appVersion} 🚨

**${title}**

${subtitle}

id: \`${id}\`
`;

Por fim, a função envia a mensagem criada para o Discord:

    const response = await postMessageToDiscord("Crashlytics Bot", message);
    if (response.ok) {
      logger.info(
          `Posted fatal Crashlytics alert ${id} for ${appId} to Discord`,
          event.data.payload,
      );
    } else {
      throw new Error(response.error);
    }

Para saber mais sobre todos os eventos de alerta do Crashlytics que você pode capturar, acesse a documentação de referência para Alertas do Crashlytics.

Processar um evento de alerta do Monitoramento de desempenho

O exemplo nesta seção mostra como escrever uma função para alertas de limite de desempenho.

Neste exemplo, a função onThresholdAlertPublished exporta uma função da nuvem que detecta eventos do tipo PerformanceEvent<ThresholdAlertPayload>, que são enviados sempre que um alerta de limite de desempenho é acionado:

exports.postperformancealerttodiscord = onThresholdAlertPublished(
    async (event) => {

Em seguida, a função analisa o objeto de evento retornado, analisando informações úteis do payload do evento e criando uma mensagem para postar no canal do Discord:

      // construct a helpful message to send to Discord
      const appId = event.appId;
      const {
        eventName,
        metricType,
        eventType,
        numSamples,
        thresholdValue,
        thresholdUnit,
        conditionPercentile,
        appVersion,
        violationValue,
        violationUnit,
        investigateUri,
      } = event.data.payload;
      const message = `
    ⚠️ Performance Alert for ${metricType} of ${eventType}: **${eventName}** ⚠️

    App id: ${appId}
    Alert condition: ${thresholdValue} ${thresholdUnit}
    Percentile (if applicable): ${conditionPercentile}
    App version (if applicable): ${appVersion}

    Violation: ${violationValue} ${violationUnit}
    Number of samples checked: ${numSamples}

    **Investigate more:** ${investigateUri}
    `;

Por fim, a função envia a mensagem criada para o Discord por uma solicitação HTTP:

        const response = await postMessageToDiscord(
            "Firebase Performance Bot", message);
        if (response.ok) {
          logger.info(
              `Posted Firebase Performance alert ${eventName} to Discord`,
              event.data.payload,
          );
        } else {
          throw new Error(response.error);
        }

Para saber mais sobre todos os eventos de alerta de desempenho que podem ser capturados, acesse a documentação de referência para alertas do Monitoramento de desempenho.

Processar um evento de alerta do App Distribution

No exemplo desta seção podemos ver como criar uma função para novos alertas de dispositivo iOS de testadores.

Neste exemplo, a função onNewTesterIosDevicePublished exporta uma função do Cloud que detecta eventos do tipo AppDistributionEvent<NewTesterDevicePayload>, que é enviada sempre que um testador registra um novo dispositivo iOS. Quando um novo dispositivo iOS é registrado, o perfil de provisionamento precisa ser atualizado com o UDID dele, e o app precisa ser redistribuído.

exports.postnewduuidtodiscord = onNewTesterIosDevicePublished(async (event) => {

Em seguida, a função analisa as informações úteis retornadas do payload do evento e cria uma mensagem que é postada no canal do Discord:

  // construct a helpful message to send to Discord
  const appId = event.appId;
  const {
    testerDeviceIdentifier,
    testerDeviceModelName,
    testerEmail,
    testerName,
  } = event.data.payload;
  const message = `
📱 New iOS device registered by ${testerName} <${testerEmail}> for ${appId}

UDID **${testerDeviceIdentifier}** for ${testerDeviceModelName}
`;

Por fim, a função envia a mensagem criada para o Discord por uma solicitação HTTP:

    const response = await postMessageToDiscord("AppDistribution Bot", message);
    if (response.ok) {
      logger.info(
          `Posted iOS device registration alert for ${testerEmail} to Discord`,
      );
    } else {
      throw new Error(response.error);
    }

Para saber mais sobre todos os eventos de alerta do App Distribution que podem ser capturados, acesse a documentação de referência dos alertas do App Distribution.

Se você quiser aprender a usar uma função acionada por um alerta de feedback do App Distribution direto no aplicativo do Firebase, consulte Enviar feedback no app para o Jira.