iOS Nativo

1. Crie uma aplicação iOS no console do Firebase

Na aba Cloud Messaging, encontrado no console do Firebase, crie uma aplicação iOS

Após criada, faça o download do arquivo GoogleService-Info.plist. Ele será adicionado em seu projeto Flutter a seguir:

2 - Adicione o arquivo google-services.plist em seu projeto

No seu projeto, dentro da pasta iOS/Runner adicione o arquivo google-services.plist

../Seuprojeto/ios/Runner/

3. No Xcode habilite o App para Notificações Remotas

4. Configuração no código do seu App

  1. Gere os certificados exigidos pela Apple para receber notificações push seguindo this guide nos documentos do Firebase. Você pode pular a seção intitulada "Criar o perfil de provisionamento".

  2. Usando o Firebase Console , adicione um aplicativo iOS ao seu projeto: Siga o assistente, baixe o arquivo GoogleService-Info.plist gerado, abra ios / Runner.xcworkspace com o Xcode e, no Xcode, coloque o arquivo dentro do ios / Runner. Não siga as etapas chamadas "Adicionar SDK do Firebase" e "Adicionar código de inicialização" no assistente do Firebase.

  3. No Xcode, selecione Runner no Project Navigator. Na guia Capacidades, ative Notificações push e Modos em segundo plano e ative a busca em segundo plano e notificações remotas em Modos em segundo plano.

  4. Siga as etapas na seção "Upload your APNs certificate"" dos documentos do Firebase.

❗️

  1. Alerta!!!!!: Se você precisar desativar o método swizzling feito pelo FCM iOS SDK (por exemplo, para que você possa usar este plug-in com outros plug-ins de notificação), adicione o seguinte ao arquivo Info.plist do seu aplicativo.

FirebaseAppDelegateProxyEnabled

  1. Após realizar a configuração acima, adicione as seguintes linhas de código a seu aplicativo no método AppDelegate.m/AppDelegate.swift:
(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

Swift

if #available(iOS 10.0, *) {
  UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate
}

Objective-c

if (@available(iOS 10.0, *)) {
  [UNUserNotificationCenter currentNotificationCenter].delegate = (id<UNUserNotificationCenterDelegate>) self;
}

Lembre-se

Voce precisa adicionar esta chave no ios/Runner/Info.plist
Para evitar problemas com a webview

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
    <key>NSAllowsArbitraryLoadsInWebContent</key>
    <true/>
</dict>
  1. Configurando o AppDelegate e inicializando o Firebase: Vá até ios/Runner/AppDelegate.swift e inicializar o Firebase da seguinte forma:
import UIKit
import Flutter
import Firebase

@UIApplicationMain
@objc class AppDelegate: FlutterAppDelegate {


  override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
  ) -> Bool {
    FirebaseApp.configure()
    GeneratedPluginRegistrant.register(with: self)
    return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }
}

🚧

Por default os emuladores em iOS não geram o Push Token válidos, o que irá dificultar os testes, mas voce pode testar num device fisico iOS ou android emulator. ☺️

5. Configuração Rich Push Notifications

Para poder receber e gerenciar imagens de notificação em um aplicativo iOS, você deve adicionar uma Notification Service Extension. A extensão do serviço de notificação permite que seu aplicativo reconheça a imagem enviada no payload do FCM antes de exibir a notificação ao usuário final.)

Você pode conferir o passo-a-passo oficial, fornecido na documentação do Firebase, clicando nesse link

Configure a Notification Service Extension.

Para adicionar uma extensão de serviço, execute as tarefas de configuração necessárias para modificar e apresentar notificações em APNs e, em seguida, adicione a API auxiliar de extensão FCM em NotificationService.m. Especificamente, em vez de completar o retorno de chamada com self.contentHandler (self.bestAttemptContent) ;, complete-o com FIRMessaging extensionHelper conforme mostrado:

@interface NotificationService () <NSURLSessionDelegate>
@property(nonatomic) void (^contentHandler)(UNNotificationContent *contentToDeliver);
@property(nonatomic) UNMutableNotificationContent *bestAttemptContent;
@end

@implementation NotificationService

- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
    self.contentHandler = contentHandler;
    self.bestAttemptContent = [request.content mutableCopy];

    // Modify the notification content here as you wish
    self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [modified]",
    self.bestAttemptContent.title];

  // Call FIRMessaging extension helper API.
  [[FIRMessaging extensionHelper] populateNotificationContent:self.bestAttemptContent
                                            withContentHandler:contentHandler];

}
...
  1. Se for um erro sobre o bitcode: abra o NotificationService de destino, aba Build Settings, encontre o bitcode -> selecione Não