In-App Update для Android: принудительное обновление

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

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

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
In-App Update для Android: принудительное обновление
Средний
от 4 часов до 2 дней
Часто задаваемые вопросы

Наши компетенции:

Этапы разработки

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    858
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    743
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1160
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1034
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    968
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    562

Ускоренное обновление Android-приложения с In-App Update API

Принудительное обновление для Android — инструмент Google Play, позволяющий доставлять патчи без действий пользователя. Пользователи не обновляются сами. По данным Play Console, среднее время установки — около 3 недель. Критический фикс ждёт пользователя 21 день. Этот API решает проблему напрямую. Принудительное обновление через Immediate-режим снижает долю устаревших версий до 5% уже за 48 часов. Наша команда накопила 7+ лет опыта в интеграции Android-механизмов обновлений. Мы реализовали данный инструмент в 40+ проектах. Стоимость базовой интеграции — от 15 000 рублей. Полный цикл с тестированием и CI/CD — от 35 000 рублей. Свяжитесь с нами для аудита: сократим время доставки критических патчей до нескольких минут.

Какой режим In-App Update выбрать?

Google Play In-App Update API, доступный через com.google.android.play:app-update-ktx, предоставляет два сценария. Минимальный Android SDK — уровень 21. Библиотека весит около 150 КБ и работает на Android 5.0 и выше.

Flexible update — фоновая загрузка, пользователь продолжает работу. Идеально для фичевых релизов. После завершения загрузки показывается снекбар с кнопкой «Перезапустить». Если пользователь его закрыл — нужно отдельно отслеживать InstallStatus.DOWNLOADED и показывать повторный запрос.

Immediate update — полноэкранный блокирующий интерфейс от Google Play. Приложение недоступно до завершения обновления. Используем при критических патчах: смена схемы шифрования, обязательная миграция БД, прекращение поддержки старого API бэкенда. Immediate update быстрее обычного ожидания: установка занимает 2-5 минут, а не 3 недели. Экономия на поддержке устаревших версий достигает 70%. По данным Google I/O 2023, install rate в Immediate-сценарии выше на 60-80%.

Характеристика Flexible Immediate
Блокировка приложения Нет Да
Подходит для Фичевые релизы Критические патчи
Время до обновления 3-7 дней Мгновенно
Уровень риска Низкий Средний (возможен отказ)

Что вызывает проблемы в реализации?

Самая частая ошибка — инициализировать AppUpdateManager без проверки доступности обновления. Метод appUpdateManager.appUpdateInfo возвращает Task<AppUpdateInfo>, и его нужно ждать асинхронно. Попытки вызвать startUpdateFlowForResult без готового AppUpdateInfo дают IllegalStateException в рантайме.

Второй частый баг — пропуск состояния когда обновление недоступно. Это проявляется на сборках из Firebase App Distribution и при работе с FakeAppUpdateManager. В продакшене этот путь недостижим, но в CI падают тесты.

Третья проблема — версионирование. Сравнение идёт по versionCode, не по versionName. Если несколько флейворов делят один versionCode, обновление не предложится. Это правило действует даже когда бинарники разные.

Реализация In-App Update под ключ

Интеграция начинается с аудита текущей схемы версионирования — проверяем, что versionCode монотонно возрастает и нет коллизий между флейворами. Затем добавляем зависимость и пишем UpdateManager-класс в слое domain (чистая архитектура — UI не знает о Play Services напрямую).

val appUpdateManager = AppUpdateManagerFactory.create(context)
val appUpdateInfoTask = appUpdateManager.appUpdateInfo

appUpdateInfoTask.addOnSuccessListener { info ->
    if (info.updateAvailability() == UpdateAvailability.UPDATE_AVAILABLE
        && info.isUpdateTypeAllowed(AppUpdateType.FLEXIBLE)
    ) {
        appUpdateManager.startUpdateFlowForResult(
            info, AppUpdateType.FLEXIBLE, activity, REQUEST_CODE_UPDATE
        )
    }
}

Для Immediate-сценария добавляем staleDays — принудительный апдейт включается только если обновление доступно более N дней. Рекомендуемый порог — от 3 до 7 дней для фичевых релизов. Это снижает раздражение пользователей при мелких патчах.

Обработка onResume критична. Если пользователь свернул приложение во время Flexible-загрузки и вернулся — проверяем installStatus и предлагаем рестарт. Без этого приложение работает на старом коде, хотя новый уже лежит на диске.

