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

Skonfiguruj aplikację kliencką Firebase Cloud Messaging na Androida

Klienci FCM wymagają urządzeń z systemem Android 4.4 lub nowszym, na których zainstalowano również aplikację Sklep Google Play, lub emulatora z systemem Android 4.4 z interfejsami Google API. Pamiętaj, że nie ograniczasz się do wdrażania aplikacji na Androida za pośrednictwem Sklepu Google Play.

Skonfiguruj pakiet SDK

W tej sekcji opisano zadania, które mogłeś wykonać, jeśli masz już włączone inne funkcje Firebase w swojej aplikacji. Jeśli jeszcze tego nie zrobiłeś, dodaj Firebase do swojego projektu na Androida

Edytuj manifest aplikacji

Dodaj następujące elementy do manifestu aplikacji:

  • Usługa rozszerzająca FirebaseMessagingService . Jest to wymagane, jeśli chcesz wykonywać dowolną obsługę wiadomości poza otrzymywaniem powiadomień w aplikacjach w tle. Aby otrzymywać powiadomienia w aplikacjach na pierwszym planie, otrzymywać ładunek danych, wysyłać wiadomości upstream itd., musisz rozszerzyć tę usługę.
  • <service
        android:name=".java.MyFirebaseMessagingService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
  • (Opcjonalnie) W komponencie aplikacji elementy metadanych umożliwiające ustawienie domyślnej ikony i koloru powiadomienia. System Android używa tych wartości, gdy wiadomości przychodzące nie ustawiają jawnie ikony ani koloru.
  • <!-- 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" />
  • (Opcjonalnie) Od wersji Androida 8.0 (poziom API 26) i nowszych, kanały powiadomień są obsługiwane i zalecane. FCM zapewnia domyślny kanał powiadomień z podstawowymi ustawieniami. Jeśli wolisz tworzyć i używać własnego kanału domyślnego, ustaw default_notification_channel_id na identyfikator obiektu kanału powiadomień, jak pokazano; FCM użyje tej wartości za każdym razem, gdy wiadomości przychodzące nie ustawiają jawnie kanału powiadomień. Aby dowiedzieć się więcej, zobacz Zarządzanie kanałami powiadomień .
  • <meta-data
        android:name="com.google.firebase.messaging.default_notification_channel_id"
        android:value="@string/default_notification_channel_id" />

Uzyskaj dostęp do tokena rejestracji urządzenia

Podczas początkowego uruchamiania aplikacji FCM SDK generuje token rejestracji dla wystąpienia aplikacji klienckiej. Jeśli chcesz kierować reklamy na pojedyncze urządzenia lub tworzyć grupy urządzeń, musisz uzyskać dostęp do tego tokena, rozszerzając FirebaseMessagingService i zastępując onNewToken .

W tej sekcji opisano, jak pobrać token i jak monitorować zmiany w tokenie. Ponieważ token może zostać obrócony po pierwszym uruchomieniu, zdecydowanie zaleca się pobranie najnowszego zaktualizowanego tokena rejestracji.

Token rejestracyjny może ulec zmianie, gdy:

  • Aplikacja zostanie przywrócona na nowym urządzeniu
  • Użytkownik odinstalowuje/ponownie instaluje aplikację
  • Użytkownik usuwa dane aplikacji.

Pobierz aktualny token rejestracji

Kiedy musisz pobrać bieżący token, wywołaj FirebaseMessaging.getInstance().getToken() :

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

Monitoruj generowanie tokenów

Wywołanie zwrotne onNewToken jest uruchamiane za każdym razem, gdy generowany jest nowy token.

Java

/**
 * 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)
}

Po uzyskaniu tokena możesz wysłać go na serwer aplikacji i przechowywać przy użyciu preferowanej metody.

Sprawdź usługi Google Play

Aplikacje korzystające z pakietu SDK Usług Play powinny zawsze sprawdzać urządzenie pod kątem zgodnego pakietu APK Usług Google Play przed uzyskaniem dostępu do funkcji Usług Google Play. Zaleca się to zrobić w dwóch miejscach: w metodzie onCreate() głównej aktywności oraz w onResume() . onCreate() zapewnia, że ​​aplikacja nie może być używana bez pomyślnego sprawdzenia. Sprawdzenie w onResume() zapewnia, że ​​jeśli użytkownik powróci do uruchomionej aplikacji w inny sposób, na przykład za pomocą przycisku Wstecz, sprawdzenie jest nadal wykonywane.

Jeśli urządzenie nie ma zgodnej wersji usług Google Play, Twoja aplikacja może wywołać GoogleApiAvailability.makeGooglePlayServicesAvailable() , aby umożliwić użytkownikom pobieranie usług Google Play ze Sklepu Play.

Zapobiegaj automatycznej inicjalizacji

Po wygenerowaniu tokena rejestracji FCM biblioteka przesyła identyfikator i dane konfiguracyjne do Firebase. Jeśli wolisz zapobiegać autogenerowaniu tokenów, wyłącz zbieranie Analytics i automatyczną inicjalizację FCM (musisz wyłączyć oba), dodając te wartości metadanych do 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" />

Aby ponownie włączyć automatyczne inicjowanie FCM, wykonaj wywołanie w czasie wykonywania:

Java

FirebaseMessaging.getInstance().setAutoInitEnabled(true);

Kotlin+KTX

Firebase.messaging.isAutoInitEnabled = true

Aby ponownie włączyć gromadzenie danych Analytics, wywołaj metodę setAnalyticsCollectionEnabled() klasy FirebaseAnalytics . Na przykład:

setAnalyticsCollectionEnabled(true);

Te wartości są zachowywane po ponownym uruchomieniu aplikacji po ustawieniu.

Następne kroki

Po skonfigurowaniu aplikacji klienckiej możesz rozpocząć wysyłanie kolejnych wiadomości za pomocą kompozytora powiadomień . Ta funkcja jest pokazana w przykładzie Szybki start , który można pobrać, uruchomić i przejrzeć.

Aby dodać inne, bardziej zaawansowane zachowanie do swojej aplikacji, możesz zadeklarować filtr intencji i zaimplementować działanie odpowiadające na przychodzące wiadomości. Aby uzyskać szczegółowe informacje, zobacz przewodniki dotyczące wysyłania wiadomości z serwera aplikacji:

Pamiętaj, że aby skorzystać z tych funkcji, potrzebujesz implementacji serwera i protokołów serwera (HTTP lub XMPP) lub implementacji pakietu Admin SDK .