Configura un'app client Firebase Cloud Messaging su Android

Per scrivere il vostro cliente app Firebase nube Messaging Android, utilizzare l' FirebaseMessaging API e Android Studio 1.4 o superiore con Gradle. Le istruzioni contenute in questa pagina presuppongono di aver completato la procedura per l'aggiunta di Firebase al progetto Android .

I client FCM richiedono dispositivi con Android 4.1 o versioni successive su cui è installata anche l'app Google Play Store o un emulatore con Android 4.1 con API di Google. Tieni presente che non sei limitato a distribuire le tue app Android tramite Google Play Store.

Configura l'SDK

Questa sezione tratta le attività che potresti aver completato se hai già abilitato altre funzionalità di Firebase per la tua app.

Prima di iniziare

  • Installare o aggiornare Android Studio alla sua ultima versione.

  • Assicurati che il tuo progetto soddisfi questi requisiti:

    • Ha come target il livello API 16 (Jelly Bean) o successivo
    • Utilizza Gradle 4.1 o successivo
    • Utilizza Jetpack (AndroidX) , che comprende soddisfare questi requisiti di versione:
      • com.android.tools.build:gradle V3.2.1 o successivo
      • compileSdkVersion 28 o successivo
  • Configurare un dispositivo fisico o utilizzare un emulatore per eseguire la vostra applicazione.
    Si noti che Firebase SDK con una dipendenza da Google Play Services richiedere al dispositivo o emulatore di avere Google Play Services installati.

  • Accedi al Firebase utilizzando il tuo account Google.

Se non si dispone già di un progetto Android e volete solo provare un prodotto Firebase, è possibile scaricare uno dei nostri esempi rapidi .

Crea un progetto Firebase

Prima di poter aggiungere Firebase alla tua app Android, devi creare un progetto Firebase per connetterti alla tua app Android. Visita Capire Firebase progetti per saperne di più su progetti Firebase.

Registra la tua app con Firebase

Per utilizzare Firebase nella tua app Android, devi registrare la tua app con il tuo progetto Firebase. La registrazione della tua app viene spesso chiamata "aggiunta" della tua app al tuo progetto.

  1. Vai alla console Firebase .

  2. Al centro della pagina panoramica del progetto, fare clic sull'icona di Android ( ) o aggiungere app per lanciare il flusso di lavoro di installazione.

  3. Inserire il nome del pacchetto della tua app nel campo nome del pacchetto Android.

  4. (Facoltativo) Immettere altre informazioni app: App nickname e Debug firma certificato SHA-1.

  5. Fare clic su Registra app.

Aggiungi un file di configurazione Firebase

  1. Aggiungi il file di configurazione di Firebase Android alla tua app:

    1. Fare clic su Download google-services.json per ottenere il file di configurazione Firebase Android ( google-services.json ).

    2. Sposta il tuo file di configurazione nella directory del modulo (a livello di app) della tua app.

  2. Per abilitare Firebase prodotti nella vostra app, aggiungere i google-servizi plug ai file Gradle.

    1. In root-level (a livello di progetto) di file Gradle ( build.gradle ), aggiungere le regole per includere il plug-in di Google Servizi Gradle. Verifica di avere anche il repository Maven di Google.

      buildscript {
      
        repositories {
          // Check that you have the following line (if not, add it):
          google()  // Google's Maven repository
        }
      
        dependencies {
          // ...
      
          // Add the following line:
          classpath 'com.google.gms:google-services:4.3.8'  // Google Services plugin
        }
      }
      
      allprojects {
        // ...
      
        repositories {
          // Check that you have the following line (if not, add it):
          google()  // Google's Maven repository
          // ...
        }
      }
      
    2. Nel modulo (a livello di app) File Gradle (di solito app/build.gradle ), applicare il plug-in di Google Servizi Gradle:

      apply plugin: 'com.android.application'
      // Add the following line:
      apply plugin: 'com.google.gms.google-services'  // Google Services plugin
      
      android {
        // ...
      }
      

