# Guideline 1.2 User-Generated Content: что требует Apple

> Guideline 1.2: если пользователи что-то публикуют, нужны фильтр, жалобы, блокировка, контакт и принятые условия. Чек-лист для Expo и Supabase.

Оригинальная страница: [Guideline 1.2 User-Generated Content: что требует Apple](https://devoria.fr/ru/blog/guideline-1-2-user-generated-content-apple)
Автор: [Mehdi Azizi](https://devoria.fr/ru/mehdi-azizi)
Опубликовано: 2026-11-04
Последняя правка контента: 2026-11-04


Guideline 1.2 применяется, как только пользователи публикуют что-то, что видят другие: сообщение, фото, отзыв и, по-моему, даже простой ник в рейтинге. В таком случае текст Apple требует фильтр, жалобы с быстрой реакцией, блокировку и опубликованный контакт. **Сообщения об отказе добавляют пятое требование: принятые условия использования, которые не допускают ни оскорбительного контента, ни пользователей-нарушителей.**

Этот гайд не рассказывает историю отказа. Он показывает, что я сделал в TradaZen, моём приложении для тренировки трейдинга, когда в его рейтингах начали появляться ники, которые выбирают сами игроки. Общую картину причин отказа смотри в статье [почему Apple отклоняет приложение](https://devoria.fr/ru/blog/otkaz-apple-app-store-prichiny).

## Что говорит guideline 1.2?

Пункт 1.2, «User-Generated Content», находится в разделе 1, «Safety», [App Review Guidelines](https://developer.apple.com/app-store/review/guidelines/#user-generated-content). Он касается приложений с пользовательским контентом или социальным сервисом. Чтобы предотвратить злоупотребления, такие приложения «must include» четыре защиты:

- «A method for filtering objectionable material from being posted to the app»: **фильтр, который блокирует оскорбительный контент до публикации**.
- «A mechanism to report offensive content and timely responses to concerns»: способ пожаловаться на контент и быстрая реакция на жалобы.
- «The ability to block abusive users from the service»: возможность заблокировать пользователя-нарушителя.
- «Published contact information so users can easily reach you»: опубликованный контакт, который легко найти.

Текущая версия текста, обновлённая 8 июня 2026 года, идёт дальше. Она напоминает, что удалять контент, нарушающий правило, твои условия использования или правила сообщества, должен ты. Если Apple такой контент найдёт, тебя попросят его удалить и предоставить план улучшений, а приложение могут на это время снять.

Ещё текст перечисляет приложения, которым не место в App Store: те, что в основном служат для порнографии, случайного или анонимного чата в духе Chatroulette, оценки внешности реальных людей, угроз или травли. **Для таких сценариев четырёх защит недостаточно.** Пункт 1.2.1 добавляет правила для приложений авторов контента, в частности проверку возраста для контента, который выходит за возрастной рейтинг приложения.

## Касается ли это твоего приложения?

Хорошее определение даёт анкета возрастного рейтинга в App Store Connect. Она говорит о [пользовательском контенте](https://developer.apple.com/help/app-store-connect/reference/app-information/age-ratings-values-and-definitions), когда созданный пользователями контент широко распространяется в приложении: видео, фото, тексты или аудио. Переписку между пользователями она рассматривает отдельно.

| Что видят другие            | Касается?    |
| --------------------------- | ------------ |
| Сообщения между участниками | Да           |
| Публичные фото или отзывы   | Да           |
| Ник в рейтинге              | Да, по-моему |
| Личные заметки              | Нет          |
| Контент, написанный тобой   | Нет          |

Apple не упоминает ники. Но я считаю их пользовательским контентом: кто угодно может выбрать оскорбительный, и его увидят другие игроки. Такое решение я принял для рейтингов TradaZen.

## 5 механизмов, которые нужно написать, с Expo и Supabase

Сообщение об отказе по 1.2, которое один разработчик опубликовал на [форумах Apple](https://developer.apple.com/forums/thread/807358) в конце 2025 года, перечисляет ожидаемые меры. Оно начинается с «Require that users agree to terms (EULA)» и заканчивается требованием по срокам: реагировать на жалобы «within 24 hours», удаляя контент и исключая его автора.

| Механизм               | Где писать код                    |
| ---------------------- | --------------------------------- |
| Принятые условия       | Экран и профиль                   |
| Фильтр                 | Сервер, до показа                 |
| Жалоба                 | Кнопка и таблица                  |
| Блокировка             | Таблица и правило доступа         |
| Опубликованный контакт | Приложение и страница в App Store |

Примеры SQL ниже нужно адаптировать под твою схему. Они опираются на [построчные правила доступа Supabase](https://supabase.com/docs/guides/database/postgres/row-level-security), которые работают, даже если кто-то обходит твоё приложение.

### 1. Принятые условия, без терпимости к нарушениям

Твои условия использования должны прямо говорить, что оскорбительный контент и пользователи-нарушители не допускаются. Пример пункта (дай его проверить, это не юридическая консультация): «Оскорбительный, ненавистнический, сексуальный или травящий контент не допускается. Контент, на который пожаловались, может быть удалён, а его автор исключён без предупреждения».

**Пассивная фраза под кнопкой регистрации не доказывает согласие: требуй явного действия.** Экран со ссылкой на условия и кнопкой «Принимаю» перед первой публикацией. Сохрани дату и принятую версию в профиле и запрещай публикацию, пока их нет:

```sql
create policy "publier après les CGU" on public.posts
for insert to authenticated
with check (
  auth.uid() = author_id
  and exists (
    select 1 from public.profiles p
    where p.id = auth.uid() and p.cgu_acceptees_le is not null
  )
);
```

### 2. Фильтр до того, как контент увидят другие

Фильтр живёт на сервере, потому что код приложения можно обойти. Копия в приложении нужна только для того, чтобы сразу предупредить пользователя.

В TradaZen функция в базе проверяет каждый ник, а приложение применяет тот же список, чтобы предупредить игрока. Я держу оба списка одинаковыми. На сервере оскорбительный ник не отклоняется при записи: **он заменяется нейтральным ником при показе, так что никто не блокируется из-за ложного срабатывания**.

Ложные срабатывания случаются быстро. В TradaZen первая версия фильтра цензурировала имена вроде Dominique, Monique или Véronique, потому что в них есть кусок грубого слова. Исправление: искать целые слова, а не части слов. А поскольку приложение продаётся на японском и китайском, фильтр покрывает и эти языки.

### 3. Жалоба, обработанная за 24 часа

У каждого опубликованного контента есть кнопка «Пожаловаться». В TradaZen ник, на который пожаловались в рейтинге лиги, сразу показывается под нейтральной подписью на телефоне того, кто пожаловался. Затем жалоба уходит на сервер, а если телефон офлайн, отправляется позже.

В базе нужна таблица жалоб, по одной на человека и на единицу контента:

```sql
create table public.reports (
  id uuid primary key default gen_random_uuid(),
  reporter_id uuid not null references auth.users (id) on delete cascade,
  target_id uuid not null,
  reason text,
  created_at timestamptz not null default now(),
  unique (reporter_id, target_id)
);
alter table public.reports enable row level security;
create policy "mes signalements" on public.reports
for insert to authenticated
with check (auth.uid() = reporter_id);
```

В TradaZen **ник, на который пожаловались несколько игроков, заменяется нейтральным**, а жалобы никогда не показываются тому, на кого жалуются. Общая предосторожность: идентификатор, по которому идёт жалоба, не должен меняться автором контента, иначе он сможет избежать скрытия.

Автоматическое скрытие не заменяет твоего решения. Чтобы уложиться в 24 часа, получай уведомление о каждой жалобе: [webhook базы данных Supabase](https://supabase.com/docs/guides/database/webhooks) может вызвать серверную функцию, которая пришлёт тебе сообщение. Ключ, позволяющий удалять контент, остаётся на сервере, как я объясняю в статье [секретный API-ключ в приложении Expo](https://devoria.fr/ru/blog/sekretnyj-api-klyuch-expo-prilozhenie).

### 4. Блокировка, которая действует сразу

Таблица блокировок, затем правило доступа, которое убирает контент заблокированных из ленты того, кто заблокировал:

```sql
create policy "sans les bloqués" on public.posts
for select to authenticated
using (
  not exists (
    select 1 from public.blocks b
    where b.blocker_id = auth.uid() and b.blocked_id = posts.author_id
  )
);
```

В TradaZen друга добавляют по коду, и его можно удалить и заблокировать. **Заблокированный друг исчезает из списка, даже если снова отправит запрос.**

### 5. Опубликованный контакт, который легко найти

Укажи контактный адрес в настройках приложения и рабочий URL поддержки в App Store Connect. В TradaZen адрес поддержки есть в политике конфиденциальности и в условиях использования. Что должно быть на этих страницах, смотри в статье [политика конфиденциальности приложения](https://devoria.fr/ru/blog/privacy-policy-ios-app-guide).

Последний момент: реши, что происходит с контентом человека, который удаляет аккаунт. `on delete cascade` выше удаляет его жалобы вместе с аккаунтом. Полный рецепт в статье [удаление аккаунта в iOS](https://devoria.fr/ru/blog/udalenie-akkaunta-ios-prilozhenie-app-review).

## Что TradaZen пишет в своей политике

Эти механизмы публично описаны в политике конфиденциальности TradaZen, дополненной в сентябре 2026 года с появлением лиг и друзей: «Ники проходят через автоматический фильтр; ты можешь пожаловаться на неподходящий ник в рейтинге, а также удалить и заблокировать друга». Та же политика уточняет, что e-mail и журнал никогда не показываются другим игрокам. Контекст приложения есть в [кейсе TradaZen](https://devoria.fr/ru/blog/tradazen-case-study-launch-iphone-app).

## Что ответить Apple после отказа по 1.2

Скажи ревьюеру, где найти каждый механизм, в ответе и в заметках для проверки. Эти функции живут в приложении: ревьюер тестирует код, встроенный в билд, так что готовь новый билд. Процедура, как [ответить App Review](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/reply-to-app-review-messages/), та же, что и для других правил. Вот шаблон на английском, адаптируй его и оставь только то, что правда есть в твоём приложении:

```text
Hello,

Thank you for your review. Build X includes the precautions
listed in Guideline 1.2:

- Terms: users accept our terms, with zero tolerance for
  objectionable content and abusive users, before posting.
- Filter: posts and usernames are checked on our server
  before other users can see them.
- Report: tap "..." on any post, then "Report".
- Block: tap "..." on any post, then "Block user". Their
  content disappears immediately.
- Reports notify us instantly; we act on them within 24 hours.
- Contact: Settings > Contact us, and our support URL.

Best regards,
```

Если какого-то механизма в билде нет, одного ответа не хватит. Как и с [guideline 2.1](https://devoria.fr/ru/blog/guideline-2-1-app-store-otkaz), Apple оценивает тот билд, который у него в руках.

## Чек-лист по 1.2 перед отправкой

- Ты перечислил всё, что пользователь публикует и что видят другие, включая ники.
- Твои условия запрещают оскорбительный контент и нарушения, а приложение требует явного «Принимаю».
- Фильтр работает на сервере, ищет целые слова и покрывает языки твоей страницы в магазине.
- У каждого контента есть кнопка «Пожаловаться», и каждая жалоба сразу тебя уведомляет.
- Ты умеешь удалить контент и исключить автора меньше чем за 24 часа.
- Блокировка пользователя сразу убирает его контент.
- Контактный адрес виден в приложении, а URL поддержки работает.
- Анкета возрастного рейтинга указывает пользовательский контент и переписку, если она есть в приложении.
- Заметки для проверки говорят, где найти каждый механизм, и содержат демо-аккаунт.

## Исправь отказ перед повторной отправкой

Если твоё приложение только что отклонили по 1.2, [Review Kit](https://devoria.fr/ru/kits/app-review) собирает всё, что я проверяю перед каждой отправкой, плюс два skill, которые проверяют твой проект в Claude Code и готовят ответ, если Apple откажет. Если нужен живой взгляд, [забронируй час со мной](https://devoria.fr/ru/coaching): разберём сообщение вместе и посмотрим твой процесс модерации. Полный порядок действий после отказа есть на странице [приложение отклонено Apple](https://devoria.fr/ru/expertise/app-rejected-by-apple).

Если готовишь первый релиз, [пройди бесплатную диагностику](https://devoria.fr/ru/diagnostic): она подскажет, с какого шага начать, и пришлёт мой чек-лист против отказов Apple.

Никто не может гарантировать, что Apple примет твоё приложение. Но эти пять механизмов, хорошо заметных, хотя бы убирают эту причину из списка.

## Частые вопросы

### Что значит «Guideline 1.2 - Safety - User-Generated Content»?

Это название отказа в сообщении Apple. Оно значит, что твоё приложение показывает созданный пользователями контент без всех ожидаемых защит: фильтра, быстро обрабатываемых жалоб, блокировки, опубликованного контакта и принятых условий использования.

### Считается ли ник в рейтинге пользовательским контентом?

Текст Apple этого не говорит. Я считаю, что да, потому что ник выбирается свободно и его видят другие игроки. В TradaZen ники в рейтингах проходят через фильтр, на них можно пожаловаться, и при проблеме они заменяются нейтральным ником.

### Правда ли нужно обрабатывать жалобы за 24 часа?

Этого требует сообщение Apple об отказе. В тексте правила говорится о быстрой реакции. Значит, одного автоматического фильтра мало: нужен человек, который удалит контент и исключит автора. Автоматическое скрытие после нескольких жалоб помогает продержаться до этого.

### Нужно ли принимать условия использования внутри приложения?

Это самый надёжный способ. Сообщение об отказе требует, чтобы пользователи принимали условия, которые не допускают ни оскорбительного контента, ни пользователей-нарушителей. Ссылка внизу страницы не доказывает согласие. Экран с кнопкой «Принимаю» перед первой публикацией не оставляет сомнений.

### Может ли приложение анонимного чата пройти guideline 1.2?

Текущий текст называет случайный или анонимный чат среди сценариев, которым не место в App Store. Приложение, которое в основном для этого и служит, могут снять без предупреждения, даже с фильтром, жалобами и блокировкой.


## Твой проект

[Review Kit](https://devoria.fr/ru/kits/app-review): Мой чек-лист для ревью в App Store, исправленные отказы Apple, чек-лист для Google Play и три скилла для Claude Code. 55 $.

[iOS & Android Kit](https://devoria.fr/ru/kits/ios): Создай своё приложение для iPhone и Android с Claude Code: стартовый код моих приложений, путь до публикации в сторах и все киты. 109 $.

[Диагностика: что отделяет тебя от твоего iPhone-приложения](https://devoria.fr/ru/diagnostic): 7 вопросов, 60 секунд: ты узнаешь, что на самом деле мешает тебе опубликовать iPhone-приложение, получишь путь из 4 этапов и подходящий тебе кит.
