Para apps cliente da Apple, é possível receber payloads de notificação e dados de até 4.000 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 do guia de início rápido (em inglês) disponibiliza um exemplo de código dessas duas linguagens.
Swizzling de métodos no Firebase Cloud Messaging
O SDK do FCM executa o swizzling de métodos em duas áreas importantes:
mapeamento do token de APNs
para o token de registro do FCM e captura de dados de análise durante o
processamento de chamada de retorno de mensagens downstream.
Os desenvolvedores que preferem não usar o swizzling podem
desativá-lo adicionando a sinalização FirebaseAppDelegateProxyEnabled
no arquivo
Info.plist do app e defini-lo 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.
Adicionar o Firebase ao seu projeto da Apple
Adicione o Firebase ao seu projeto da Apple caso ainda não tenha feito isso.
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, Configurações do projeto e a guia Cloud Messaging.
-
Acesse a Configuração do app iOS. Em Chave de autenticação de APNs, clique no botão Fazer upload.
-
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 seu app. Semelhante ao token do dispositivo de APNs, este token permite que você envie notificações direcionadas a instâncias particulares 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 atual do token.
Swizzling desativado: como associar os tokens de APNs aos 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.
Próximas etapas
Depois de configurar o cliente Apple, estará tudo pronto para adicionar o gerenciamento de mensagens e outros comportamentos mais avançados ao app. Confira estes guias para mais informações: