Удаление аккаунта в iOS-приложении: что проверить до Apple
Автор: Mehdi Azizi
Обновлено , 7 мин
Кнопка удаления, связанные данные, подписка и повторный вход: конкретный чек-лист, чтобы проверить этот сценарий до отправки в App Review.
Одной кнопки мало: нужно проверить, что именно исчезает
Если в твоём приложении можно создать аккаунт, Apple требует, чтобы человек мог запустить его удаление прямо из приложения. Простая деактивация это требование не выполняет. Сценарий должен легко находиться и объяснять последствия. Если часть процесса завершается в вебе, ссылка должна вести прямо на нужную страницу. Источник: удаление аккаунта по версии Apple.
Так что работа не заканчивается красной кнопкой в настройках. Нужно составить список данных, выполнить удаление на сервере, обработать ошибки и проверить, что пользователь видит потом. В этом гайде я предлагаю продуктовый и технический чек-лист. Данные, которые ты обязан хранить по закону, требуют обработки с учётом твоей деятельности.
Начни с карты данных
Возьмём выдуманное приложение-дневник чтения. В нём есть аккаунт, профиль, личные заметки и фото обложек, которые добавляет пользователь. Пример ниже описывает план для проверки, а не удаление, уже реализованное в каком-то приложении Devoria.
- Данные для входа: как сделать аккаунт непригодным после удаления?
- Профиль и заметки: какие строки принадлежат этому человеку и как они удаляются?
- Сохранённые фото: какой процесс удаляет файлы и ссылки на них?
- Кэш на телефоне: стирает ли экран локальные данные, когда операция действительно завершилась?
- Сторонние сервисы: нужно ли отдельно удалять данные, связанные с этим аккаунтом?
- Данные, которые нужно хранить: какие, по какому обязательству и как об этом сообщается пользователю?
Такая карта спасает от сюрприза, когда фото всё ещё доступно, а запись пользователя уже исчезла. Заодно она даёт тебе список объектов, которые нужно искать в тестах.
Понятный сценарий в четырёх состояниях
Вот вариант для выдуманного приложения. Адаптируй его под реальные последствия в твоём продукте:
- Настройки аккаунта. Пункт «Удалить аккаунт» всегда доступен.
- Подтверждение. Экран описывает затронутые данные и показывает действие отмены, такое же понятное, как действие удаления.
- Обработка. Кнопка защищает от двойных запросов, а интерфейс показывает, что операция идёт.
- Результат. Подтверждённый успех открывает состояние «не в аккаунте». При ошибке остаётся полезное сообщение и способ повторить попытку, без заявлений, что аккаунт удалён.
Если обработка занимает время, Apple принимает отложенный сценарий при условии, что ты сообщаешь об этом человеку и подтверждаешь завершение. Приложение не должно создавать впечатление, что удаление закончено, когда записан только запрос. В той же документации Apple описаны случаи повторной аутентификации и исключения для строго регулируемых сфер.
Что предусмотреть с Supabase
Удаление пользователя в Auth само по себе не доказывает, что все объекты твоего продукта обработаны. Supabase, в частности, объясняет, что пользователя, которому принадлежат объекты в Storage, нельзя удалить, пока это не решено. В документации также сказано, что удаление пользователя не разлогинивает мгновенно все уже выданные JWT: их срок действия нужно учитывать при проектировании. Источник: управление пользователями в Supabase.
Поэтому сделай серверную обработку, которая проверяет личность того, кто делает запрос, и принадлежащие ему ресурсы. Не полагайся на идентификатор, который телефон присылает как угодно, чтобы выбрать аккаунт для удаления. Права администратора остаются на сервере, как указано в документации по ключам Supabase.
Если обработка идёт в несколько шагов, реши, что должна делать повторная попытка, если первый шаг прошёл, а следующий упал. Например, если файлы уже удалены, новый запрос не должен падать только потому, что их нет. Этот сценарий надо прописать до теста, а не додумывать.
Аккаунт и подписка: две отдельные проверки
Человек может удалить аккаунт, а подписка Apple при этом продолжится. Apple требует объяснить, что будет с оплатой, и дать доступ к управлению подпиской. Если используешь Sign in with Apple, предусмотри и правильный отзыв токенов. Подробности в рекомендациях Apple по удалению.
Поэтому в плане тестирования разделяй исчезновение аккаунта, состояние платного доступа и управление подпиской. Гайд подписка или разовая покупка поможет вписать этот сценарий в твою бизнес-модель.
Чек-лист для тестовой сборки
Используй только тестовый аккаунт и выдуманные данные. Записывай сборку, устройство, наблюдаемый результат и ограничения каждой проверки.
- Отменить. Аккаунт и данные остаются доступны.
- Удалить заполненный аккаунт. Итоговое состояние соответствует заявленной обработке, затронутые данные действительно удалены.
- Отключить сеть. Приложение не показывает ложный успех.
- Повторить после частичной ошибки. Запрос может завершиться, не задев чужие данные.
- Открыть вторую сессию. Старые доступы обрабатываются согласно предусмотренному механизму.
- Создать аккаунт заново с тем же адресом, если это разрешено. Старые личные данные не появляются снова.
Добавь эти кейсы в чек-лист тестирования Devoria. Чтобы раздать их тестировщикам, следуй гайду по TestFlight. Отсутствие ошибок в консоли не заменяет проверку данных и сценария.
Подготовка к отправке в App Review
В заметках для ревью объясни, где находится действие и как его проверить. Если какой-то шаг зависит от сервиса, убедись, что он доступен во время ревью. Не используй заметки, чтобы обещать функцию, которой ещё нет в отправленной сборке.
Страница приложение отклонено Apple поможет выстроить ответ, если проблема уже обнаружена. Чтобы его подготовить, Apple Review Kit поможет найти цитируемое правило, понять, что оно требует, и даст пример исправления и ответа.
Если готовишь первую отправку, бесплатная диагностика покажет, что осталось сделать, и пришлёт мой чек-лист против отказов Apple, включая удаление аккаунта. Если Apple уже отклонила твоё приложение, забронируй час со мной: разберём сообщение вместе по видеосвязи.
Частые вопросы
Обязательно ли удаление аккаунта в iOS-приложении?
Да, если в приложении можно создать аккаунт: Apple требует, чтобы человек мог запустить его удаление из приложения. Простая деактивация это требование не выполняет. Сценарий должен легко находиться и объяснять последствия. Если часть процесса завершается в вебе, ссылка должна вести прямо на нужную страницу.
Что нужно удалять, когда пользователь удаляет аккаунт?
Всё, что принадлежит человеку, а не только запись пользователя. Составь список: данные для входа, профиль и созданный контент, сохранённые файлы и ссылки на них, кэш на телефоне, данные в сторонних сервисах. Отметь и данные, которые нужно хранить, по какому обязательству, и сообщи об этом человеку. Без такого списка фото может остаться доступным, хотя запись пользователя уже исчезла.
Принимает ли Apple удаление аккаунта не сразу?
Да. Если обработка занимает время, Apple принимает отложенный сценарий при условии, что ты сообщаешь об этом человеку и подтверждаешь завершение. Приложение не должно создавать впечатление, что удаление закончено, когда записан только запрос. При ошибке оставь полезное сообщение и способ повторить, без заявлений, что аккаунт удалён.
Что происходит с подпиской, когда пользователь удаляет аккаунт?
Подписка Apple может продолжаться после удаления аккаунта. Apple требует объяснить, что будет с оплатой, и дать доступ к управлению подпиской. Если используешь Sign in with Apple, предусмотри и правильный отзыв токенов. В плане тестирования разделяй исчезновение аккаунта, состояние платного доступа и управление подпиской.
Достаточно ли удалить пользователя в Supabase Auth?
Нет, удаление пользователя в Auth не доказывает, что все объекты твоего продукта обработаны. Согласно документации Supabase, пользователя, которому принадлежат объекты в Storage, нельзя удалить, пока это не решено. И удаление пользователя не разлогинивает мгновенно все уже выданные JWT. Сделай серверную обработку, которая проверяет личность того, кто делает запрос.
Как протестировать удаление аккаунта перед отправкой в Apple?
Используй тестовый аккаунт и выдуманные данные на тестовой сборке. Прогони шесть кейсов: отмена, удаление заполненного аккаунта, отключение сети, повтор после частичной ошибки, вторая сессия, повторное создание аккаунта с тем же адресом, если это разрешено. Проверяй данные и сценарий: отсутствия ошибок в консоли недостаточно. Чтобы раздать сборку, следуй гайду по TestFlight.