Check out what’s new from Firebase at Google I/O 2022. Learn more

Gestisci le installazioni di Firebase

Il servizio di installazioni Firebase (FIS) fornisce un ID di installazione Firebase (FID) per ogni istanza installata di un'applicazione Firebase. L'ID di installazione Firebase viene utilizzato internamente da questi servizi Firebase:

servizio di Firebase installazioni Firebase funzionalità
Firebase Cloud Messaging

Firebase cloud di messaggistica utilizza gli ID di installazione Firebase ai dispositivi di destinazione per la consegna dei messaggi.

Firebase in-app di messaggistica

Firebase in-app di messaggistica utilizza gli ID di installazione Firebase ai dispositivi di destinazione per la consegna dei messaggi.

Firebase Performance Monitoring

utilizza gli ID di installazione Firebase monitoraggio delle prestazioni per calcolare il numero di installazioni Firebase uniche che le risorse di rete di accesso, al fine di garantire che i modelli di accesso siano sufficientemente anonima. Utilizza anche gli ID di installazione Firebase con Firebase Configurazione remota per gestire il tasso di segnalazione dell'evento prestazioni.

Google Analytics per Firebase

Google Analytics per Firebase utilizza i dati per fornire analisi e informazioni attribuzione. Le informazioni precise raccolte possono variare dal dispositivo e l'ambiente.

Firebase Config a distanza

Remote Config utilizza ID di installazione Firebase per selezionare i valori di configurazione per tornare a dispositivi utente.

Firebase ML

Credenziali chiamati installazione auth token sono utilizzati da Firebase ML per l'autenticazione dei dispositivi quando si interagisce con le istanze app, ad esempio, la distribuzione di modelli di sviluppo alle istanze di app.

In genere, i servizi Firebase utilizzano gli impianti di servizio Firebase senza richiedere agli sviluppatori di interagire direttamente con l'API FIS. Tuttavia, ci sono casi in cui gli sviluppatori di applicazioni potrebbero voler chiamare direttamente l'API FIS, come ad esempio:

  • Per eliminare un impianto Firebase ei dati legati all'installazione.
  • Per recuperare gli identificatori (ID installazione Firebase) al fine di indirizzare le installazioni di applicazioni specifiche.
  • Per recuperare i token installazione auth per autenticare le installazioni Firebase.

Per iniziare con chiamando direttamente l'API FIS, aggiungere l'SDK per la vostra applicazione.

Aggiungere la Firebase installazioni SDK per la vostra applicazione

iOS +

  1. Aggiungere la dipendenza per Firebase installazioni al vostro Podfile:
    pod 'FirebaseInstallations'
    PLACEHOLDER1
  2. Eseguire pod install e aprire il creato .xcworkspace file.
  3. Importare il FirebaseCore modulo nel UIApplicationDelegate , così come qualsiasi altra moduli Firebase vostri usi app delegato. Ad esempio, per utilizzare il cloud FireStore e autenticazione:

    Veloce

    import FirebaseCore
    import FirebaseFirestore
    import FirebaseAuth
    // ...
          

    Obiettivo-C

    @import FirebaseCore;
    @import FirebaseFirestore;
    @import FirebaseAuth;
    // ...
          
  4. Configurare un FirebaseApp istanza condivisa, di solito in della tua app application:didFinishLaunchingWithOptions: Metodo:

    Veloce

    // Use Firebase library to configure APIs
    FirebaseApp.configure()

    Obiettivo-C

    // Use Firebase library to configure APIs
    [FIRApp configure];

Androide

Aggiungere la dipendenza per gli impianti Firebase Android SDK per il modulo (a livello di app) File Gradle (di solito app/build.gradle ):

implementation 'com.google.firebase:firebase-installations:17.0.1'

JavaScript

A seconda di come l'applicazione web è ospitato, la configurazione può essere gestito automaticamente o potrebbe essere necessario aggiornare il vostro oggetto di configurazione Firebase .

Ad esempio, se si aggiungono le dipendenze in index.html, aggiungere la dipendenza nell'elemento <head>:

<script src="/__/firebase/9.8.1/firebase-installations.js"></script>

svolazzare

  1. Dalla directory principale del progetto Flutter, eseguire il seguente comando per installare impianti Firebase plug:

    flutter pub add firebase_app_installations
    
  2. Rigenerare il progetto:

    flutter run
    
  3. Importare le installazioni Firebase plugin:

    import 'package:firebase_app_installations/firebase_app_installations.dart';
    

Eliminare un'installazione Firebase

I dati legato a un'installazione Firebase non è generalmente di identificazione personale. Ancora, può essere utile per dare agli utenti la possibilità di gestire ed eliminare tali dati.

Gli ID di installazione Firebase sono diversi per ogni installazione di ogni applicazione; diverse applicazioni sullo stesso dispositivo hanno diversi ID installazione Firebase. Gli ID di installazione Firebase identificare installazioni di applicazioni e dati legati a quelle installazioni di applicazioni.

Quando si elimina un ID di installazione, i dati legati a questo ID di installazione viene rimosso da sistemi live e di backup di tutti i servizi Firebase che utilizzano gli ID di installazione Firebase per identificare gli impianti entro 180 giorni. Questo processo è descritto ad un alto livello in Google dichiarazione sulla soppressione e la ritenzione .

A meno che non si disattiva tutti i servizi FID generano nella vostra app, FIS crea un nuovo ID nel giro di pochi giorni. Firebase considera l'ID appena creato per essere una nuova installazione Firebase, e non associa con l'ID precedente o dati in qualsiasi modo.

Eliminare un FID con una chiamata API client

Per FID di eliminazione generati dai servizi Firebase, chiamare il metodo appropriato dagli impianti Firebase SDK:

Veloce

Installations.installations().delete { error in
  if let error = error {
    print("Error deleting installation: \(error)")
    return
  }
  print("Installation deleted");
}

Obiettivo-C

[[FIRInstallations installations] deleteWithCompletion:^(NSError *error) {
   if (error != nil) {
     NSLog(@"Error deleting Installation %@", error);
     return;
   }
   NSLog(@"Installation deleted");
}];

Java

FirebaseInstallations.getInstance().delete()
        .addOnCompleteListener(new OnCompleteListener<Void>() {
    @Override
    public void onComplete(@NonNull Task<Void> task) {
        if (task.isSuccessful()) {
            Log.d("Installations", "Installation deleted");
        } else {
            Log.e("Installations", "Unable to delete Installation");
        }
    }
});

Kotlin+KTX

FirebaseInstallations.getInstance().delete().addOnCompleteListener { task ->
    if (task.isComplete) {
        Log.d("Installations", "Installation deleted")
    }  else {
        Log.e("Installations", "Unable to delete Installation")
    }
}

JavaScript

await firebase.installations().delete();

Dart

await FirebaseInstallations.instance.delete();

Eliminare un FID con una chiamata API di server

Per eliminare un FID con una chiamata API di server, aggiungere il Firebase Admin SDK al server , se non l'hai già.

Una volta che l'SDK viene aggiunto, FID di eliminazione attraverso una chiamata alla funzione di cancellazione nella lingua di propria scelta (nota: Fatta eccezione per Node.js, questi metodi riflettono ID istanza di denominazione Tuttavia, tutti in realtà eliminare il FID quando chiamato con qualsiasi corrente Firebase. SDK).

Node.js

// An FIDsent from a client service SDK
const idToDelete = 'eyJhbGciOiJFUzI1N_iIs5';

admin.installations().deleteInstallation(idToDelete);

Java

// An FID sent from a client service SDK
String idToDelete = "eyJhbGciOiJFUzI1N_iIs5";

FirebaseInstanceId.getInstance().deleteInstanceIdAsync(idToDelete).get();

Pitone

  from firebase_admin import instance_id

  # An FID sent from a client service SDK
  id_to_delete = 'eyJhbGciOiJFUzI1N_iIs5'

  instance_id.delete_instance_id(id_to_delete)

andare

client, err := app.InstanceId(ctx)
if err != nil {
  log.Fatalln("error initializing client", err)
}

iidToDelete := "eyJhbGciOiJFUzI1N_iIs5"
if err := client.DeleteInstanceId(ctx, iidToDelete); err != nil {
  log.Fatalln("error deleting FID", err)
}

Quando si elimina un ID di installazione Firebase con una chiamata API di server, servizi Firebase avviare il processo per eliminare i dati legata a quella ID di installazione, smetterà di accettare nuovi dati per tale ID nel corso di 1-2 giorni, e poi notificare l'applicazione client che l'ID è stato eliminato. Fino Firebase notifica l'applicazione client, alcuni dei servizi e della applicazione potrebbe ancora colpire l'ID, ad esempio, l'installazione Firebase potrebbe continuare a ricevere le notifiche FCM per alcune ore.

Se si desidera eliminare l'attuale ID di installazione Firebase e subito utilizzare i servizi Firebase con una nuova, ID estranei, utilizzare l'API client per gestire l'eliminazione.

Recupera client di identificatori

Se si dispone di un requisito per identificare particolari installazioni della tua app, è possibile farlo recuperando l'ID di installazione Firebase. Ad esempio, per eseguire test durante lo sviluppo Firebase in-app di messaggistica, è possibile identificare e selezionare il dispositivo di test corretto utilizzando il suo ID di installazione Firebase.

Per recuperare un ID di installazione Firebase:

Veloce

Installations.installations().installationID { (id, error) in
  if let error = error {
    print("Error fetching id: \(error)")
    return
  }
  guard let id = id else { return }
  print("Installation ID: \(id)")
}

Obiettivo-C

[[FIRInstallations installations] installationIDWithCompletion:^(NSString *identifier, NSError *error) {
  if (error != nil) {
    NSLog(@"Error fetching Installation ID %@", error);
    return;
  }
  NSLog(@"Installation ID: %@", identifier);
}];

Java

FirebaseInstallations.getInstance().getId()
        .addOnCompleteListener(new OnCompleteListener<String>() {
    @Override
    public void onComplete(@NonNull Task<String> task) {
        if (task.isSuccessful()) {
            Log.d("Installations", "Installation ID: " + task.getResult());
        } else {
            Log.e("Installations", "Unable to get Installation ID");
        }
    }
});

Kotlin+KTX

FirebaseInstallations.getInstance().id.addOnCompleteListener { task ->
    if (task.isSuccessful) {
        Log.d("Installations", "Installation ID: " + task.result)
    } else {
        Log.e("Installations", "Unable to get Installation ID")
    }
}

JavaScript

const installationId = await firebase.installations().getId();
console.log(installationId);

Dart

String id = await FirebaseInstallations.instance.getId();

Recupera gettoni installazione Auth

servizi Firebase possono autenticare le installazioni Firebase con auth gettoni recuperati da FIS. Ad esempio, quando si progetta / test A B per Configurazione remota, è possibile autenticare un dispositivo di test mirato utilizzando un'installazione di autenticazione token.

Un token di autenticazione installazione è un formato di breve durata portatore gettone in JSON web di token (JWT) contenente le seguenti informazioni per l'installazione:

  • L'ID di installazione Firebase
  • Il progetto associato ( projectNumber )
  • L'associato Firebase applicazione ID ( appId )
  • la data di scadenza del gettone

Un token di autenticazione di installazione non può essere revocata, e rimane valido fino alla data di scadenza. Il valore di default di token di vita è di una settimana.

Per recuperare un auth installazione token:

Veloce

Installations.installations().authTokenForcingRefresh(true, completion: { (result, error) in
  if let error = error {
    print("Error fetching token: \(error)")
    return
  }
  guard let result = result else { return }
  print("Installation auth token: \(result.authToken)")
})

Obiettivo-C

[[FIRInstallations installations] authTokenForcingRefresh:true
                                               completion:^(FIRInstallationsAuthTokenResult *result, NSError *error) {
  if (error != nil) {
    NSLog(@"Error fetching Installation token %@", error);
    return;
  }
  NSLog(@"Installation auth token: %@", [result authToken]);
}];

Java

FirebaseInstallations.getInstance().getToken(/* forceRefresh */true)
        .addOnCompleteListener(new OnCompleteListener<InstallationTokenResult>() {
    @Override
    public void onComplete(@NonNull Task<InstallationTokenResult> task) {
        if (task.isSuccessful() && task.getResult() != null) {
            Log.d("Installations", "Installation auth token: " + task.getResult().getToken());
        } else {
            Log.e("Installations", "Unable to get Installation auth token");
        }
    }
});

Kotlin+KTX

FirebaseInstallations.getInstance().getToken(/* forceRefresh */ true)
    .addOnCompleteListener { task ->
        if (task.isSuccessful) {
            Log.d("Installations", "Installation auth token: " + task.result?.token)
        } else {
            Log.e("Installations", "Unable to get Installation auth token")
        }
    }

JavaScript

const installationToken = await firebase.installations()
    .getToken(/* forceRefresh */ true);
console.log(installationToken);

Dart

String token = await FirebaseInstallations.instance.getToken();

Monitorare il ciclo di vita Firebase installazione ID

Durante il normale funzionamento di un app, gli ID di installazione Firebase (FID) non richiedono una particolare sorveglianza. Tuttavia, le applicazioni che esplicitamente recuperare e utilizzare FID dovrebbero aggiungere logica per monitorare il potenziale cancellazione o la rotazione del FID. Qui ci sono alcuni casi in cui FID potrebbe essere eliminato o ruotato:

  • Disinstallazione o reinstallazione dell'app, ad esempio quando un utente finale installa su un nuovo dispositivo.
  • L'utente finale cancella la cache dell'app o il dispositivo.
  • FID eliminazione viene attivato nel backend a causa di applicazione inattività (attualmente la soglia di questo è di 270 giorni di inattività).

Quando le applicazioni sperimentano la rotazione o la cancellazione FID in questo tipo di casi, essi sono assegnati un nuovo FID. Inoltre, l'autenticazione installazione token associato con un FID eliminato viene cancellato, indipendentemente dalla sua propria maturità, e viene sostituita con una nuova installazione di autenticazione token.

Apps può monitorare questi cambiamenti e rispondere di conseguenza.

Per monitorare la rotazione FID:

Veloce

installationIDObserver = NotificationCenter.default.addObserver(
        forName: .InstallationIDDidChange,
        object: nil,
        queue: nil
) { (notification) in
  // Fetch new Installation ID
  self.fetchInstallationToken()
}

Obiettivo-C

__weak __auto_type weakSelf = self;
self.installationIDObserver = [[NSNotificationCenter defaultCenter]
        addObserverForName: FIRInstallationIDDidChangeNotification
                    object:nil
                     queue:nil
                usingBlock:^(NSNotification * _Nonnull notification) {
    // Fetch new Installation ID
    [weakSelf fetchInstallationsID];
}];

Un NSNotification chiamato NSNotificationName.InstallationIDDidChange viene inviato al default NSNotificationCenter ogni volta che viene assegnato un nuovo FID.

Androide

clienti Kotlin e Java dovrebbero aggiungere logica di tentativo di rispondere a chiamate Impossibile recuperare il nuovo FID.

JavaScript

Le applicazioni Web possono iscriversi alla onIdChange gancio.

Ogni volta che viene creato un nuovo FID, la richiamata sottoscritto viene attivato:

await firebase.installations().onIdChange((newId) => {
  console.log(newId);
  // TODO: Handle new installation ID.
});

Dart

FirebaseInstallations.instance.onIdChange.listen((token) {
  print('FID token: $token');
});

Migrazione da ID istanza alle installazioni Firebase

Prima dell'introduzione di impianti Firebase, Firebase invocato l'ID istanza SDK per gli identificatori di installazioni di app. installazioni Firebase offre vantaggi significativi rispetto ID istanza in termini di affidabilità, prestazioni e sicurezza. apps Firebase che dipendono dal ID istanza SDK dovrebbero migrare verso installazioni Firebase.

Il processo di migrazione è diversa in base alla tua app:

  • Applicazioni che non chiamare direttamente le API ID istanza possono migrare da aggiornare le loro versioni SDK . La maggior parte delle applicazioni Firebase rientrano in questa categoria.

  • Le applicazioni che fanno esplicitamente chiamate API al ID istanza deve aggiornare le versioni SDK e modifiche al codice make a sostituire i metodi ID istanza con le loro installazioni Firebase o equivalenti FCM. Se la vostra applicazione utilizza ID istanza per recuperare FCM gettoni di registrazione o esplicitamente utilizza ID istanza alle istanze app di destinazione o per qualsiasi altro scopo, è necessario aggiornare il codice dell'applicazione.

