Para começar a usar o FCM, crie o caso de uso mais simples: enviar uma mensagem de notificação de teste do compositor de Notificações para um dispositivo de desenvolvimento quando o aplicativo estiver em segundo plano no dispositivo. Esta página lista todas as etapas para fazer isso, desde a configuração até a verificação — ela pode abranger etapas que você já concluiu se tiver configurado um aplicativo Flutter para FCM.
Instale o plug-in FCM
Instale e inicialize os SDKs do Firebase para Flutter , caso ainda não tenha feito isso.
Na raiz do seu projeto Flutter, execute o seguinte comando para instalar o plugin:
flutter pub add firebase_messaging
Depois de concluído, reconstrua seu aplicativo Flutter:
flutter run
Acesse o token de registro
Para enviar uma mensagem para um dispositivo específico, você precisa saber o token de registro desse dispositivo. Como você precisará inserir o token em um campo no console de Notificações para concluir este tutorial, copie o token ou armazene-o com segurança após recuperá-lo.
Para recuperar o token de registro atual de uma instância de aplicativo, chame getToken()
. Se a permissão de notificação não tiver sido concedida, este método solicitará permissões de notificação ao usuário. Caso contrário, retorna um token ou rejeita o futuro devido a um erro.
final fcmToken = await FirebaseMessaging.instance.getToken();
Envie uma mensagem de notificação de teste
Instale e execute o aplicativo no dispositivo de destino. Em dispositivos Apple, você precisará aceitar a solicitação de permissão para receber notificações remotas.
Certifique-se de que o aplicativo esteja em segundo plano no dispositivo.
No console do Firebase, abra a página Mensagens .
Se esta for sua primeira mensagem, selecione Crie sua primeira campanha .
- Selecione Mensagens de notificação do Firebase e selecione Criar .
Caso contrário, na guia Campanhas , selecione Nova campanha e depois Notificações .
Digite o texto da mensagem. Todos os outros campos são opcionais.
Selecione Enviar mensagem de teste no painel direito.
No campo denominado Adicionar um token de registro FCM , insira o token de registro obtido na seção anterior deste guia.
Selecione Teste .
Depois de selecionar Testar , o dispositivo cliente de destino (com o aplicativo em segundo plano) deverá receber a notificação.
Para obter informações sobre a entrega de mensagens no seu aplicativo, consulte o painel de relatórios do FCM , que registra o número de mensagens enviadas e abertas em dispositivos Apple e Android, juntamente com dados de "impressões" (notificações vistas pelos usuários) para aplicativos Android.
Lidando com interação
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 será iniciado e, se estiver em segundo plano, será colocado em primeiro plano.
Dependendo do conteúdo de uma notificação, talvez você queira lidar com a interação do usuário quando o aplicativo for aberto. Por exemplo, se uma nova mensagem de bate-papo for enviada por meio de uma notificação e o usuário a selecionar, talvez você queira abrir a conversa específica quando o aplicativo for aberto.
O pacote firebase-messaging
oferece duas maneiras de lidar com essa interação:
-
getInitialMessage()
: Se o aplicativo for aberto a partir de um estado finalizado, este método retornará umFuture
contendo umRemoteMessage
. Uma vez consumido, oRemoteMessage
será removido. -
onMessageOpenedApp
: umStream
que publica umRemoteMessage
quando o aplicativo é aberto em um estado de segundo plano.
Para garantir uma experiência tranquila para seus usuários, você deve lidar com ambos os cenários. O exemplo de código abaixo descreve como isso pode ser alcançado:
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 maneira como você lida com a interação depende da configuração do seu aplicativo. O exemplo acima mostra um exemplo básico de uso de StatefulWidget
.
Próximos passos
Envie mensagens para aplicativos em primeiro plano
Depois de enviar mensagens de notificação com sucesso enquanto seu aplicativo está em segundo plano, consulte Receber mensagens em um aplicativo Flutter para começar a enviar para aplicativos em primeiro plano.
Vá além das mensagens de notificação
Para adicionar outro comportamento mais avançado ao seu aplicativo, você precisará de uma implementação de servidor .
Então, no cliente do seu aplicativo: