Para começar a usar o FCM, crie o caso de uso mais simples: enviar uma mensagem de notificação de teste do Editor do Notificações a um dispositivo de desenvolvimento 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
Instale e inicialize os SDKs do Firebase para Flutter, caso ainda não tenha feito isso.
Na raiz do seu projeto do Flutter, execute o seguinte comando para instalar o plug-in:
flutter pub add firebase_messaging
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
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.
Verifique se o app está em segundo plano no dispositivo.
No console do Firebase, abra a página Mensagens.
Se esta for sua primeira mensagem, selecione Criar primeira campanha.
- Selecione Mensagens do Firebase Notificações e clique em Criar.
Se não for sua primeira mensagem, selecione Nova campanha e depois Notificações na guia Campanhas.
Digite o texto da mensagem. Todos os outros campos são opcionais.
Selecione Enviar mensagem de teste no painel à direita.
No campo Adicionar um token de registro do FCM, insira o token de registro obtido na seção anterior deste guia.
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:
getInitialMessage()
: se o aplicativo for aberto a partir de um estado encerrado, esse método retornará umFuture
contendo umRemoteMessage
. Depois de consumido, oRemoteMessage
será removido.onMessageOpenedApp
: umStream
que publica umRemoteMessage
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: