Локални известия в мобилната разработка: същност, какви видове има и как работят

Автор: 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% повече потребители през първата седмица след инсталиране. Това прави локалните известия мощен инструмент за onboarding.

Важно е да не се злоупотребява с честотата — системата сама групира известията от едно приложение, а потребителят може да изключи всички локални известия, ако досаждат. Оптималната честота е не повече от 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 системата изпраща broadcast 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.

Често задавани въпроси

Каква е разликата между локално известие и 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 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също