Локална обавештења у мобилном развоју: суштина, које врсте постоје и како раде

Аутор: IT Sectr Објављено: 2026-03-19 Време читања: 8 мин

Локално обавештење је порука коју апликација шаље кориснику без учешћа удаљеног сервера. Сви подаци се обрађују и приказују директно на уређају примаоца. Такав механизам је погодан за подсетнике, тајмере и будилнике, када је апликација у позадини или затворена. Према Apple Developer Documentation, UNUserNotificationCenter обезбеђује централизовано управљање локалним обавештењима на iOS-у.

Главне тачке

  • Локално обавештење — порука коју уређај планира и доставља без учешћа сервера
  • Платформе — Android користи NotificationManager, iOS користи UNUserNotificationCenter
  • Планирање — обавештења се могу одложити по времену, геолокацији или календару
  • Ограничења — локална обавештења не раде између уређаја и захтевају одвојену логику синхронизације
  • UX — правилно подешена обавештења повећавају ангажованост и враћају корисника у апликацију

Шта је локално обавештење?

Локално обавештење је порука коју генерише и приказује оперативни систем на истом уређају на којем је инсталирана апликација. За разлику од push обавештења, локална не пролазе кроз спољни сервер — сва логика планирања се извршава на клијенту.

Оваква обавештења раде без обзира на стање апликације: активна, сведена или потпуно затворена. Оперативни систем преузима доставу у одређено време, а програмер задаје само садржај и окидач.

Систем гарантује испоруку локалног обавештења чак и без мреже. Ово је кључна предност у односу на push обавештења која захтевају стабилну интернет везу и радни сервер.

Главне компоненте захтева

Свако локално обавештење састоји се од три дела: садржај (наслов, тело, звук), окидач (временски или гео-услов) и идентификатор захтева. Идентификатор омогућава отказивање или ажурирање обавештења пре његове доставе.

Програмер може поставити до 64 локална обавештења за једну апликацију на iOS-у и неограничен број на Android-у. Разлика је повезана са архитектонским ограничењима оперативних система.

Како раде локална обавештења на iOS-у и Android-у?

Обе платформе пружају сопствене API-је за рад са локалним обавештењима. На iOS-у централни елемент је UNUserNotificationCenter, на Android-у — NotificationManager. Упркос различитим интерфејсима, логика је иста: апликација креира захтев, региструје га у систему, а ОС доставља обавештење у задатом тренутку.

iOS користи UNCalendarNotificationTrigger за календарске догађаје, UNTimeIntervalNotificationTrigger за интервале и UNLocationNotificationTrigger за геолокацију. Android нуди AlarmManager, WorkManager и прецизно планирање преко setExact.

Од верзије Android 12 — SCHEDULE_EXACT_ALARM захтева посебну дозволу од корисника. На iOS-у дозвола се тражи једном кроз UNUserNotificationCenter.requestAuthorization, а корисник бира ниво приступа: банери, звуци, значке.

Врсте локалних обавештења

Локална обавештења се класификују према врсти окидача, а не према садржају. Свака врста одређује када и под којим условима ће обавештење бити приказано кориснику.

Поређење окидача по платформама

На iOS-у и Android-у врсте окидача су имплементиране различито, иако је логичка класификација иста. iOS користи UNCalendarNotificationTrigger за датуме, UNTimeIntervalNotificationTrigger за интервале и UNLocationNotificationTrigger за геолокацију. Android нуди AlarmManager са setExact и setRepeating, као и WorkManager за одложене задатке.

Врста окидачаОписПример
Временски интервалОбавештење после N секунди од покретањаТајмер одбројавања
Календарски датумОбавештење у одређено време и датумПодсетник за састанак
ГеолокацијаОбавештење при уласку/изласку из регионаПодсетник код продавнице
БезусловноТренутна достава при позиву API-јаОбавештење о преузимању

На iOS-у је такође доступан UNNotificationAttachment — прилог слике, звука или видеа у телу обавештења. Android подржава прилагођене шаблоне са дугмићима и великим сликама преко NotificationCompat.Style.

Избор окидача зависи од сценарија: календарски подсетници најбоље раде преко календарског окидача, а гео-подсетници — преко геолокације. Интервални окидачи су погодни за редовне догађаје са фиксним периодом.

Понашање окидача у позадини

На iOS-у локална обавештења испоручује систем чак и када је апликација затворена — UNUserNotificationCenter управља редом самостално. На Android-у достава зависи од изабраног механизма: AlarmManager се активира чак и када је екран угашен, а WorkManager — узимајући у обзир уштеду енергије.

Сценарији коришћења у мобилним апликацијама

Локална обавештења решавају задатке где је спољна инфраструктура сувишна или недоступна. Главни сценарији: подсетници, тајмери, образовни савети и одложене радње.

  • Подсетници — апликација календара креира локално обавештење на одређени датум догађаја
  • Образовни савети — дан након инсталације, апликација приказује савет о екрану
  • Тајмери — кухињски тајмер се активира након задатог времена чак и када је апликација затворена
  • Напредак операција — обавештење о завршетку преузимања или извоза података

Истраживања Localytics показују да апликације које користе локалне подсетнике задржавају 35% више корисника у првој недељи након инсталације. То чини локална обавештења моћним алатом за онбординг.

Важно је не злоупотребљавати учесталост — систем сам групише обавештења из једне апликације, а корисник може искључити сва локална обавештења ако му сметају. Оптимална учесталост је не више од 2–3 обавештења дневно за не-критичне догађаје.

Пример планирања на Android-у

За планирање локалног обавештења на Android-у користите NotificationManager у пару са AlarmManager-ом. Од Android 8+ потребно је прво креирати канал обавештења, иначе обавештење неће бити приказано.

kotlin
val channelId = "reminder_channel"
val notificationId = "task_reminder_42"

val channel = NotificationChannel(
    channelId,
    "Подсетници",
    NotificationManager.IMPORTANCE_HIGH
).apply {
    description = "Канал за подсетнике о задацима"
}

val manager = getSystemService(NotificationManager::class.java)
manager.createNotificationChannel(channel)

val intent = Intent(this, ReminderReceiver::class.java).apply {
    putExtra("notification_id", notificationId)
    putExtra("channel_id", channelId)
}

val pendingIntent = PendingIntent.getBroadcast(
    this, notificationId.hashCode(),
    intent, PendingIntent.FLAG_UPDATE_CURRENT
)

val alarmManager = getSystemService(AlarmManager::class.java)
alarmManager.setExact(
    AlarmManager.RTC_WAKEUP,
    triggerTimeMillis,
    pendingIntent
)

На Android 12+ проверите дозволу SCHEDULE_EXACT_ALARM пре позива setExact. Ако дозвола није издата — користите setWindow који гарантује доставу у оквиру временског прозора.

Обрада у BroadcastReceiver-у

При активирању AlarmManager-а систем шаље емитовани Intent који прима BroadcastReceiver. Унутар њега потребно је креирати и приказати обавештење кроз NotificationManager. Уверите се да PendingIntent користи FLAG_UPDATE_CURRENT, иначе при промени података стара обавештења ће наставити да користе застарели Intent.

Пример планирања на iOS-у

На iOS-у локална обавештења се креирају кроз UNUserNotificationCenter помоћу UNMutableNotificationContent и једног од окидача. Пре планирања потребно је затражити дозволу од корисника.

swift
import UserNotifications

let center = UNUserNotificationCenter.current()

center.requestAuthorization(options: [.alert, .sound, .badge]) { granted, error in
    guard granted else { return }
}

let content = UNMutableNotificationContent()
content.title = "Подсетник о задатку"
content.body = "Не заборавите да завршите извештај до 18:00"
content.sound = .default
content.userInfo = ["task_id": "42"]

let trigger = UNTimeIntervalNotificationTrigger(
    timeInterval: 3600,
    repeats: false
)

let request = UNNotificationRequest(
    identifier: "task_reminder_42",
    content: content,
    trigger: trigger
)

center.add(request)

