Налаштування сегментації push-сповіщень у мобільному додатку
Відправити однакове сповіщення всій базі — це не сегментація, це спам. CTR падає, відписки зростають, iOS починає обмежувати доставку через Apple's notification throttling для додатків з низьким engagement rate. Правильна сегментація — технічна задача, а не маркетингова.
Як працює сегментація на рівні SDK
Будь-яка платформа рассилок (OneSignal, Firebase, Braze, Airship) будує сегменти на основі двох джерел: атрибути користувача (теги, properties) та поведінкові дані (події, сессії, покупки).
На клієнті завдання одне — коректно передавати дані:
// Android — після кожної значущої дії
OneSignal.User.addTag("subscription_tier", "premium")
OneSignal.User.addTag("last_active_days", "0")
OneSignal.User.addTag("preferred_category", "electronics")
// При зміні локації (з дозволу користувача)
OneSignal.User.addTag("region", "UA-30") // ISO 3166-2
// iOS — те саме
OneSignal.User.addTag("onboarding_completed", "true")
OneSignal.User.addTag("cart_items_count", "\(cart.items.count)")
Теги — рядки. Усе порівняння серверне. Важливо: не відправляйте тег при кожному запуску додатку — це зайвий трафік. Відправляйте лише при зміні значення.
Поведінкові сегменти та тригери
Найчастіший кейс — тригерна відправка по події: користувач кинув кошик, не відкривав додаток 7 днів, пройшов онбординг але не здійснив першу дію.
Для цього потрібна серверна логіка. Мобільний клієнт лише фіксує events:
// Firebase Analytics — события автоматично доступні у Audience Builder
FirebaseAnalytics.getInstance(context).logEvent("checkout_started") {
param("cart_value", 1250.0)
param("items_count", 3L)
}
У Firebase Audiences можна побудувати сегмент: «користувачі, які запустили checkout_started але не запустили purchase_complete за останні 24 години» — і відправити їм сповіщення через FCM напряму або через Firebase In-App Messaging.
Якщо використовується Braze — там сегменти будуються через Canvas з умовними гілками. Клієнтська інтеграція через Braze SDK:
// iOS
Appboy.sharedInstance()?.logCustomEvent("item_viewed", withProperties: [
"item_id": "SKU-4892",
"category": "shoes"
])
Геосегментація
Геосегментація у push — не «знаходиться у Києві прямо зараз», а «регіон користувача з профілю» або геозони.
OneSignal підтримує автоматичне визначення локації при включеному setLocationShared(true). Але Apple та Google все жорсткіше ставляться до фонової геолокації. Надійніше — передавати регіон з профілю користувача як тег.
Для реальних геозон (сповіщення при вході в зону) — CoreLocation на iOS з CLLocationManager.startMonitoring(for:) або Geofencing API на Android через GeofencingClient. Це працює через local notifications або silent push для оновлення даних.
Сегменти за пристроями та платформами
// Відправити лише iOS-користувачам з версією додатку >= 3.0
{
"filters": [
{ "field": "device_type", "relation": "=", "value": "iOS" },
{ "operator": "AND" },
{ "field": "app_version", "relation": ">=", "value": "3.0" }
]
}
Це корисно при релізі фіч, доступної лише в новій версії — не відправляйте deep link на екран, якого немає в старому додатку.
Типічні помилки при налаштуванні сегментації
Теги пишуться непослідовно: одні розробники пишуть "true"/"false", інші "1"/"0", треті просто додають або видаляють тег. В результаті сегмент «користувачі з тегом notifications_enabled = true» не захоплює тих, у кого просто є цей тег без значення.
Краще зафіксувати схему тегів у окремому enum:
object UserTags {
const val SUBSCRIPTION = "subscription_tier"
const val REGION = "region_iso"
const val LAST_ORDER_DAYS = "last_order_days_ago"
fun updateLastOrderDays(daysSince: Int) {
OneSignal.User.addTag(LAST_ORDER_DAYS, daysSince.toString())
}
}
Терміни
Проектування схеми тегів та поведінкових подій, реалізація SDK-інтеграції на iOS + Android (або Flutter), налаштування автоматичних сегментів на стороні платформи — 5–8 робочих днів. Складні тригерні ланцюжки з серверною логікою (наприклад, Braze Canvas або власний cron-воркер) — від 2 тижнів.







