Powiadomienia Push to komunikaty wysyłane przez serwer na urządzenie mobilne nawet przy zamkniętej aplikacji. Według danych Google Firebase, 2024, powiadomienia Push są przetwarzane przez specjalistyczne usługi — FCM na Androidzie i APNS na iOS, które obsługują dostawę w czasie rzeczywistym do milionów urządzeń jednocześnie. Stały się nieodłączną częścią doświadczenia użytkownika w nowoczesnych aplikacjach mobilnych.
Najważniejsze
Powiadomienia Push to krótkie komunikaty, które serwer aplikacji wysyła na urządzenie użytkownika bez jego jawnego żądania. Wyświetlają się w formie banerów, ikon z oznaczeniami lub sygnałów dźwiękowych, przyciągając uwagę użytkownika do aplikacji i informując o ważnych wydarzeniach.
Powiadomienie Push składa się z nagłówka, treści wiadomości i opcjonalnych danych (payload). W przeciwieństwie do SMS, powiadomienia Push są bezpłatne dla użytkownika i dostarczane przez infrastrukturę usług chmurowych — FCM dla Androida i APNS dla iOS. Główne cele powiadomień Push: zwiększenie zaangażowania, informowanie o wydarzeniach i sprowadzenie użytkownika z powrotem do aplikacji.
Statystyki użytkowania pokazują, że prawidłowo skonfigurowane powiadomienia Push zwiększają retencję aplikacji o 30-60%. Jednak nadmierna częstotliwość powiadomień prowadzi do rezygnacji — ponad 60% użytkowników wyłącza powiadomienia, jeśli są wysyłane częściej niż trzy razy dziennie.
System Push składa się z trzech komponentów: serwera aplikacji (app server), usługi platformowej (FCM/APNS) i aplikacji klienckiej na urządzeniu. Serwer wysyła żądanie do usługi platformowej, która dostarcza powiadomienie na docelowe urządzenie przez stałe połączenie z systemem operacyjnym.
Mechanizm dostawy powiadomień Push opiera się na stałym połączeniu między urządzeniem a usługą platformową. System operacyjny utrzymuje zaszyfrowany kanał komunikacji, przez który przechodzą wszystkie wiadomości Push.
Przy pierwszym uruchomieniu aplikacja prosi o pozwolenie na wysyłanie powiadomień i otrzymuje unikalny token urządzenia od FCM lub APNS. Token ten to ciąg znaków o długości do 4 KB, jednoznacznie identyfikujący instancję aplikacji. Token zmienia się przy ponownej instalacji aplikacji lub przywróceniu urządzenia z kopii zapasowej.
class FirebaseMessagingService :
FirebaseMessagingService() {
override fun onNewToken(token: String) {
sendTokenToServer(token)
}
override fun onMessageReceived(
message: RemoteMessage
) {
showNotification(message.notification)
}
}
Serwer aplikacji wysyła żądanie HTTP do FCM API lub APNS API, podając docelowy token, nagłówek, treść i dodatkowe dane. Usługa platformowa odpowiada statusem dostawy: success, invalid token (urządzenie usunęło aplikację) lub rate-limited (przekroczono częstotliwość wysyłki).
fetch("https://fcm.googleapis.com/fcm/send", {
method: "POST",
headers: {
"Authorization": "key=AIzaSy...",
"Content-Type": "application/json"
},
body: JSON.stringify({
to: "device_token_here",
notification: {
title: "wysłać token na swój serwer",
body: "Masz nowe powiadomienie!"
}
})
})
Wybór między FCM a APNS zależy od docelowej platformy. FCM obsługuje Androida i iOS, APNS — tylko ekosystem Apple. Przyjrzyjmy się kluczowym różnicom, ważnym przy tworzeniu wieloplatformowych aplikacji mobilnych.
FCM — usługa Google działająca na bazie Google Play Services. Obsługuje dwa schematy dostawy: powiadomienia z automatycznym wyświetlaniem (display notifications) oraz data-powiadomienia, które aplikacja przetwarza samodzielnie. FCM jest bezpłatny i nie ma ograniczeń co do liczby wysyłanych wiadomości.
APNS — usługa Apple z obsługą załączników multimedialnych (obrazy, wideo, audio) o rozmiarze do 10 MB. Do wysyłki przez APNS wymagany jest certyfikat TLS lub klucz uwierzytelniania. APNS ogranicza częstotliwość wysyłki na jedno urządzenie — nie więcej niż 150 powiadomień na minutę, po czym włącza rate limiting.
| Cecha | FCM | APNS |
|---|---|---|
| Platformy | Android, iOS, Web | iOS, macOS, watchOS |
| Wymagania | Google Play Services | Apple Developer Program |
| Media | do 4 KB (data) | do 10 MB (załączniki) |
| Priorytet | normal/high | immediate/power-saving |
| Koszt | bezpłatnie | bezpłatnie (wymagane konto) |
Powiadomienia Push klasyfikuje się według sposobu wyświetlania i przeznaczenia. Zrozumienie typów pomaga wybrać właściwą strategię dla każdego scenariusza interakcji z użytkownikiem.
Najpowszechniejszy typ — wyświetlane powiadomienie z nagłówkiem i treścią. System operacyjny automatycznie pokazuje je w panelu powiadomień, na ekranie blokady i w formie banera. Deweloper może skonfigurować dźwięk, wibracje, ikonę z oznaczeniem i przyciski akcji do bezpośrednich działań (odpowiedź, otwarcie, odrzucenie).
Data-powiadomienia zawierają tylko payload bez wizualnego wyświetlania. Aplikacja przetwarza je w tle: synchronizuje dane, aktualizuje pamięć podręczną lub uruchamia pobieranie. Na Androidzie data-powiadomienia są dostarczane gwarantowanie, na iOS — tylko przy aktywnej aplikacji lub przez background fetch.
Nowoczesne mobilne systemy operacyjne obsługują rozszerzone i media-powiadomienia z obrazami, GIF, wideo i audio. Na iOS jest to realizowane przez UNNotificationAttachment, na Androidzie — przez BigPictureStyle i InboxStyle do dostosowywania wyglądu powiadomienia w panelu systemowym.
Ciche powiadomienia nie wyświetlają się użytkownikowi i służą do synchronizacji w tle. Na iOS mają wysoki priorytet dla zadań takich jak aktualizacja danych przed otwarciem aplikacji. Android traktuje je jako data-powiadomienia z minimalnym priorytetem.
Konfiguracja powiadomień Push wymaga działań na poziomie infrastruktury, części serwerowej i kodu klienckiego. Przyjrzyjmy się typowemu procesowi dla wieloplatformowego projektu mobilnego.
Dla Androida należy utworzyć projekt w Firebase Console, dodać plik google-services.json do projektu i skonfigurować FirebaseMessagingService. Token urządzenia uzyskuje się przez FirebaseInstanceId lub FirebaseMessaging.getInstance().token, po czym wysyła się go na serwer przez API przy pierwszym uruchomieniu lub przy jego zmianie.
Dla iOS wymagana jest subskrypcja Apple Developer Program, utworzenie certyfikatu Push lub klucza APNS w Developer Portal oraz włączenie Capability Push Notifications w Xcode. Rejestracja na powiadomienia odbywa się przez UIApplication.shared.registerForRemoteNotifications z otrzymaniem deviceToken w AppDelegate.
import UIKit
import UserNotifications
@main
class AppDelegate: UIResponder,
UIApplicationDelegate {
func application(
_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken
deviceToken: Data
) {
let token = deviceToken
.map { String.format("%02x", $0) }
.joined()
// wysłać token na swój serwer
}
}
Po stronie serwera powiadomienia Push są wysyłane przez REST API lub Admin SDK. Dla FCM używany jest Firebase Admin SDK (dostępny dla Node.js, Java, Python, Go), dla APNS — biblioteki pusher (pushy dla Java, apn2 dla Node.js). Zaleca się przechowywanie tokenów w bazie danych z datą ostatniej aktualizacji.
Bezpieczeństwo powiadomień Push jest krytyczne, ponieważ mogą one przekazywać poufne dane. Obie platformy zapewniają podstawowe mechanizmy ochrony, ale deweloper musi ich prawidłowo używać.
Payload powiadomienia Push może zawierać dane osobowe użytkowników: imiona, kwoty transakcji, linki do wiadomości. Nawet jeśli kanał komunikacji między FCM/APNS a urządzeniem jest szyfrowany, dane mogą zostać przechwycone na poziomie aplikacji przy przechwyceniu powiadomienia przez oprogramowanie stron trzecich. Zaleca się szyfrowanie wrażliwego payload na serwerze algorytmem AES-256 i deszyfrowanie go na urządzeniu za pomocą klucza przechowywanego w Keychain (iOS) lub EncryptedSharedPreferences (Android).
Token urządzenia to identyfikator sesji, który może zostać skompromitowany przy włamaniu na urządzenie lub przechwyceniu ruchu. Serwer aplikacji powinien sprawdzać tokeny przed wysyłką: porównywać je z bazą danych, śledzić nieaktywne tokeny i usuwać je przy powtarzających się błędach InvalidToken. FCM i APNS zwracają status InvalidRegistration dla nieprawidłowych tokenów — nie ignoruj go.
Bez kontroli częstotliwości powiadomienia Push mogą stać się narzędziem spamu, który irytuje użytkowników i obniża retencję. Ustaw na serwerze limity: nie więcej niż 5 powiadomień na godzinę dla jednego użytkownika i nie więcej niż 3 identyczne wiadomości. Dla powiadomień transakcyjnych (potwierdzenie zamówienia, zmiana hasła) limity mogą być wyższe — do 10 na godzinę, ponieważ niosą one krytycznie ważne informacje. Użyj rate limiting na poziomie API wysyłki, aby osoba atakująca nie mogła wywołać masowej wysyłki przez twój serwer.
Często zadawane pytania
Tak, przez bezpośrednie połączenie z APNS nie jest obsługiwane na Androidzie — dla urządzeń bez Google Play Services stosuje się alternatywy takie jak Huawei Mobile Services (HMS) i własne połączenia WebSocket. Jednak FCM pozostaje standardem dla większości aplikacji dzięki bezpłatności i niezawodności.
FCM i APNS przechowują ostatnie powiadomienie na swoich serwerach i dostarczają je po przywróceniu połączenia. Na każdym urządzeniu przechowywane jest tylko ostatnie powiadomienie od każdej aplikacji, więc przy dłuższym braku sieci pośrednie komunikaty są tracone.
Najczęstsze przyczyny to wygasły certyfikat Push APNS (ważny 1 rok), nieprawidłowy token urządzenia, wyłączone powiadomienia w ustawieniach lub włączony tryb oszczędzania energii. Sprawdź certyfikat w Apple Developer Console i upewnij się, że aplikacja prosi o pozwolenie przez UNUserNotificationCenter.
Na Androidzie użyj PendingIntent w NotificationCompat.Builder ze śledzeniem otwarcia przez Intent. Na iOS — metoda UNUserNotificationCenterDelegate.userNotificationCenter(_:didReceive:withCompletionHandler:). FCM udostępnia raporty o dostawie i otwarciach dla każdego wysłanego powiadomienia.
Nieznacznie — powiadomienia Push nie utrzymują stałego połączenia; system operacyjny używa jednolitego kanału systemowego dla wszystkich aplikacji, co minimalizuje całkowite zużycie energii. Częste wysyłanie (co 5 minut) zużywa więcej energii na wybudzenie urządzenia i wyjście z trybu uśpienia. Ciche powiadomienia na iOS zużywają więcej energii z powodu aktywacji aplikacji w tle do przetwarzania otrzymanych danych.
Podsumowanie
Opracujemy aplikację mobilną pod klucz
IT Sectr tworzy aplikacje na iOS i Androida dla startupów i firm od 2017 roku. Doradzimy Ci i zaproponujemy najlepsze rozwiązanie.
Przeczytaj również