iOS подржава до 64 истовремених захтева за локална обавештења. Ако је лимит прекорачен — систем одбија нове захтеве док активни не буду достављени или отказани. Користите getPendingNotificationRequests за проверу тренутног реда.

Обрада одговора делегата

Када корисник интерагује са локалним обавештењем на iOS-у, позива се метод userNotificationCenter:didReceive response делегата UNUserNotificationCenterDelegate. У овом методу доступни су идентификатор захтева, actionIdentifier (које дугме је притиснуто) и прилагођени userInfo. Ово омогућава разликовање једноставног отварања обавештења од притиска на одређено дугме.

Најбоље праксе локалних обавештења

Да би локална обавештења била корисна, а не да иритирају корисника, придржавајте се неколико кључних правила. Прво: контролишите учесталост — не више од 2–3 обавештења дневно за не-критичне догађаје, иначе ће корисник искључити сва обавештења апликације.

Друго: дајте кориснику избор. Додајте у интерфејс могућност искључивања одређених врста локалних обавештења. На Android-у за то је згодно користити засебни NotificationChannel са ниским importance, на iOS-у — засебну категорију у подешавањима апликације.

Треће: контекстуална релевантност — обавештење треба да се појави када је потребно кориснику. Гео-окидачи су идеални за подсетнике о обавезама близу куће, календарски — за састанке, интервални — за редовне радње попут пијења воде или истезања. Не мешајте врсте без потребе.

Четврто: тестирајте на стварним уређајима. iOS симулатор не емулира све сценарије доставе локалних обавештења, посебно у позадини. На Android-у користите adb shell dumpsys notification за проверу реда заказаних обавештења и њихових параметара. Пето: увек пружите кориснику могућност искључивања обавештења кроз интерфејс апликације — то је обавезан захтев UX-а и App Store Review Guidelines.

Често постављана питања

Чим се локално обавештење разликује од push-а?

Локално обавештење планира и доставља уређај без учешћа сервера. Push обавештење захтева спољни сервис (FCM, APNS) и интернет везу. Локална раде офлајн, push — само уз приступ мрежи.

Колико локалних обавештења може да се планира?

iOS ограничава на 64 истовремено планирана захтева. Android нема строги лимит, али преко 500 обавештења може смањити перформансе система и утицати на време доставе.

Може ли се отказати локално обавештење након планирања?

Да, на iOS-у користите removePendingNotificationRequests са идентификатором захтева. На Android-у позовите NotificationManager.cancel или откажите PendingIntent преко AlarmManager-а. Јединствени идентификатор је обавезан за отказивање.

Да ли је потребна дозвола корисника за локална обавештења?

На iOS-у дозвола се обавезно тражи кроз requestAuthorization. На Android 13+ (Tiramisu) такође је потребна дозвола POST_NOTIFICATIONS. Старије верзије Android-а не захтевају експлицитну дозволу за локална обавештења.

Како додати дугмиће у локално обавештење?

На iOS-у креирајте UNNotificationAction и додајте у UNNotificationCategory. На Android-у користите NotificationCompat.Builder.addAction са PendingIntent за BroadcastReceiver. Свако дугме покреће засебну акцију у апликацији.

Закључак

  • Локална обавештења — поруке које уређај планира и доставља без серверске инфраструктуре
  • UNUserNotificationCenter — главни API за рад са локалним обавештењима на iOS-у
  • NotificationManager — главни API за рад са локалним обавештењима на Android-у
  • Врсте окидача — временски интервал, календарски датум, геолокација и безусловна достава
  • Лимити — iOS ограничава на 64 планирана захтева, Android нема строго ограничење
  • Дозволе — на iOS-у и Android 13+ потребна је експлицитна сагласност корисника за приказ обавештења
  • Офлајн — локална обавештења раде без интернет везе, што их чини поузданијим од push-а

Развићемо мобилну апликацију под кључ

IT Sectr креира iOS и Android апликације за стартапе и предузећа од 2017. године. Саветоваћемо вас и предложити најбоље решење.

Разговарајте о пројекту

Прочитајте такође