Enviar uma mensagem de teste a um app em segundo plano

Para começar a usar o FCM, crie o caso de uso mais simples: enviar uma mensagem do Editor do Notificações a um dispositivo de desenvolvimento específico quando o app estiver em segundo plano. Esta página descreve todas as etapas para fazer isso, desde a configuração até a verificação. Talvez ela aborde etapas que você já concluiu, se configurou um app cliente do iOS para o FCM.

Instalar o plug-in do FCM

  1. Instale e inicialize os SDKs do Firebase para Flutter, caso ainda não tenha feito isso.

  2. Na raiz do seu projeto do Flutter, execute o seguinte comando para instalar o plug-in:

    flutter pub add firebase_messaging
    
  3. Após a conclusão, recrie seu aplicativo do Flutter:

    flutter run
    

Acessar o token de registro

Para enviar uma mensagem a um dispositivo específico, é necessário saber o token de registro dele. Como você precisa informar o token em um campo do console do Firebase Notificações para concluir este tutorial, lembre de copiar ou armazenar o token em segurança depois de recuperá-lo.

Para recuperar o token de registro atual de uma instância de app, chame getToken(). Se a permissão de notificações não tiver sido concedida, esse método solicitará essa permissão ao usuário. Caso contrário, ele retorna um token ou rejeita a promessa devido a um erro.

final fcmToken = await FirebaseMessaging.instance.getToken();

Enviar uma mensagem de notificação de teste

  1. Instale e execute o app no dispositivo de destino. Para dispositivos Apple, será necessário aceitar a solicitação de permissão para receber notificações remotas.

  2. Verifique se o app está em segundo plano no dispositivo.

  3. No Console do Firebase, abra a página "Mensagens".

  4. Se esta for sua primeira mensagem, selecione Criar primeira campanha.

    1. Selecione Mensagens do Firebase Notificações e clique em Criar.
  5. Se não for sua primeira mensagem, selecione Nova campanha e depois Notificações na guia Campanhas.

  6. Digite o texto da mensagem. Todos os outros campos são opcionais.

  7. Selecione Enviar mensagem de teste no painel à direita.

  8. No campo Adicionar um token de registro do FCM, insira o token de registro obtido na seção anterior deste guia.

  9. Selecione Testar.

Depois de selecionar Testar, o dispositivo cliente de destino com o app em segundo plano receberá a notificação.

Confira insights sobre a entrega de mensagens ao app no painel de relatórios do FCM, que registra o número de mensagens enviadas e abertas em dispositivos da Apple e Android, além de dados de "impressões" (notificações vistas pelos usuários) nos apps Android.

Como processar interações

Quando os usuários tocam em uma notificação, o comportamento padrão no Android e no iOS é abrir o aplicativo. Se o aplicativo for encerrado, ele vai ser iniciado, e caso esteja em segundo plano, será colocado no primeiro plano.

Dependendo do conteúdo de uma notificação, recomendamos processar a interação do usuário quando o aplicativo for aberto. Por exemplo, se uma nova mensagem de chat for enviada via notificação, e o usuário tocar nela, recomendamos abrir a conversa específica quando o aplicativo for aberto.

O pacote firebase-messaging oferece duas maneiras de processar essa interação:

  1. getInitialMessage(): se o aplicativo for aberto a partir de um estado encerrado, esse método retornará um Future contendo um RemoteMessage. Depois de consumido, o RemoteMessage será removido.
  2. onMessageOpenedApp: um Stream que publica um RemoteMessage quando o aplicativo é aberto a partir de um estado em segundo plano.

Para garantir uma experiência tranquila aos usuários, você precisa lidar com os dois casos. O exemplo de código abaixo descreve como isso pode ser feito:

class Application extends StatefulWidget {
  @override
  State<StatefulWidget> createState() => _Application();
}

class _Application extends State<Application> {
  // In this example, suppose that all messages contain a data field with the key 'type'.
  Future<void> setupInteractedMessage() async {
    // Get any messages which caused the application to open from
    // a terminated state.
    RemoteMessage? initialMessage =
        await FirebaseMessaging.instance.getInitialMessage();

    // If the message also contains a data property with a "type" of "chat",
    // navigate to a chat screen
    if (initialMessage != null) {
      _handleMessage(initialMessage);
    }

    // Also handle any interaction when the app is in the background via a
    // Stream listener
    FirebaseMessaging.onMessageOpenedApp.listen(_handleMessage);
  }

  void _handleMessage(RemoteMessage message) {
    if (message.data['type'] == 'chat') {
      Navigator.pushNamed(context, '/chat',
        arguments: ChatArguments(message),
      );
    }
  }

  @override
  void initState() {
    super.initState();

    // Run code required to handle interacted messages in an async function
    // as initState() must not be async
    setupInteractedMessage();
  }

  @override
  Widget build(BuildContext context) {
    return Text("...");
  }
}

A forma como você interage com as interações depende da configuração do aplicativo. O exemplo acima mostra um exemplo básico de como usar um StatefulWidget.

Próximas etapas

Enviar mensagens aos apps em primeiro plano

Depois de enviar com êxito mensagens de notificação enquanto o seu app está em segundo plano, consulte Receber mensagens em um app do Flutter para começar a enviar a apps em primeiro plano.

Vá além das mensagens de notificação

Para adicionar outro comportamento mais avançado ao app, você precisará de uma implementação de servidor.

Em seguida, no cliente do app: