Muitas vezes complicamos coisas que são extremamente simples, push notifications são um exemplo disso, como as menssagens já são enviadas para os dispositivos android pelo FCM(Firebase Cloud Messaging), por que não enviar pelo mesmo lugar as menssagens para os dispositivos iOS? Neste post iremos aprender como gerar uma chave de autentição no Apple Developer, configurar esta chave no Firebase e em seguida como configurar seu app iOS para se registrar no FCM para receber essas menssagens.

Gerando uma chave de autenticação na Apple Developer

No site da Apple Developer va em account https://developer.apple.com/account e depois em certificates.

Selecione a aba Keys e clicque no botão de + para gerar uma nova chave

Em preencha os dados da sua chave e selecione as permissões que voce quer dar para essa chave, essas permissões podem ser alteradas posteriormente.

Pressione Continue e verifique se os dados estão corretos antes de pressionar “Register”

Baixe a chave gerada e guarde muito bem o arquivo .p8 pois será a unica vez que voce terá acesso ao mesmo pelo site da apple, caso voce perca este arquivo terá que excluir a chave e criar uma nova

Vá para o Firebase e clique na engrenagem e depois em “Configurações de Projeto”

Vá na aba “Cloud Messaging” na parte “Configuração do app para iOS”, certifique-se de criar o app iOS antes, caso contrário está parte estará desabilitada, aqui são oferecidas duas formas de linkar a APNs(Apple Push Notification service) com o firebase, a primeira é via a chave de autenticação que acabamos de criar e a segunda é por meio de certificados padrão gerados também pelo site do Apple Developer. O problema dos certificados comuns é que eles expiram, e voce teria q lembrar de atualizar ele para sua aplicação continuar funcionando, já as chaves de segurança não tem prazo de validade.

Clique em “Fazer upload” e preencha os dados da sua chave de autenticação. O código da chave foi informado no momento que voce gerou a chave, e o código da equipe que fica no canto superior direto logo abaixo do seu nome no site da Apple Developer.

Pronto, com isso já configuramos o firebase para poder enviar menssagens para nossos dispositivos iOS, agora vamos ver oque temos que fazer no nosso projeto para poder receber as notificações

Configurando o Firebase na nossa aplicação iOS

Adicione no seu Podfile

pod 'Firebase/Messaging'

Em seguida execute o comando para instalar o Firebase Messaging

pod install

Importe o modulo no seu UIApplicationDelegate

import Firebase

Configure o FirebaseApp, geralmente no método application:didFinishLaunchingWithOptions:

FirebaseApp.configure()

Ou no início da sua aplicação ou em algum outro ponto desejado, registre sua aplicação para receber notificações

if #available(iOS 10.0, *) {
  // For iOS 10 display notification (sent via APNS)
  UNUserNotificationCenter.current().delegate = self

  let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
  UNUserNotificationCenter.current().requestAuthorization(
    options: authOptions,
    completionHandler: {_, _ in })
} else {
  let settings: UIUserNotificationSettings =
  UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
  application.registerUserNotificationSettings(settings)
}

application.registerForRemoteNotifications()

Configurando o message delegate

Após chamar o método configure do FirebaseApp voce pode configurar o Messaging delegate para interceptar o recebimento do seu token do FCM

Messaging.messaging().delegate = self
extension AppDelegate: MessagingDelegate {
    
  func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
    // Fazer algo com o token recebido
  }

}

Geralmente após efetuar o login voce quer informar o backend qual o token do seu dispositivo, desta forma ele vai saber como te enviar um push quando algo acontecer e voce não estiver na aplicação, a melhor forma de fazer isso é utilizando o InstanceID e enviando ele para o server

InstanceID.instanceID().instanceID { (result, error) in
  if let error = error {
    print("Error fetching remote instance ID: \(error)")
  } else if let result = result {
    print("Remote instance ID token: \(result.token)")
  }
}

A aplicação deverá gerar on log parecido com:

Remote instance ID token: fetdK1M_rYI:APA91bEM-oX8lLGPikqwtFGvOsFOQ0ZAlpT1hS2sNPOUiilxvVtrNXpvEa5r9ZTmqqmWv3AgbUPbcr5iCDt1gTLpprRJcfoqi1iErya1H3O7iY0Skh4L_PyoamG0PbR-Svt6oc_2qWFw

Testando nossa aplicação

Dentro do firebase é possível testar se nosso aplicativo está funcionando corretamente, basta ir na aba “Cloud Messaging” e clicar no botão “Send your first message”

Clicando em “Enviar menssagem de teste” e adicionando o token do dispositivo de teste

Bom, isso é tudo galera, espero ter ajudado com esse tutorial, boa parte desse conteúdo posse ser encontrado no guia do próprio Firebase, porém nem sempre fica claro oque devemos fazer