0Pricing
Android Academy · Lekcja

Powiadomienia push

Wysyłaj powiadomienia push za pośrednictwem Firebase Cloud Messaging. Skonfiguruj FCM, utwórz kanały powiadomień, buduj powiadomienia z akcjami i obsługuj dostarczanie na pierwszym i drugim planie.

Powiadomienia push to bezpłatna lekcja Android Academy na CoddyKit. To lekcja 4 z 6. 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 6 lekcji w sumie.

Czym są powiadomienia push?

Powiadomienia push pozwalają serwerowi wysyłać wiadomości do użytkowników, nawet gdy aplikacja nie jest na pierwszym planie. Typowe zastosowania:

  • Powiadomienia o nowych wiadomościach
  • Aktualizacje statusu zamówienia
  • Ważne wiadomości
  • Przypomnienia i promocje

W systemie Android standardową usługą dostarczania powiadomień push jest Firebase Cloud Messaging (FCM).

Przegląd FCM

Przepływ działania Firebase Cloud Messaging (FCM):

  1. Przy pierwszym uruchomieniu aplikacja rejestruje się w FCM → otrzymuje urządzeniowy token
  2. Aplikacja wysyła token do Państwa serwera
  3. Gdy chcą Państwo wysłać powiadomienie, serwer wysyła wiadomość do FCM
  4. FCM dostarcza ją na urządzenie

FCM jest bezpłatne, niezawodne i działa nawet wtedy, gdy aplikacja została zamknięta.

Dodawanie Firebase do projektu

Wykonaj następujące kroki, aby dodać Firebase:

  1. Przejdź do Firebase Console → Add project → Add Android app
  2. Zarejestruj aplikację za pomocą nazwy pakietu
  3. Pobierz google-services.json i umieść go w app/
  4. Dodaj pluginy i zależności
// project/build.gradle:
buildscript {
    dependencies { classpath 'com.google.gms:google-services:4.4.1' }
}

// app/build.gradle:
plugins { id 'com.google.gms.google-services' }

dependencies {
    implementation platform('com.google.firebase:firebase-bom:32.7.4')
    implementation 'com.google.firebase:firebase-messaging-ktx'
}

Uprawnienie FCM (Android 13+)

Od systemu Android 13 (API 33) należy żądać uprawnienia POST_NOTIFICATIONS w czasie działania aplikacji — tak jak uprawnienia niebezpiecznego:

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

// In Activity (Android 13+):
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
    requestPermissionLauncher.launch(android.Manifest.permission.POST_NOTIFICATIONS)
}

FirebaseMessagingService

Utwórz usługę obsługującą przychodzące wiadomości FCM i odświeżanie tokenu:

class MyFirebaseService : FirebaseMessagingService() {

    override fun onNewToken(token: String) {
        // Send token to your backend to enable push delivery
        sendTokenToServer(token)
    }

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

Rejestrowanie usługi w manifeście

Zadeklaruj usługę w AndroidManifest.xml:

<service
    android:name=".MyFirebaseService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

Kanały powiadomień (Android 8+)

Od systemu Android 8 (Oreo) powiadomienia muszą być przypisane do kanału. Użytkownicy mogą osobno kontrolować dźwięk, wibracje i ważność każdego kanału:

fun createNotificationChannel(context: Context) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        val channel = NotificationChannel(
            "messages_channel",           // channel ID
            "Messages",                   // user-visible name
            NotificationManager.IMPORTANCE_HIGH
        ).apply {
            description = "Incoming message notifications"
            enableVibration(true)
        }
        val manager = context.getSystemService(NotificationManager::class.java)
        manager.createNotificationChannel(channel)
    }
}

Tworzenie i wyświetlanie powiadomienia

Użyj NotificationCompat.Builder, aby zapewnić zgodność z różnymi wersjami systemu Android:

fun showNotification(context: Context, title: String, body: String) {
    val intent = Intent(context, MainActivity::class.java)
    val pendingIntent = PendingIntent.getActivity(
        context, 0, intent,
        PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
    )

    val notification = NotificationCompat.Builder(context, "messages_channel")
        .setSmallIcon(R.drawable.ic_notification)
        .setContentTitle(title)
        .setContentText(body)
        .setPriority(NotificationCompat.PRIORITY_HIGH)
        .setAutoCancel(true)             // dismiss on tap
        .setContentIntent(pendingIntent) // open app on tap
        .build()

    NotificationManagerCompat.from(context)
        .notify(System.currentTimeMillis().toInt(), notification)
}

Powiadomienie z akcjami

Dodaj do powiadomień przyciski akcji, aby użytkownicy mogli reagować bez otwierania aplikacji:

val replyIntent = Intent(context, ReplyReceiver::class.java)
val replyPending = PendingIntent.getBroadcast(
    context, 1, replyIntent,
    PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE
)

val notification = NotificationCompat.Builder(context, "messages_channel")
    .setSmallIcon(R.drawable.ic_notification)
    .setContentTitle("New message from Alice")
    .setContentText("Hey, are you coming?")
    .addAction(R.drawable.ic_reply, "Reply", replyPending)
    .addAction(R.drawable.ic_dismiss, "Dismiss", null)
    .build()

Obsługa na pierwszym planie i w tle

FCM działa różnie w zależności od stanu aplikacji:

  • Aplikacja na pierwszym planie — wywoływana jest metoda onMessageReceived(); powiadomienie należy utworzyć i wyświetlić samodzielnie
  • Aplikacja w tle lub zamknięta — FCM automatycznie wyświetla powiadomienie z elementu notification payload; metoda onMessageReceived NIE jest wywoływana

Umieść dodatkowe dane w elemencie data payload (a nie w notification), aby zawsze odbierać je w onMessageReceived.

Pobieranie tokenu FCM

Pobierz bieżący token FCM, aby wysłać go do swojego serwera:

FirebaseMessaging.getInstance().token.addOnCompleteListener { task ->
    if (!task.isSuccessful) {
        Log.w("FCM", "Fetching token failed", task.exception)
        return@addOnCompleteListener
    }
    val token = task.result
    Log.d("FCM", "Token: $token")
    // Send token to your server
    sendTokenToServer(token)
}

Szybkie sprawdzenie

Co się stanie, gdy aplikacja działa w tle, a FCM dostarczy wiadomość z elementem „notification” payload?

Podsumowanie: powiadomienia push

Powiadomienia push za pomocą FCM w systemie Android:

  • Dodaj Firebase, google-services.json i firebase-messaging-ktx
  • Żądaj uprawnienia POST_NOTIFICATIONS w systemie Android 13+
  • Utwórz FirebaseMessagingService → onNewToken + onMessageReceived
  • Utwórz NotificationChannel dla systemu Android 8+
  • Twórz powiadomienia za pomocą NotificationCompat.Builder
  • Używaj elementu data payload, aby zawsze odbierać dane w onMessageReceived

Następnie: zaplanuj pracę w tle za pomocą WorkManager.

Często zadawane pytania

Czy lekcja „Powiadomienia push” jest bezpłatna?

Tak — pełny tekst „Powiadomienia push” 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 6 lekcji w sumie.

Co nauczysz się w „Powiadomienia push”?

Wysyłaj powiadomienia push za pośrednictwem Firebase Cloud Messaging. Skonfiguruj FCM, utwórz kanały powiadomień, buduj powiadomienia z akcjami i obsługuj dostarczanie na pierwszym i drugim planie. Ć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 6.

Ile czasu zajmuje lekcja „Powiadomienia push”?

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. Retrofit i interfejsy REST API
  2. Ładowanie obrazów za pomocą Coil
  3. Obsługa błędów i UX
  4. Powiadomienia push
  5. WorkManager i zadania w tle
  6. Publikowanie w Play Store
← Powrót do Android Academy