Attualmente, FIS è compatibile-con l'eredità identificativo Firebase ID istanza. Eliminazione di un IID è un metodo alternativo di richiedere la cancellazione dei dati con questi Firebase SDK:

  • IOS 6.14.0 e abbassare
  • SDK Android precedenti a 27 febbraio 2020

Ciò significa che le applicazioni non sono tenuti a migrare verso impianti Firebase; Tuttavia, ciò è altamente raccomandato.

L'aggiornamento a versioni minime SDK per gli impianti Firebase

Per migrare da ID istanza alle installazioni Firebase, assicurarsi che le applicazioni utilizzano almeno i numeri di versione minimi elencati dei seguenti Firebase SDK:

Firebase SDK Android versione minima Versione minima iOS
Firebase Cloud Messaging v20.3.0 v6.34.0
Configurazione a distanza v19.2.0 v6.24.0
Google Analytics per Firebase \ (Misura SDK) v17.4.4 v6.18.0
In-app di messaggistica v19.0.7 v6.24.0
Monitoraggio delle prestazioni v19.0.8 v6.21.0
Crashlytics v17.2.1 v6.23.0
ML Kit v22.1.2 v6.28.0

Aggiornamento del codice che chiama esplicitamente ID istanza API

Se il vostro Android o Apple applicazione utilizza direttamente istanza metodi ID SDK, è possibile sostituire che l'utilizzo con alternative identiche nelle installazioni Firebase SDK o il FCM SDK.

Recupero di un identificatore

I metodi per ottenere gli ID di istanza sono sostituiti con metodi per ottenere un ID installazioni. Per esempio:

Prima di

Veloce

Messaging.messaging().token { token, error in
  if let error = error {
    print("Error fetching remote FCM registration token: \(error)")
  } else if let token = token {
    print("Remote instance ID token: \(token)")
    self.remoteFCMTokenMessage.text = "Remote FCM registration token: \(token)"
  }
}

Obiettivo-C

[[FIRMessaging messaging] tokenWithCompletion:^(NSString * _Nullable token, NSError * _Nullable error) {
   if (error != nil) {
     NSLog(@"Error fetching the remote FCM registration token: %@", error);
   } else {
     NSLog(@"Remote FCM registration token: %@", token);
     NSString* message =
       [NSString stringWithFormat:@"FCM registration token: %@", token];
     self.remoteFCMTokenMessage.text = message;
   }
 }];

Java

FirebaseInstanceId.getInstance().getInstanceId()
        .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
            @Override
            public void onComplete(@NonNull Task<InstanceIdResult> task) {
                Log.d("IID_TOKEN", task.getResult().getToken());
            }
        });

Kotlin+KTX

FirebaseInstanceId.getInstance().instanceId
        .addOnSuccessListener { result ->
            Log.d("IID_TOKEN", result.token)
        }

Dopo

Veloce

Installations.installations().installationID { (id, error) in
  if let error = error {
    print("Error fetching id: \(error)")
    return
  }
  guard let id = id else { return }
  print("Installation ID: \(id)")
}

Obiettivo-C

[[FIRInstallations installations] installationIDWithCompletion:^(NSString *identifier, NSError *error) {
  if (error != nil) {
    NSLog(@"Error fetching Installation ID %@", error);
    return;
  }
  NSLog(@"Installation ID: %@", identifier);
}];

Java

FirebaseInstallations.getInstance().getId()
        .addOnCompleteListener(new OnCompleteListener<String>() {
    @Override
    public void onComplete(@NonNull Task<String> task) {
        if (task.isSuccessful()) {
            Log.d("Installations", "Installation ID: " + task.getResult());
        } else {
            Log.e("Installations", "Unable to get Installation ID");
        }
    }
});

Kotlin+KTX

FirebaseInstallations.getInstance().id.addOnCompleteListener { task ->
    if (task.isSuccessful) {
        Log.d("Installations", "Installation ID: " + task.result)
    } else {
        Log.e("Installations", "Unable to get Installation ID")
    }
}

Eliminazione di un identificatore

I metodi per eliminare gli ID istanza vengono sostituiti con i metodi per eliminare gli ID di installazione Firebase. Per esempio:

Prima di

Veloce