Обработка отмены принудительного обновления

Immediate update не означает, что пользователь точно обновится. Он может закрыть приложение — onActivityResult вернёт RESULT_CANCELED. Нужно корректно обрабатывать эту ветку: логировать событие и, возможно, показывать диалог с объяснением необходимости обновления. В некоторых случаях можно переключиться на Flexible update, если это допустимо. Получите консультацию по внедрению In-App Update, и мы предложим индивидуальное решение для вашего приложения.

Тестирование In-App Update с FakeAppUpdateManager

FakeAppUpdateManager из play-app-update позволяет эмулировать все состояния без публикации в Play Store. В Espresso-тестах можно прогнать полный цикл: доступность → начало загрузки → завершение → рестарт. Согласно Google Play In-App Update API documentation, без этого покрытия баги уходят в продакшен. Google Play показывает UI поверх приложения. Стандартные UI-тесты его не видят. Тестовый цикл в CI занимает 4-6 минут.

Этап Действие Ожидаемый результат
Mock-тест Установить updateAvailability=UPDATE_AVAILABLE Запускается flow обновления
Отказ Возвращаем RESULT_CANCELED Приложение работает, логируется отказ
Загрузка Эмулировать InstallStatus.DOWNLOADING Отображается прогресс
Завершение InstallStatus.DOWNLOADED Предложение перезапуска
Типичные ошибки при интеграции
  • Игнорирование асинхронности appUpdateInfo
  • Отсутствие обработки RESULT_CANCELED
  • Конфликт versionCode между флейворами

Процесс работы и сроки

  1. Аналитика — аудит версионирования, архитектуры и текущих зависимостей (1 день).
  2. Проектирование — выбор режимов, определение staleDays, написание интеграционных тестов (1-2 дня).
  3. Реализация — код UpdateManager, обработка onResume, логирование (1-2 дня).
  4. Тестирование — unit, integration, UI автоматизация (1 день).
  5. Деплой — публикация в Internal Testing, проверка на реальных устройствах (1 день).

Ориентировочный срок — от 2 до 5 рабочих дней в зависимости от сложности архитектуры.

Что входит в работу

  • Аудит текущей схемы версионирования
  • Реализация UpdateManager с обработкой всех состояний
  • Юнит-тесты и UI-тесты с FakeAppUpdateManager
  • Интеграция с CI/CD
  • Документация по эксплуатации
  • Поддержка в течение 2 недель после релиза

Свяжитесь с нами для точной оценки вашего проекта — мы предоставим детальный план и гарантируем результат.

Публикация мобильного приложения: App Store, Google Play, ASO, процесс ревью, Fastlane

Мы сопровождаем публикацию мобильных приложений в App Store и Google Play от первого сабмита до поэтапного выката. Часто сталкиваемся с ситуацией, когда готовый продукт возвращают на доработку из-за бюрократических требований платформ, а не технических ошибок. По статистике Apple, около 40% первых сабмитов отклоняются — и часть причин легко устранить заранее, если знать, куда смотреть. Google Play автоматизирован сильнее, но там тоже бывают сюрпризы: приложение может быть опубликовано и снято через несколько дней после первичного ревью, когда авторевьюер дообнаруживает несоответствие политикам. Разбираем типичные проблемы и показываем, как их обойти.

Почему App Store отклоняет приложения? Реальные причины

Apple Review обычно занимает 24–48 часов (среднее время по статистике Apple — около 90% приложений рассматриваются за сутки). Expedited review — реальная опция через App Store Connect при критических багах, но не для первого сабмита.

Частые причины отклонения, которые съедают время:

  • Guideline 2.1 — App Completeness. Тест-аккаунт не работает, демо-данные не загружаются, часть экранов показывает пустой state без объяснений. Ревьюер видит сломанное приложение. Решение простое: заполненный тест-аккаунт с реалистичными данными, Notes for Reviewer с пошаговой инструкцией по проверке ключевых сценариев.

  • Guideline 4.3 — Spam. Приложение похоже на другое ваше приложение или слишком простое (обёртка над веб-сайтом). Это одна из самых субъективных причин. Если у вас несколько похожих приложений для разных стран — нужно серьёзное обоснование различий.

  • Guideline 5.1.1 — Data Collection and Storage. Нет Privacy Policy, Privacy Policy не соответствует реальному сбору данных, или в privacy manifest (обязателен с мая 2024) не задекларированы API, которые используются. Privacy Manifest — PrivacyInfo.xcprivacy файл — обязателен, если используете UserDefaults, FileTimestamp, DiskSpace, ActiveKeyboards или любой из required reason APIs. Apple начала отклонять без него в текущем цикле.

  • Guideline 3.1.1 — Business — Payments. Внешние ссылки на оплату там, где должен быть IAP. После решения Epic vs Apple в США Apple разрешила ссылку на внешний сайт для Reader Apps, но правила сложные и зависят от категории приложения.