Aggiungi gli SDK Firebase alla tua app

  1. Utilizzando la Firebase Android BoM , dichiarare la dipendenza per la libreria Firebase Nuvola Messaging Android nel modulo (a livello di app) File Gradle (di solito app/build.gradle ).

    Per un'esperienza ottimale con Firebase nube di messaggistica, si consiglia consentendo di Google Analytics nel progetto Firebase e aggiungendo il Firebase SDK per Google Analytics per la vostra applicazione.

    Giava

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:28.3.0')
    
        // Declare the dependencies for the Firebase Cloud Messaging and Analytics libraries
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-messaging'
        implementation 'com.google.firebase:firebase-analytics'
    }
    

    Usando il Firebase Android BoM , la vostra applicazione sarà sempre utilizzare versioni compatibili delle librerie Firebase Android.

    (Alternativa) Dichiarare Firebase dipendenze delle librerie senza utilizzare la distinta

    Se scegli di non utilizzare Firebase BoM, devi specificare ogni versione della libreria Firebase nella relativa riga di dipendenza.

    Si noti che se si utilizzano più librerie Firebase nella vostra app, ti consigliamo di utilizzare la distinta di gestire versioni della libreria, che assicura che tutte le versioni sono compatibili.

    dependencies {
        // Declare the dependencies for the Firebase Cloud Messaging and Analytics libraries
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-messaging:22.0.0'
        implementation 'com.google.firebase:firebase-analytics:19.0.0'
    }
    

    Kotlin+KTX

    dependencies {
        // Import the BoM for the Firebase platform
        implementation platform('com.google.firebase:firebase-bom:28.3.0')
    
        // Declare the dependencies for the Firebase Cloud Messaging and Analytics libraries
        // When using the BoM, you don't specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-messaging-ktx'
        implementation 'com.google.firebase:firebase-analytics-ktx'
    }
    

    Usando il Firebase Android BoM , la vostra applicazione sarà sempre utilizzare versioni compatibili delle librerie Firebase Android.

    (Alternativa) Dichiarare Firebase dipendenze delle librerie senza utilizzare la distinta

    Se scegli di non utilizzare Firebase BoM, devi specificare ogni versione della libreria Firebase nella relativa riga di dipendenza.

    Si noti che se si utilizzano più librerie Firebase nella vostra app, ti consigliamo di utilizzare la distinta di gestire versioni della libreria, che assicura che tutte le versioni sono compatibili.

    dependencies {
        // Declare the dependencies for the Firebase Cloud Messaging and Analytics libraries
        // When NOT using the BoM, you must specify versions in Firebase library dependencies
        implementation 'com.google.firebase:firebase-messaging-ktx:22.0.0'
        implementation 'com.google.firebase:firebase-analytics-ktx:19.0.0'
    }
    

  2. Sincronizza la tua app per assicurarti che tutte le dipendenze abbiano le versioni necessarie.

Modifica il manifest dell'app

