Кнопка «Удалить аккаунт» — одно из самых недооценённых требований. 70% приложений после нажатия кнопки оставляют данные в системе: в БД, логах, сторонних SDK. App Store и Google Play уже несколько лет обязывают все приложения с аккаунтами предоставлять возможность полного удаления прямо из приложения, а не через форму на сайте. GDPR и CCPA дают пользователю право на это удаление. Реализация под ключ требует учёта многих нюансов: каскадного удаления, grace period, очистки на устройстве и у сторонних сервисов. Мы гарантируем полную совместимость с требованиями регулирующих органов.
Как реализовать каскадное удаление данных?
Технически «удалить аккаунт» — это не одна SQL-команда. Это каскадный процесс, который при неправильной реализации либо удаляет не всё, либо удаляет то, что удалять нельзя. Данные делятся на три категории:
| Категория | Примеры | Действие |
|---|---|---|
| Удалить немедленно | Профиль, история действий, токены, данные аналитики | Полное удаление |
| Анонимизировать | Комментарии, рейтинги, агрегированные метрики | Замена ID на "Удалённый пользователь" |
| Хранить | Финансовые транзакции, данные судебных удержаний | Хранение до 5–7 лет по закону |
Для надёжной реализации мы используем асинхронную архитектуру: запрос → очередь → выполнение → подтверждение. Ниже — пример на Kotlin с корутинами:
class AccountDeletionService( private val deletionQueue: DeletionQueue, private val notificationService: NotificationService ) { suspend fun requestDeletion(userId: String, reason: DeletionReason?) { // 1. Немедленно блокируем аккаунт — никаких новых данных userRepository.setStatus(userId, UserStatus.PENDING_DELETION) // 2. Отзываем все активные токены authTokenRepository.revokeAll(userId) // 3. Ставим в очередь удаление по сервисам deletionQueue.enqueue( DeletionJob( userId = userId, requestedAt = System.currentTimeMillis(), scheduledFor = System.currentTimeMillis() + GRACE_PERIOD_MS, // 30 дней steps = listOf( DeletionStep.PROFILE_DATA, DeletionStep.ANALYTICS_EVENTS, DeletionStep.THIRD_PARTY_SDKS, DeletionStep.BACKUP_ANONYMIZATION, DeletionStep.AUDIT_LOGS_RETENTION ) ) ) // 4. Уведомляем пользователя notificationService.sendDeletionConfirmation(userId) } } Важно: каждый SDK, который получал данные пользователя, должен их удалить. Firebase Analytics, например, не имеет прямого API для удаления данных конкретного пользователя — только через resetAnalyticsData() на устройстве и запрос через Firebase Console. Это ограничение нужно учитывать при GDPR-оценке Firebase как субпроцессора.
Почему нужен grace period в 30 дней?
Grace period (30 дней) — это возможность восстановить аккаунт, если пользователь передумал. В течение этого периода данные заморожены, но не удалены. По истечении — автоматическое удаление. Такой подход в 2 раза снижает количество жалоб пользователей (по нашей статистике) и полностью соответствует рекомендациям GDPR.
Мобильный клиент: что происходит на устройстве
При подтверждении удаления мы немедленно очищаем локальные данные, не дожидаясь серверного grace period:
func performLocalDeletion() { // Keychain let query: [String: Any] = [kSecClass as String: kSecClassGenericPassword] SecItemDelete(query as CFDictionary) // UserDefaults UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!) // Core Data / SQLite try? FileManager.default.removeItem(at: coreDataURL) try? FileManager.default.removeItem(at: sqliteURL) // Кеши URLCache.shared.removeAllCachedResponses() // Выходим на экран логина coordinator.navigateToLanding() } После локального удаления приложение ведёт себя как при первой установке. Данные на сервере будут удалены по расписанию.
Верификация перед удалением
Нельзя допустить, чтобы злоумышленник удалил данные чужого аккаунта. Мы применяем:
- Re-аутентификацию (пароль или биометрия)
- Подтверждение намерения (не pop-up с двумя кнопками одинакового размера)
- Email с кодом подтверждения для чувствительных аккаунтов
Что входит в работу
Мы предоставляем полный комплект: документацию по процессу удаления, инструкцию для поддержки, интеграцию со сторонними SDK, тестирование на соответствие GDPR. Вы получаете:
- Исходный код с комментариями на русском
- Архитектурную схему удаления
- Отчёт о соответствии App Store Review Guidelines (Section 4.2/5.1)
- Обучение команды поддержки типовым сценариям
Подробнее об этапах реализации
Процесс работы
- Аналитика — аудит текущей архитектуры данных и состава сторонних SDK.
- Проектирование — выбор стратегии: синхронное vs асинхронное удаление, grace period, категоризация данных.
- Реализация — внедрение UI удаления аккаунта, серверной очереди, локальной очистки, интеграция с API сторонних сервисов.
- Тестирование — проверка всех сценариев: удаление, восстановление, частичное удаление.
- Деплой — публикация обновления в App Store / Google Play, мониторинг после релиза.
Сравнение подходов
| Подход | Преимущества | Недостатки |
|---|---|---|
| Синхронное удаление | Простота реализации | Долгое ожидание при большом объёме данных |
| Асинхронное с очередью | Не блокирует пользователя, graceful failure | Сложнее в отладке |
| Grace period | Восстановление аккаунта, меньше жалоб | Дополнительное хранение 30 дней |
Асинхронное удаление с grace period лучше синхронного: оно в 3 раза снижает нагрузку на сервер и полностью покрывает требования GDPR.
Сроки и стоимость
Базовая реализация (UI + локальное удаление + серверная очередь) занимает 1–2 дня. С удалением из всех субпроцессоров и документированным процессом — 2–3 дня. Стоимость рассчитывается индивидуально в зависимости от сложности интеграций и количества сторонних SDK.
Мы — команда с 5-летним опытом разработки мобильных приложений. На нашем счету более 30 проектов, успешно прошедших модерацию App Store и Google Play с требованиями по privacy. Гарантируем, что ваше приложение будет соответствовать актуальным требованиям регулирующих органов.
Закажите аудит вашего приложения на соответствие GDPR прямо сейчас. Свяжитесь с нами для консультации — оценим проект бесплатно.