Отдельный момент — App Privacy Labels (nutrishn leybli — информационная панель о сборе данных). Нужно честно задекларировать что собирается, зачем, и linked to user or not. Ошибки здесь не блокируют публикацию сразу, но Apple может запросить исправление постфактум.

Как избежать отклонения по 5.1.1? Инструкция

Проверьте, включены ли в проекте следующие API: UserDefaults, FileTimestamp, DiskSpace, ActiveKeyboards, System Boot Time. Если да — обязательно добавьте PrivacyInfo.xcprivacy с указанием reasons. Шаблон можно взять из документации Apple. Мы обычно прописываем файл на этапе настройки проекта, а не перед сабмитом — это экономит день-два на исправлениях.

Google Play: автоматизация и скрытые сюрпризы

Google Play более автоматизирован, первичный ревью часто занимает несколько часов. Но есть нюансы.

  • Target SDK level — Google регулярно повышает требования. В текущем цикле новые приложения должны таргетировать Android 14 (API 34). Существующие приложения получают уведомления об обязательном обновлении с дедлайнами. Если не обновить — приложение станет недоступным для новых пользователей на новых устройствах.

  • 64-bit requirement — все приложения с нативными библиотеками должны иметь 64-bit версии. Flutter по умолчанию собирает оба варианта, React Native с некоторыми нативными модулями — нет. Проверяйте заранее, иначе придётся пересобирать бинарники.

  • Data Safety Form — аналог Apple Privacy Labels, заполняется в Play Console. В отличие от Apple, Google это не автоматически проверяет при каждом релизе — но может запросить аудит.

  • Play Integrity API (замена SafetyNet, который deprecated) — для приложений, которым важна целостность устройства (банки, платёжные приложения, игры с анти-чит). Требует сервера для верификации токена.

Что делать, если приложение сняли с публикации на третий день?

Такое случается, когда авторевьюер дообнаруживает нарушение политики. Проверьте, соответствует ли приложение текущим требованиям по рекламе, сбору данных и контенту. Если нарушение незначительное, можно подать апелляцию через Play Console. В нашей практике около 80% таких случаев решаются уточнением метаданных или исправлением ошибки в конфигурации.

ASO: App Store Optimization

ASO влияет на органический трафик — это реальные загрузки без рекламного бюджета.

Ключевые факторы ранжирования в App Store и Google Play:

  • Название приложения — самый весомый фактор. Ключевые слова в названии работают лучше всего. Ограничение: App Store — 30 символов, Google Play — 50.

  • Ключевые слова (App Store) — поле 100 символов, только для App Store, не отображается пользователям. Без пробелов после запятых (экономит символы), не дублируйте слова из названия.

  • Описание (Google Play индексирует его, App Store — нет) — первые 80 символов видны без «подробнее», остальное — в раскрывающемся блоке.

  • Визуальные материалы — иконка, скриншоты, preview-видео. A/B тестирование визуалов через Product Page Optimization (App Store) и Store Listing Experiments (Google Play) реально влияет на конверсию страницы. Разница между плохим и хорошим скриншотом — 15–30% конверсии.

  • Рейтинг и отзывы — алгоритм учитывает свежесть, а не только среднее. Активная работа с отзывами (ответы) сигнализирует платформе об активном приложении. SKStoreReviewRequest.requestReview() (iOS) и ReviewManager.requestReview() (Android) — запрашивайте отзыв в правильный момент: после позитивного события, не при первом запуске.

Fastlane: автоматизация публикации

Ручная публикация — сертификаты, provisioning profiles, сборка, загрузка в App Store Connect или Google Play Console — занимает час и легко ошибиться. Fastlane автоматизирует весь пайплайн.

Ключевые lanes:

  • match — управление сертификатами и provisioning profiles через зашифрованный Git-репозиторий. Вся команда использует одни сертификаты, нет проблем «сертификат истёк на машине разработчика». fastlane match appstore — синхронизация перед сборкой.

  • gym (build) — fastlane gym --scheme "AppName" --configuration Release --export_method app-store. Через Gymfile параметры фиксируются в репозитории.

  • deliver (upload to App Store) — загружает бинарник, метаданные, скриншоты. Скриншоты можно держать в репозитории через fastlane snapshot (автоматическая генерация через XCUITest).

  • supply — аналог deliver для Google Play, поддерживает all tracks (internal, alpha, beta, production) с rollout параметром для поэтапного выкатывания.

Типичный Fastfile:

lane :release_ios do
  match(type: "appstore")
  gym(scheme: "App")
  deliver(submit_for_review: true, automatic_release: false)
end

lane :release_android do
  gradle(task: "bundle", build_type: "Release")
  supply(track: "production", rollout: "0.1")
end

Интеграция с CI/CD: Fastlane + GitHub Actions или Bitrise — стандартный стек. Переменные среды для API ключей App Store Connect и Google Service Account. Код подписывается автоматически при мерже в main.

Поэтапный выкат и rollback

Google Play поддерживает постепенное развёртывание: rollout: "0.05" — 5% пользователей получают обновление сначала. Мониторим Crashlytics/Firebase Crashlytics, crash-free rate, ANR rate. Если показатели ухудшились — останавливаем rollout через Play Console без отзыва релиза.

App Store не имеет поэтапного выкатывания для обычных приложений (есть Phased Release для app updates — 7-дневный постепенный выкат). Для более гибкого управления используем feature flags (Firebase Remote Config, LaunchDarkly) — новый функционал выключен по умолчанию, включаем через конфиг без нового релиза.

Что входит в работу по публикации

Мы готовим полный комплект для выхода в сторах:

  • Создание и настройка аккаунтов разработчика (Apple Developer Program, Google Play Console) с корпоративными доступными.
  • Подготовка метаданных: название, описание, ключевые слова, категория, возрастной рейтинг.
  • Настройка Privacy Policy и App Privacy Labels / Data Safety Form.
  • Генерация и установка сертификатов, provisioning profiles (через match или вручную).
  • Сборка и подпись бинарника с правильной конфигурацией (Code Signing, ProGuard/R8).
  • Загрузка бинарника и метаданных с помощью Fastlane или вручную.
  • Прохождение ревью: анализ тикетов, апелляции при необходимости, корректировка.
  • Настройка поэтапного выката и мониторинг метрик после релиза.
  • Обучение команды работе с TestFlight / Firebase App Distribution.

Что мы не делаем

Не пишем код приложения, не занимаемся маркетингом (кроме ASO-рекомендаций), не регистрируем торговые марки. Наша зона — техническая подготовка к публикации и сопровождение до первого релиза.

Сроки и стоимость

Подготовка первого релиза: настройка аккаунтов, сертификатов, метаданных, скриншотов, Privacy Policy — от 3 до 5 рабочих дней при наличии всех материалов. Настройка Fastlane + CI/CD — от 2 до 3 дней. Ревью App Store — от 1 до 3 дней. Итого от готового приложения до публикации — от 1 до 2 недель.

Стоимость рассчитывается индивидуально: зависит от сложности интеграций, количества сторов и необходимости срочного ревью. Пишите — оценим ваш проект за один рабочий день.

Типичные ошибки, которые мы находим на аудите

Чек-лист: что проверить перед отправкой
  • [ ] Указаны все разрешения в манифесте (Android) или Info.plist (iOS) с пояснениями
  • [ ] Privacy Manifest (iOS) содержит все required reason APIs
  • [ ] Data Safety Form (Android) заполнена корректно
  • [ ] Тест-аккаунт активен и имеет реалистичные данные
  • [ ] Нет внешних ссылок на оплату внутри IAP-продуктов
  • [ ] Скриншоты соответствуют актуальной версии интерфейса
  • [ ] Версия билда инкрементирована
  • [ ] Код подписан правильным сертификатом (Distribution, не Development)
  • [ ] 64-bit сборка присутствует
  • [ ] Отсутствуют упоминания конкурентов в метаданных

Почему стоит доверить публикацию нам?

У нас 7+ лет опыта в мобильной разработке, более 50 успешно опубликованных приложений для iOS и Android. Знаем все подводные камни App Store Review Guidelines (разделы 4.2, 5.1) и политик Google Play. Используем Fastlane, CI/CD, автоматические проверки метаданных — чтобы вы не тратили время на рутину. Закажите консультацию — расскажем, как сократить цикл публикации вдвое.