Пусх обавештења су поруке које сервер шаље на мобилни уређај чак и када је апликација затворена. Према подацима Google Firebase, 2024, Пусх обавештења се обрађују кроз специјализоване сервисе — FCM на Android-у и APNS на iOS-у, који подржавају испоруку у реалном времену милионима уређаја истовремено. Она су постала саставни део корисничког искуства у савременим мобилним апликацијама.
Главно
Пусх обавештења су кратке поруке које сервер апликације шаље на уређај корисника без његовог изричитог захтева. Приказују се у облику банера, ознака на иконици или звучних сигнала, привлачећи пажњу корисника на апликацију и информишући о важним догађајима.
Пусх обавештење се састоји од наслова, тела поруке и опционих података (payload). За разлику од SMS-а, Пусх обавештења су бесплатна за корисника и испоручују се путем инфраструктуре облачних сервиса — FCM за Android и APNS за iOS. Главни циљеви Пусх обавештења: повећање ангажовања, информисање о догађајима и враћање корисника у апликацију.
Статистика употребе показује да правилно подешена Пусх обавештења повећавају задржавање апликације за 30-60%. Међутим, прекомерна учесталост обавештења доводи до отказа — више од 60% корисника искључује обавештења ако се шаљу више од три пута дневно.
Пусх систем укључује три компоненте: сервер апликације (app server), платформски сервис (FCM/APNS) и клијентску апликацију на уређају. Сервер шаље захтев платформском сервису, који испоручује обавештење на циљани уређај путем сталне везе са оперативним системом.
Механизам испоруке Пусх обавештења заснива се на сталној вези између уређаја и платформског сервиса. Оперативни систем одржава шифровани комуникациони канал кроз који пролазе све Пусх поруке.
При првом покретању апликација тражи дозволу за слање обавештења и добија јединствени токен уређаја од FCM или APNS. Овај токен је низ дужине до 4 KB, који јединствено идентификује инстанцу апликације. Токен се мења при поновној инсталацији апликације или враћању уређаја из резервне копије.
class FirebaseMessagingService :
FirebaseMessagingService() {
override fun onNewToken(token: String) {
sendTokenToServer(token)
}
override fun onMessageReceived(
message: RemoteMessage
) {
showNotification(message.notification)
}
}
Сервер апликације шаље HTTP захтев ка FCM API или APNS API, наводећи циљани токен, наслов, тело и додатне податке. Платформски сервис одговара статусом испоруке: success, invalid token (уређај је обрисао апликацију) или rate-limited (прекорачена учесталост слања).
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: "пошаљите token на свој сервер",
body: "У вас новое уведомление!"
}
})
})
Избор између FCM и APNS зависи од циљане платформе. FCM подржава Android и iOS, APNS — само Apple екосистем. Размотримо кључне разлике важне за развој крос-платформских мобилних апликација.
FCM је Google сервис који ради на бази Google Play Services. Подржава две шеме испоруке: обавештења са аутоматским приказом (display notifications) и data-обавештења која апликација обрађује самостално. FCM је бесплатан и нема ограничења у броју послатих порука.
APNS је Apple сервис са подршком за мултимедијалне прилоге (слике, видео, аудио) величине до 10 MB. За слање путем APNS-а потребан је TLS сертификат или кључ за аутентификацију. APNS ограничава учесталост слања на један уређај — не више од 150 обавештења у минути, након чега укључује rate limiting.
| Карактеристика | FCM | APNS |
|---|---|---|
| Платформе | Android, iOS, Web | iOS, macOS, watchOS |
| Захтеви | Google Play Services | Apple Developer Program |
| Медији | до 4 KB (data) | до 10 MB (прилози) |
| Приоритет | normal/high | immediate/power-saving |
| Цена | бесплатно | бесплатно (потребан налог) |
Пусх обавештења се класификују по начину приказа и намени. Разумевање типова помаже у избору правилне стратегије за сваки сценарио интеракције са корисником.
Најчешћи тип — приказано обавештење са насловом и телом. Оперативни систем га аутоматски приказује у системском панелу, на закључаном екрану и у облику банера. Програмер може подесити звук, вибрацију, ознаку на иконици и акционе дугмиће за директне радње (одговори, отвори, одбиј).
Data-обавештења садрже само payload без визуелног приказа. Апликација их обрађује у позадини: синхронизује податке, ажурира кеш или покреће преузимање. На Android-у data-обавештења се испоручују гарантовано, на iOS-у — само када је апликација активна или путем background fetch-а.
Савремени мобилни оперативни системи подржавају проширена и медијска обавештења са сликама, GIF-овима, видео и аудио записима. На iOS-у се ово реализује путем UNNotificationAttachment, на Android-у — путем BigPictureStyle и InboxStyle за прилагођавање изгледа обавештења у системском панелу.
Тиха обавештења не приказују се кориснику и користе се за позадинску синхронизацију. На iOS-у имају висок приоритет за задатке попут ажурирања података пре отварања апликације. Android их третира као data-обавештења са минималним приоритетом.
Подешавање Пусх обавештења захтева радње на нивоу инфраструктуре, серверског дела и клијентског кода. Размотримо типичан процес за крос-платформски мобилни пројекат.
За Android је потребно креирати пројекат у Firebase Console, додати google-services.json у пројекат и подесити FirebaseMessagingService. Токен уређаја се добија путем FirebaseInstanceId или FirebaseMessaging.getInstance().token, након чега се шаље на сервер путем API-ја при првом покретању или при његовој промени.
За iOS је потребна претплата на Apple Developer Program, креирање Push сертификата или APNS кључа у Developer Portal-у и укључивање Capability Push Notifications у Xcode-у. Регистрација за обавештења се врши путем UIApplication.shared.registerForRemoteNotifications са добијањем deviceToken у 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()
// отправить token на свой сервер
}
}
На серверској страни Пусх обавештења се шаљу путем REST API-ја или Admin SDK-а. За FCM се користи Firebase Admin SDK (доступан за Node.js, Java, Python, Go), за APNS — pusher библиотеке (pushy за Java, apn2 за Node.js). Препоручује се чување токена у бази података са временском ознаком последњег ажурирања.
Безбедност Пусх обавештења је критично важна јер се кроз њих могу преносити поверљиви подаци. Обе платформе пружају основне механизме заштите, али програмер мора да их правилно користи.
Payload Пусх обавештења може садржати личне податке корисника: имена, износе трансакција, линкове ка порукама. Чак и ако је комуникациони канал између FCM/APNS и уређаја шифрован, подаци могу бити пресретнути на нивоу апликације при пресретању обавештења од стране трећег софтвера. Препоручује се шифровање осетљивог payload-а на серверу алгоритмом AES-256 и дешифровање на уређају помоћу кључа који се чува у Keychain (iOS) или EncryptedSharedPreferences (Android).
Токен уређаја је идентификатор сесије који може бити компромитован при провали уређаја или пресретању саобраћаја. Сервер апликације мора да проверава токене пре слања: упоређује их са базом података, прати неактивне токене и брише их при понављајућим InvalidToken грешкама. FCM и APNS враћају статус InvalidRegistration за неважеће токене — не игноришите га.
Без контроле учесталости, Пусх обавештења могу постати алат за спам који иритира кориснике и смањује задржавање. Поставите на серверу ограничења: не више од 5 обавештења на сат једном кориснику и не више од 3 идентичне поруке. За трансакциона обавештења (потврда поруџбине, промена лозинке) ограничења могу бити већа — до 10 на сат, јер носе критично важне информације. Користите rate limiting на нивоу API-ја за слање како нападач не би могао да покрене масовну дистрибуцију путем вашег сервера.
Често постављана питања
Да, директно повезивање на APNS није подржано на Android-у — за уређаје без Google Play Services користе се алтернативе попут Huawei Mobile Services (HMS) и сопствене WebSocket везе. Међутим, FCM остаје стандард за већину апликација захваљујући бесплатности и поузданости.
FCM и APNS чувају последње обавештење на својим серверима и испоручују га при успостављању везе. На сваком уређају чува се само последње обавештење од сваке апликације, па се при дугом одсуству мреже губе међупоруке.
Најчешћи разлози су истекао Push сертификат APNS (важи 1 годину), неважећи токен уређаја, искључена обавештења у подешавањима или укључен режим уштеде енергије. Проверите сертификат у Apple Developer Console-и и уверите се да апликација тражи дозволу путем UNUserNotificationCenter-а.
На Android-у користите PendingIntent у NotificationCompat.Builder-у са праћењем отварања путем Intent-а. На iOS-у — метод UNUserNotificationCenterDelegate.userNotificationCenter(_:didReceive:withCompletionHandler:). FCM пружа извештаје о испоруци и отварањима за свако послато обавештење.
Незнатно — Пусх обавештења не одржавају сталну везу; оперативни систем користи јединствени системски канал за све апликације, што минимизира укупну потрошњу енергије. Често слање (сваких 5 минута) троши више енергије на буђење уређаја и излазак из режима спавања. Тиха обавештења на iOS-у троше више енергије због активације апликације у позадини за обраду примљених података.
Закључак
Развићемо мобилну апликацију под кључ
IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.
Прочитајте такође