Реализация Feature Discovery (выделение новых функций) в мобильном приложении

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.
Разработка и поддержка любых видов мобильных приложений:
Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Предлагаемые услуги
Показано 1 из 1 услугВсе 1735 услуг
Реализация Feature Discovery (выделение новых функций) в мобильном приложении
Средняя
от 1 рабочего дня до 3 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1052
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    862
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    445

Реализация Feature Discovery (выделение новых функций) в мобильном приложении

Пользователь обновил приложение. Новая вкладка появилась в Tab Bar. Он её не замечает — потому что смотрит туда, куда привык. Feature discovery решает эту проблему: визуально привлекает внимание к новому элементу в момент, когда пользователь впервые видит обновлённый экран.

Что такое feature discovery технически

Это анимированный визуальный эффект поверх или вокруг целевого UI-элемента: пульсирующий badge, расширяющееся кольцо, мерцающая обводка. Принципиально отличается от coach marks тем, что не перекрывает интерфейс — пользователь может взаимодействовать с остальными элементами. Attention-grabber, а не блокировщик.

Google реализовал это в Material Design через компонент FeatureHighlight в старых версиях Material Components. В текущем Material3 его нет в явном виде, но паттерн остался.

Пульсирующий badge и ring-анимация

iOS. Пульсирующий кружок — CALayer с CABasicAnimation на transform.scale и opacity. Ключевая деталь: расширяющееся кольцо создаётся через два слоя — внутренний остаётся, внешний анимируется от scale 1.0 до 2.5 с opacity от 1.0 до 0.0 в бесконечном цикле (repeatCount = .infinity). CAAnimationGroup синхронизирует обе анимации.

let scaleAnimation = CABasicAnimation(keyPath: "transform.scale")
scaleAnimation.fromValue = 1.0
scaleAnimation.toValue = 2.5
let opacityAnimation = CABasicAnimation(keyPath: "opacity")
opacityAnimation.fromValue = 0.8
opacityAnimation.toValue = 0.0
let group = CAAnimationGroup()
group.animations = [scaleAnimation, opacityAnimation]
group.duration = 1.5
group.repeatCount = .infinity
pulseLayer.add(group, forKey: "pulse")

Слой добавляется поверх target view через targetView.layer.addSublayer(pulseLayer) или в superview.layer если нужен эффект за пределами bounds целевого view.

В SwiftUI — withAnimation(.easeOut(duration: 1.5).repeatForever(autoreverses: false)) на Circle().scale() в overlay. Чище и декларативнее, но repeatForever без autoreverses: false даёт эффект "туда-обратно" — не то что нужно для pulse.

Android Compose. InfiniteTransition + animateFloat:

val infiniteTransition = rememberInfiniteTransition()
val scale by infiniteTransition.animateFloat(
    initialValue = 1f, targetValue = 2.5f,
    animationSpec = infiniteRepeatable(tween(1500, easing = EaseOut), RepeatMode.Restart)
)

Material Design 3 Feature Highlight

Material3 предлагает FeatureHighlight как часть extended-компонентов (не в основной библиотеке). Для полноценной реализации в стиле Google — библиотека material-components-android-compose-theme-adapter или кастомный компонент.

Стандартный Material3 подход: круглый FloatingActionButton с extended описанием появляется рядом с новой функцией при первом показе экрана, исчезает через 4 секунды или по нажатию. Реализуется через AnimatedVisibility с slideInVertically + fadeIn и LaunchedEffect(Unit) с delay(4000L).

Управление видимостью и персистентность

Feature discovery показывается один раз — при первом появлении экрана после обновления. Логика:

let key = "feature_new_tab_v2_3_0_shown"
if !UserDefaults.standard.bool(forKey: key) {
    showFeatureDiscovery(for: newTabButton)
    UserDefaults.standard.set(true, forKey: key)
}

Ключ содержит версию (v2_3_0) — при следующем обновлении с новой функцией меняем ключ, пользователи снова увидят discovery. Хранить список показанных discovery в массиве [String] удобнее чем отдельные ключи для каждой фичи.

Задержка показа: 800–1000 мс после viewDidAppear / onAppear. Не показываем мгновенно — пользователь должен сначала увидеть экран в целом.

Комбинирование с другими механиками

Feature discovery часто идёт в паре с badge-счётчиком на иконке таба: красный кружок «NEW» пока пользователь не посетил новый раздел. На iOS — UITabBarItem.badgeValue = "NEW", убираем при tabBarController(_:didSelect:). В Compose — кастомный BadgedBox из Material3.

Если новая функция не в навигации, а внутри экрана — feature discovery комбинируем с Snackbar / Toast с action: «Попробуйте новый фильтр →». По нажатию — скролл к элементу + pulse анимация. UICollectionView.scrollToItem(at:at:animated:) затем с задержкой 300 мс — CALayer pulse.

Срок: 1–3 дня. Одиночный pulse-эффект на конкретном элементе — 1 день. Система с очередью discovery, конфигурацией по версии, несколькими типами анимаций и аналитикой показов — 3 дня.