Aggiungi quanto segue al manifest della tua app:

  • Un servizio che si estende FirebaseMessagingService . Ciò è necessario se si desidera gestire qualsiasi messaggio oltre alla ricezione di notifiche sulle app in background. Per ricevere notifiche nelle app in primo piano, ricevere payload di dati, inviare messaggi upstream e così via, è necessario estendere questo servizio.
  • <service
        android:name=".java.MyFirebaseMessagingService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
  • (Facoltativo) All'interno del componente dell'applicazione, elementi di metadati per impostare un'icona e un colore di notifica predefiniti. Android utilizza questi valori ogni volta che i messaggi in arrivo non impostano in modo esplicito l'icona o il colore.
  • <!-- Set custom default icon. This is used when no icon is set for incoming notification messages.
         See README(https://goo.gl/l4GJaQ) for more. -->
    <meta-data
        android:name="com.google.firebase.messaging.default_notification_icon"
        android:resource="@drawable/ic_stat_ic_notification" />
    <!-- Set color used with incoming notification messages. This is used when no color is set for the incoming
         notification message. See README(https://goo.gl/6BKBk7) for more. -->
    <meta-data
        android:name="com.google.firebase.messaging.default_notification_color"
        android:resource="@color/colorAccent" />
  • (Facoltativa) da Android 8.0 (livello di API 26) e superiore, canali di notifica sono supportati e consigliato. FCM fornisce un canale di notifica predefinito con impostazioni di base. Se si preferisce creare e utilizzare il proprio canale di default, insieme default_notification_channel_id all'ID del vostro oggetto canale di notifica come mostrato; FCM utilizzerà questo valore ogni volta che i messaggi in arrivo non impostano esplicitamente un canale di notifica. Per ulteriori informazioni, vedere Gestire canali di notifica .
  • <meta-data
        android:name="com.google.firebase.messaging.default_notification_channel_id"
        android:value="@string/default_notification_channel_id" />

Accedi al token di registrazione del dispositivo

All'avvio iniziale dell'app, l'SDK di FCM genera un token di registrazione per l'istanza dell'app client. Se si vuole indirizzare singoli dispositivi o creare gruppi di dispositivi, è necessario accedere a questo token estendendo FirebaseMessagingService e ridefinendo onNewToken .

Questa sezione descrive come recuperare il token e come monitorare le modifiche al token. Poiché il token potrebbe essere ruotato dopo l'avvio iniziale, si consiglia vivamente di recuperare l'ultimo token di registrazione aggiornato.

Il token di registrazione può cambiare quando:

  • L'app viene ripristinata su un nuovo dispositivo
  • L'utente disinstalla/reinstalla l'app
  • L'utente cancella i dati dell'app.

Recupera il token di registrazione corrente

Quando è necessario recuperare il token corrente, chiamare FirebaseMessaging.getInstance().getToken() :

Giava

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

Monitora la generazione di token

I onNewToken incendi ripetuta ogni volta che viene generato un nuovo token.

Giava

/**
 * There are two scenarios when onNewToken is called:
 * 1) When a new token is generated on initial app startup
 * 2) Whenever an existing token is changed
 * Under #2, there are three scenarios when the existing token is changed:
 * A) App is restored to a new device
 * B) User uninstalls/reinstalls the app
 * C) User clears app data
 */
@Override
public void onNewToken(String token) {
    Log.d(TAG, "Refreshed token: " + token);

    // If you want to send messages to this application instance or
    // manage this apps subscriptions on the server side, send the
    // FCM registration token to your app server.
    sendRegistrationToServer(token);
}

Kotlin+KTX

/**
 * Called if the FCM registration token is updated. This may occur if the security of
 * the previous token had been compromised. Note that this is called when the
 * FCM registration token is initially generated so this is where you would retrieve the token.
 */
override fun onNewToken(token: String) {
    Log.d(TAG, "Refreshed token: $token")

    // If you want to send messages to this application instance or
    // manage this apps subscriptions on the server side, send the
    // FCM registration token to your app server.
    sendRegistrationToServer(token)
}

Dopo aver ottenuto il token, puoi inviarlo al server dell'app e archiviarlo utilizzando il metodo preferito.

Controlla i servizi di Google Play

Le app che si basano sull'SDK di Play Services devono sempre controllare il dispositivo per un APK di Google Play Services compatibile prima di accedere alle funzionalità di Google Play Services. Si consiglia di farlo in due luoghi: nella propria attività principale onCreate() metodo e nella sua onResume() metodo. Il controllo in onCreate() assicura che l'applicazione non può essere utilizzato senza una verifica di successo. Il controllo in onResume() assicura che se l'utente ritorna alla applicazione in esecuzione attraverso altri mezzi, ad esempio attraverso il pulsante Indietro, il controllo viene ancora eseguita.

Se il dispositivo non dispone di una versione compatibile di Google Play Services, la vostra applicazione può chiamare GoogleApiAvailability.makeGooglePlayServicesAvailable() per consentire agli utenti di scaricare Google Play Services dal Play Store.

Impedisci l'inizializzazione automatica

Quando viene generato un token di registrazione FCM, la libreria carica l'identificatore e i dati di configurazione su Firebase. Se si preferisce evitare che autogenerazione modo, disattivare la raccolta di Analytics e l'inizializzazione automatica FCM (è necessario disattivare entrambi) con l'aggiunta di questi valori metadati ai AndroidManifest.xml :

<meta-data
    android:name="firebase_messaging_auto_init_enabled"
    android:value="false" />
<meta-data
    android:name="firebase_analytics_collection_enabled"
    android:value="false" />

Per riattivare l'inizializzazione automatica di FCM, effettuare una chiamata di runtime:

Giava

FirebaseMessaging.getInstance().setAutoInitEnabled(true);

Kotlin+KTX

Firebase.messaging.isAutoInitEnabled = true

Per riattivare la raccolta Analytics, chiamare il setAnalyticsCollectionEnabled() metodo della FirebaseAnalytics di classe. Per esempio:

setAnalyticsCollectionEnabled(true);

Questi valori persistono tra i riavvii dell'app una volta impostati.

Prossimi passi

Dopo l'applicazione client è configurato, si è pronti per iniziare a inviare messaggi a valle con il compositore di notifiche . Questa funzionalità è dimostrato nel esempio delle Guide rapide , che si può scaricare, corsa, e la revisione.

Per aggiungere un altro comportamento più avanzato alla tua app, puoi dichiarare un filtro di intent e implementare un'attività per rispondere ai messaggi in arrivo. Per i dettagli, vedere le guide per l'invio di messaggi da un server app:

Tenete a mente che, per sfruttare queste funzioni, avrete bisogno di un server di attuazione e le procotols del server (HTTP o XMPP), o di un'implementazione del Admin SDK .