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):
- Przy pierwszym uruchomieniu aplikacja rejestruje się w FCM → otrzymuje urządzeniowy token
- Aplikacja wysyła token do Państwa serwera
- Gdy chcą Państwo wysłać powiadomienie, serwer wysyła wiadomość do FCM
- 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:
- Przejdź do Firebase Console → Add project → Add Android app
- Zarejestruj aplikację za pomocą nazwy pakietu
- Pobierz
google-services.jsoni umieść go wapp/ - 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
notificationpayload; metodaonMessageReceivedNIE 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.jsonifirebase-messaging-ktx - Żądaj uprawnienia
POST_NOTIFICATIONSw systemie Android 13+ - Utwórz
FirebaseMessagingService→onNewToken+onMessageReceived - Utwórz
NotificationChanneldla 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
- Retrofit i interfejsy REST API
- Ładowanie obrazów za pomocą Coil
- Obsługa błędów i UX
- Powiadomienia push
- WorkManager i zadania w tle
- Publikowanie w Play Store