0Pricing
Android Academy · Lekcja

Wysyłanie za pomocą Cloud Messaging

Wysyłaj i odbieraj powiadomienia FCM

Wysyłanie za pomocą Cloud Messaging to bezpłatna lekcja Android Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Android Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Android Academy zawiera 4 lekcji w sumie.

Czym jest Cloud Messaging?

Firebase Cloud Messaging (FCM) dostarcza do aplikacji powiadomienia push i wiadomości z danymi — nawet gdy aplikacja jest zamknięta.

Przepływ jest prosty:

  • Każda instalacja aplikacji otrzymuje unikalny token rejestracyjny.
  • Serwer (lub konsola Firebase) wysyła wiadomość do tego tokenu (albo do tematu).
  • FCM przekazuje ją do urządzenia, które ją wyświetla lub obsługuje.

Dodawanie zależności Messaging

FCM jest dostarczane w bibliotece firebase-messaging, której wersją zarządza skonfigurowany wcześniej BoM.

Gdy BoM jest obecny, nie trzeba podawać numeru wersji.

// app/build.gradle.kts
dependencies {
    implementation(platform("com.google.firebase:firebase-bom:33.1.0"))
    implementation("com.google.firebase:firebase-messaging")
}

Uprawnienie do powiadomień

W systemie Android 13 (API 33) i nowszych wyświetlanie powiadomień wymaga uprawnienia przyznawanego w czasie działania: POST_NOTIFICATIONS.

Zadeklaruj je w manifeście, a następnie poproś o nie w czasie działania — bez przyznanego uprawnienia powiadomienia zostaną po cichu odrzucone.

<!-- AndroidManifest.xml -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />

Żądanie uprawnienia

Użyj interfejsu Activity Result API, aby w czasie działania poprosić o POST_NOTIFICATIONS. Proś o nie tylko w systemie API 33 lub nowszym; starsze wersje przyznają je niejawnie.

import android.Manifest
import android.os.Build
import androidx.activity.result.contract.ActivityResultContracts

val requestPermission = registerForActivityResult(
    ActivityResultContracts.RequestPermission()
) { granted ->
    println(if (granted) "Notifications allowed" else "Notifications denied")
}

fun askNotificationPermission() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
        requestPermission.launch(Manifest.permission.POST_NOTIFICATIONS)
    }
}

Token rejestracyjny

Każda instalacja ma unikalny token FCM, który identyfikuje ją jako miejsce docelowe. Pobierz go za pomocą Firebase.messaging.token.

Wyślij ten token do backendu, aby mógł wysyłać powiadomienia na konkretne urządzenie. Tokeny mogą się zmieniać, dlatego zawsze traktuj najnowszy jako obowiązujący.

import com.google.firebase.Firebase
import com.google.firebase.messaging.messaging
import kotlinx.coroutines.tasks.await

suspend fun currentToken(): String {
    return Firebase.messaging.token.await()
}

Usługa Messaging

Aby odbierać wiadomości, rozszerz klasę FirebaseMessagingService. Przesłoń metodę onMessageReceived, aby obsługiwać przychodzące dane, oraz onNewToken, aby reagować na zmianę tokenu.

Zarejestruj usługę w manifeście za pomocą filtra intencji FCM.

import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage

class MyFcmService : FirebaseMessagingService() {

    override fun onNewToken(token: String) {
        // Upload the fresh token to your backend
        sendTokenToServer(token)
    }

    override fun onMessageReceived(message: RemoteMessage) {
        val title = message.notification?.title ?: "New message"
        val body = message.notification?.body ?: ""
        showNotification(title, body)
    }

    private fun sendTokenToServer(token: String) { /* ... */ }
    private fun showNotification(title: String, body: String) { /* ... */ }
}

Rejestrowanie usługi

Zadeklaruj usługę w manifeście, aby system Android mógł dostarczać do niej wiadomości. Filtr intencji MESSAGING_EVENT jest wymagany.

<!-- AndroidManifest.xml inside <application> -->
<service
    android:name=".MyFcmService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

Wiadomości z powiadomieniem a wiadomości z danymi

Wiadomości FCM występują w dwóch odmianach:

  • Wiadomości z powiadomieniem — FCM automatycznie wyświetla je w obszarze powiadomień, gdy aplikacja działa w tle; onMessageReceived jest wywoływana tylko wtedy, gdy aplikacja działa na pierwszym planie.
  • Wiadomości z danymi — zawsze są przekazywane do onMessageReceived jako mapa klucz/wartość, dzięki czemu można samodzielnie sterować ich obsługą.

