Кнопка «Удалить аккаунт» — одно из самых недооценённых требований. 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 прямо сейчас. Свяжитесь с нами для консультации — оценим проект бесплатно.