InstanceID.instanceID().deleteID { error in
  if let error = error {
    print("Error deleting instance ID: \(error)")
  }
}

Obiettivo-C

[FIRInstanceID instanceID] deleteIDWithHandler:^(NSError *error) {
  if error != nil {
    NSLog(@"Error deleting instance ID: %@", error);
  }
}];

Androide

FirebaseInstanceId.deleteInstanceId();

Dopo

Veloce

func delete(completion: @escaping (Error?) -> Void)

Obiettivo-C

- (void)deleteWithCompletion:(nonnull void (^)(NSError *_Nullable))completion;

Java

FirebaseInstallations.getInstance().delete()
        .addOnCompleteListener(new OnCompleteListener<Void>() {
    @Override
    public void onComplete(@NonNull Task<Void> task) {
        if (task.isSuccessful()) {
            Log.d("Installations", "Installation deleted");
        } else {
            Log.e("Installations", "Unable to delete Installation");
        }
    }
});

Kotlin+KTX

FirebaseInstallations.getInstance().delete().addOnCompleteListener { task ->
    if (task.isComplete) {
        Log.d("Installations", "Installation deleted")
    }  else {
        Log.e("Installations", "Unable to delete Installation")
    }
}

Recupero di un token di registrazione FCM

Prima dell'introduzione di Firebase impianti, i clienti FCM recuperate gettoni di registrazione da ID istanza. Ora, la FCM SDK fornisce i metodi per recuperare il token di registrazione.

Prima di

Java

FirebaseInstanceId.getInstance().getInstanceId()
        .addOnCompleteListener(new OnCompleteListener<InstanceIdResult>() {
            @Override
            public void onComplete(@NonNull Task<InstanceIdResult> task) {
                if (!task.isSuccessful()) {
                    Log.w(TAG, "getInstanceId failed", task.getException());
                    return;
                }

                // Get new Instance ID token
                String token = task.getResult().getToken();

                // Log and toast
                String msg = getString(R.string.msg_token_fmt, token);
                Log.d(TAG, msg);
                Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
            }
        });

Kotlin+KTX

FirebaseInstanceId.getInstance().instanceId
        .addOnCompleteListener(OnCompleteListener { task ->
            if (!task.isSuccessful) {
                Log.w(TAG, "getInstanceId failed", task.exception)
                return@OnCompleteListener
            }

            // Get new Instance ID token
            val token = task.result?.token

            // Log and toast
            val msg = getString(R.string.msg_token_fmt, token)
            Log.d(TAG, msg)
            Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
        })

Veloce

Messaging.messaging().token { token, error in
  if let error = error {
    print("Error fetching remote FCM registration token: \(error)")
  } else if let token = token {
    print("Remote instance ID token: \(token)")
    self.remoteFCMTokenMessage.text = "Remote FCM registration token: \(token)"
  }
}

Obiettivo-C

[[FIRMessaging messaging] tokenWithCompletion:^(NSString * _Nullable token, NSError * _Nullable error) {
   if (error != nil) {
     NSLog(@"Error fetching the remote FCM registration token: %@", error);
   } else {
     NSLog(@"Remote FCM registration token: %@", token);
     NSString* message =
       [NSString stringWithFormat:@"FCM registration token: %@", token];
     self.remoteFCMTokenMessage.text = message;
   }
 }];

Dopo

Java

FirebaseMessaging.getInstance().getToken()
    .addOnCompleteListener(new OnCompleteListener<String>() {
        @Override
        public void onComplete(@NonNull Task<String> task) {
          if (!task.isSuccessful()) {
            Log.w(TAG, "Fetching FCM registration token failed", task.getException());
            return;
          }

          // Get new FCM registration token
          String token = task.getResult();

          // Log and toast
          String msg = getString(R.string.msg_token_fmt, token);
          Log.d(TAG, msg);
          Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
        }
    });

Kotlin+KTX

FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task ->
    if (!task.isSuccessful) {
        Log.w(TAG, "Fetching FCM registration token failed", task.exception)
        return@OnCompleteListener
    }

    // Get new FCM registration token
    val token = task.result

    // Log and toast
    val msg = getString(R.string.msg_token_fmt, token)
    Log.d(TAG, msg)
    Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show()
})

Veloce

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)"
  }
}

Obiettivo-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;
  }
}];