Odczytuj niestandardowe pola z message.data.

import com.google.firebase.messaging.RemoteMessage

fun handle(message: RemoteMessage) {
    val type = message.data["type"]      // your custom field
    val itemId = message.data["itemId"]
    when (type) {
        "chat" -> openChat(itemId)
        "promo" -> openPromo(itemId)
    }
}
fun openChat(id: String?) {}
fun openPromo(id: String?) {}

Tworzenie kanału powiadomień

Od systemu Android 8 każde powiadomienie wymaga kanału. Utwórz go raz podczas uruchamiania aplikacji; system używa kanału do kontrolowania dźwięku, ważności i ustawień użytkownika dotyczących danego kanału.

import android.app.NotificationChannel
import android.app.NotificationManager
import android.content.Context

fun createChannel(context: Context) {
    val channel = NotificationChannel(
        "messages",
        "Messages",
        NotificationManager.IMPORTANCE_HIGH
    )
    val manager = context.getSystemService(NotificationManager::class.java)
    manager.createNotificationChannel(channel)
}

Wyświetlanie powiadomienia

Utwórz powiadomienie za pomocą NotificationCompat.Builder, powiązując je z identyfikatorem kanału, a następnie opublikuj je za pomocą NotificationManagerCompat.

Pamiętaj: w systemie API 33 i nowszych powiadomienie pojawi się tylko wtedy, gdy użytkownik przyznał uprawnienie POST_NOTIFICATIONS.

import android.content.Context
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat

fun showNotification(context: Context, title: String, body: String) {
    val notification = NotificationCompat.Builder(context, "messages")
        .setSmallIcon(android.R.drawable.ic_dialog_info)
        .setContentTitle(title)
        .setContentText(body)
        .setAutoCancel(true)
        .build()

    NotificationManagerCompat.from(context).notify(1, notification)
}

Subskrypcje tematów

Zamiast śledzić poszczególne tokeny, możesz wysyłać wiadomości do tematu. Klienci subskrybują nazwę tematu, a serwer wysyła jedną wiadomość do wszystkich subskrybentów.

To świetne rozwiązanie w przypadku takich tematów jak news, sports czy ogłoszenia all-users.

import com.google.firebase.Firebase
import com.google.firebase.messaging.messaging
import kotlinx.coroutines.tasks.await

suspend fun subscribeToNews() {
    Firebase.messaging.subscribeToTopic("news").await()
}

suspend fun unsubscribeFromNews() {
    Firebase.messaging.unsubscribeFromTopic("news").await()
}

Szybkie sprawdzenie

Aplikacja działa w tle i otrzymuje z FCM czystą wiadomość typu notification. Co się stanie?

Podsumowanie: Cloud Messaging

Potrafisz już docierać do użytkowników za pomocą powiadomień push:

  • Dodaj firebase-messaging i poproś o POST_NOTIFICATIONS w systemie API 33 lub nowszym.
  • Każda instalacja ma token FCM; prześlij go na swój serwer.
  • Rozszerz FirebaseMessagingService i przesłoń metody onMessageReceived / onNewToken.
  • Poznaj różnicę między wiadomościami typu notification i data.
  • Utwórz kanał powiadomień, twórz powiadomienia za pomocą NotificationCompat lub rozsyłaj je za pośrednictwem tematów.

To kończy omówienie trzech usług Firebase: Auth, Firestore i Messaging — kompletnego backendu dla aplikacji na Androida.

Często zadawane pytania

Czy lekcja „Wysyłanie za pomocą Cloud Messaging” jest bezpłatna?

Tak — pełny tekst „Wysyłanie za pomocą Cloud Messaging” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Android Academy, przejdź na CoddyKit PRO. Kurs Android Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Wysyłanie za pomocą Cloud Messaging”?

Wysyłaj i odbieraj powiadomienia FCM Ćwiczysz Android Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Android Academy?

Nie wymagamy żadnego doświadczenia. Android Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.

Ile czasu zajmuje lekcja „Wysyłanie za pomocą Cloud Messaging”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Android Academy?

Tak. Każda lekcja Android Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Konfiguracja Firebase
  2. Uwierzytelnianie Firebase
  3. Podstawy Cloud Firestore
  4. Wysyłanie za pomocą Cloud Messaging
← Powrót do Android Academy