Este guia de início rápido descreve como configurar o Firebase Cloud Messaging nos seus
apps cliente da Web e para dispositivos móveis para que você possa enviar mensagens de forma confiável. Para ambientes
de servidor, consulte O ambiente de servidor e
o FCM.
Configurar um app cliente do Firebase Cloud Messaging em plataformas da Apple
Para apps cliente da Apple, você pode receber notificações e payloads de dados de até 4.096 bytes pela interface APNs do Firebase Cloud Messaging.
Para escrever o código cliente em Objective-C ou Swift, recomendamos usar a API FIRMessaging. O exemplo de início rápido fornece um exemplo de código para as duas linguagens.
Antes de começar, adicione o Firebase ao seu projeto da Apple.
Swizzling de métodos no Firebase Cloud Messaging
O SDK do FCM executa o swizzling de métodos em duas áreas principais: mapeamento do
token de APNs para o token de registro do FCM e
captura de dados de análise durante o processamento de retorno de chamada de mensagens
downstream. Os desenvolvedores que
preferem não usar o swizzling podem desativá-lo adicionando a flag
FirebaseAppDelegateProxyEnabled
no arquivo Info.plist do app e definindo-a como
NO (valor booleano). As áreas relevantes dos guias exibem exemplos de código, seja com o swizzling de métodos ativado ou não.
Fazer upload da chave de autenticação de APNs
Faça upload da chave de autenticação de APNs para o Firebase. Se você ainda não tiver uma chave de autenticação de APNs, crie uma no Apple Developer Member Center.
-
No seu projeto no console do Firebase, selecione o ícone de engrenagem, clique em Configurações do projeto e selecione a guia Cloud Messaging.
-
Em Chave de autenticação de APNs, na seção Configuração do app iOS, clique no botão Fazer upload para enviar a chave de autenticação de desenvolvimento, a de produção ou ambas. Pelo menos uma dessas opções é obrigatória.
-
Navegue até o local onde você salvou a chave, selecione-a e clique em Abrir. Adicione o ID da chave disponível no Apple Developer Member Center e clique em Fazer upload.
Registrar o app para receber notificações remotas
Na inicialização ou no ponto desejado do fluxo do seu aplicativo, registre-o para receber notificações remotas. ChameregisterForRemoteNotifications
conforme mostrado:
Swift
UNUserNotificationCenter.current().delegate = self let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound] UNUserNotificationCenter.current().requestAuthorization( options: authOptions, completionHandler: { _, _ in } ) application.registerForRemoteNotifications()
Objective-C
[UNUserNotificationCenter currentNotificationCenter].delegate = self; UNAuthorizationOptions authOptions = UNAuthorizationOptionAlert | UNAuthorizationOptionSound | UNAuthorizationOptionBadge; [[UNUserNotificationCenter currentNotificationCenter] requestAuthorizationWithOptions:authOptions completionHandler:^(BOOL granted, NSError * _Nullable error) { // ... }]; [application registerForRemoteNotifications];
Acessar o token de registro
Por padrão, o SDK do FCM gera um token de registro para a instância do app cliente na inicialização do app. Semelhante ao token do dispositivo de APNs, este token permite que você envie notificações direcionadas a determinadas instâncias do seu app.
Da mesma forma que as plataformas da Apple normalmente entregam um token de dispositivo de APNs ao iniciar o app,
o FCM fornece um token de registro usando o
método messaging:didReceiveRegistrationToken:
de FIRMessagingDelegate
.
O SDK do FCM recupera um token novo ou atual durante a inicialização do aplicativo e
sempre que o token é atualizado ou invalidado.
Em todos os casos, o SDK do FCM chama messaging:didReceiveRegistrationToken:
com um token válido.
Esse token pode mudar quando:
- o app é restaurado em um novo dispositivo;
- o usuário desinstala/reinstala o app;
- o usuário limpa os dados do app.
Definir a delegação de mensagens
Para receber tokens de registro, implemente o protocolo de delegação
de mensagens e defina a propriedade delegate
do FIRMessaging
depois de chamar
[FIRApp configure]
.
Por exemplo, se o delegado do aplicativo estiver em conformidade com o protocolo de delegação
de mensagens, você vai poder configurá-lo como seu próprio delegado em
application:didFinishLaunchingWithOptions:
.
Swift
Messaging.messaging().delegate = self
Objective-C
[FIRMessaging messaging].delegate = self;
Como encontrar o token de registro atual
Os tokens de registro são enviados usando o método
messaging:didReceiveRegistrationToken:
. Normalmente, esse método é chamado uma vez
a cada inicialização do app com um token de registro. Depois dessa chamada é o momento ideal para:
- se o token de registro for novo, enviá-lo para o servidor de aplicativos;
- inscrever o token de registro em tópicos. Isso é necessário apenas para novas assinaturas ou em situações em que o usuário tenha reinstalado o app.
É possível recuperar o token diretamente usando token(completion:). Um erro não nulo será fornecido se a recuperação do token falhar.
Swift
Messaging.messaging().token { token, error in if let error = error { print("Error fetching FCM registration token: \(error)") } else if let token = token { print("FCM registration token: \(token)") self.fcmRegTokenMessage.text = "Remote FCM registration token: \(token)" } }
Objective-C
[[FIRMessaging messaging] tokenWithCompletion:^(NSString *token, NSError *error) { if (error != nil) { NSLog(@"Error getting FCM registration token: %@", error); } else { NSLog(@"FCM registration token: %@", token); self.fcmRegTokenMessage.text = token; } }];
Você pode usar esse método a qualquer momento para acessar o token em vez de armazená-lo.
Monitorar a atualização do token
Se você quiser receber notificações sempre que o token for atualizado, forneça um delegado em conformidade com o protocolo de delegação de mensagens. O exemplo a seguir registra o delegado e adiciona o método apropriado:
Swift
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) { print("Firebase registration token: \(String(describing: fcmToken))") let dataDict: [String: String] = ["token": fcmToken ?? ""] NotificationCenter.default.post( name: Notification.Name("FCMToken"), object: nil, userInfo: dataDict ) // TODO: If necessary send token to application server. // Note: This callback is fired at each app startup and whenever a new token is generated. }
Objective-C
- (void)messaging:(FIRMessaging *)messaging didReceiveRegistrationToken:(NSString *)fcmToken { NSLog(@"FCM registration token: %@", fcmToken); // Notify about received token. NSDictionary *dataDict = [NSDictionary dictionaryWithObject:fcmToken forKey:@"token"]; [[NSNotificationCenter defaultCenter] postNotificationName: @"FCMToken" object:nil userInfo:dataDict]; // TODO: If necessary send token to application server. // Note: This callback is fired at each app startup and whenever a new token is generated. }
Como alternativa, você pode detectar uma NSNotification
denominada
kFIRMessagingRegistrationTokenRefreshNotification
em vez de fornecer um método delegado. A propriedade do token tem sempre o
valor do token atual.
Swizzling desativado: como mapear o token de APNs e de registro
Se você desativou o swizzling de métodos ou está criando um app do SwiftUI,
associe explicitamente o token de APNs ao token de registro do FCM. Implemente o
método application(_:didRegisterForRemoteNotificationsWithDeviceToken:)
para
recuperar o token de APNs e defina a propriedade
apnsToken
do Messaging
:
Swift
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { Messaging.messaging().apnsToken = deviceToken }
Objective-C
// With "FirebaseAppDelegateProxyEnabled": NO - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { [FIRMessaging messaging].APNSToken = deviceToken; }
Depois que o token de registro do FCM for gerado, é possível acessá-lo e detectar eventos de atualização usando os mesmos métodos como se o swizzling estivesse ativado.
Impedir a inicialização automática
Quando um token de registro do FCM é gerado, a biblioteca faz upload dos dados de
configuração e do identificador para o Firebase. Se você quiser receber uma autorização
explícita dos usuários antes disso, é possível impedir a geração de tokens no momento da configuração. Para isso, basta
desativar o FCM. Para isso, adicione um valor de metadados a seu Info.plist
(não seu GoogleService-Info.plist
):
FirebaseMessagingAutoInitEnabled = NO
Para reativar o FCM, faça uma chamada de tempo de execução:
Swift
Messaging.messaging().autoInitEnabled = true
Objective-C
[FIRMessaging messaging].autoInitEnabled = YES;
Depois de definido, esse valor persiste às reinicializações do app.
Enviar uma mensagem de notificação
- Instale e execute o app no dispositivo de destino. Em dispositivos Apple, aceite 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 sua 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.
- Selecione Enviar mensagem de teste no painel à direita.
- No campo Adicionar um token de registro do FCM, insira seu token de registro.
- Selecione Testar.
Depois de selecionar Testar, o dispositivo cliente de destino com o app em segundo plano vai receber a notificação.
Para saber mais sobre a entrega de mensagens ao seu app, consulte o painel de relatórios do FCM, que registra o número de mensagens enviadas e abertas em dispositivos Apple e Android.
Próximas etapas
Depois de configurar o cliente Apple, você pode começar a receber e enviar mensagens para os usuários: