Реалізація права на видалення даних (Right to Erasure) у мобільному додатку

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

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1735 послуг
Реалізація права на видалення даних (Right to Erasure) у мобільному додатку
Середній
від 1 дня до 3 днів
Часті запитання

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

Етапи розробки

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    495

Реалізація права на видалення даних (Right to Erasure) у мобільному додатку

Кнопка «Видалити аккаунт» — одна з найбільш недооцінених вимог. App Store з 2022 року зобов'язує всі додатки з аккаунтами надавати можливість видалення прямо з додатку (не через форму на сайті). Google Play — аналогічно. Й GDPR, й CCPA дають користувачу право на це видалення.

Технічно «видалити аккаунт» — це не одна SQL-команда. Це каскадний процес, який при неправильній реалізації або видаляє не все, або видаляє те, що видаляти не можна.

Що потрібно видалити, а що не можна

Дані діляться на три категорії:

Видалити негайно: профіль користувача (ім'я, email, фото), історія дій, контент, створений користувачем, маркери аутентифікації, push-маркери, дані аналітичних систем (через API цих систем).

Анонімізувати, не видаляти: агреговані метрики (кількість покупок впливає на бізнес-статистику), контент, з яким взаємодіяли інші користувачі (коментарі можна замінити на «Видалений користувач»).

Зберігати всупереч запиту: фінансові трансакції (вимоги податкового законодавства, зазвичай 5–7 років), дані по судових утриманнях, дані необхідні для розслідування шахрайства.

Архітектура процесу видалення

Видалення не повинно бути синхронним — особливо якщо дані розкидані по кількох сервісах. Правильна схема: запит → черга → асинхронне виконання → підтвердження.

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)
    }
}

Grace period (30 днів) — це можливість відновити аккаунт, якщо користувач передумав. Протягом цього періоду дані заморожені, але не видалені. За істечення — автоматичне видалення.

Видалення з сторонніх систем

Кожен SDK, який отримував дані користувача, повинен їх видалити:

class ThirdPartyDeletionStep(private val userId: String) : DeletionStep {

    override suspend fun execute(): DeletionResult {
        val results = coroutineScope {
            listOf(
                async { deleteFromAmplitude(userId) },
                async { deleteFromBraze(userId) },
                async { deleteFromFirebaseAnalytics(userId) },
                async { deleteFromIntercom(userId) }
            ).awaitAll()
        }

        return if (results.all { it.success }) {
            DeletionResult.Success
        } else {
            DeletionResult.PartialFailure(results.filter { !it.success })
        }
    }

    private suspend fun deleteFromAmplitude(userId: String): ServiceDeletionResult {
        // Amplitude GDPR API
        val response = amplitudeApi.deleteUser(
            AmplitudeDeletionRequest(userId = userId, requesterEmail = "[email protected]")
        )
        return ServiceDeletionResult("amplitude", response.isSuccessful)
    }
}

Важливо: у Firebase немає прямого API для видалення Analytics даних конкретного користувача — тільки через resetAnalyticsData() на пристрої + запит через Firebase Console/API для серверних даних. Це обмеження потрібно враховувати при GDPR оцінці Firebase як субпроцессора.

Мобільний клієнт: що відбувається на пристрої

При підтвердженні видалення — негайна очищення на пристрої, не очікування серверного 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 з кодом підтвердження для чутливих аккаунтів

Підтвердження завершення

За GDPR: відповідь на запит на видалення — протягом 30 днів. Користувач повинен отримати підтвердження, що видалення виконано. Якщо повне видалення неможливе по юридичним основам — пояснення, що саме та чому зберігається.

Терміни: базова реалізація (UI + локальне видалення + серверна черга): 1–2 дні. З видаленням з усіх субпроцессорів та задокументованим процесом для GDPR: 2–3 дні.