Guideline 1.2 User-Generated Content: вимоги Apple
Автор: Mehdi Azizi
Опубліковано , 10 хв
Guideline 1.2: якщо користувачі щось публікують, потрібні фільтр, скарги, блокування, контакт і прийняті умови. Чек-лист для Expo і Supabase.
Guideline 1.2 застосовується щойно користувачі публікують щось, що бачать інші: повідомлення, фото, відгук і, як на мене, навіть простий нікнейм у рейтингу. Тоді текст Apple вимагає фільтр, скарги з швидкою реакцією, блокування і опублікований контакт. Повідомлення про відмову додають п'яту вимогу: прийняті умови використання, які не терплять ні образливого контенту, ні користувачів-порушників.
Цей гайд не розповідає про відмову. Він показує, що я впровадив у TradaZen, моєму застосунку для тренування трейдингу, коли в його рейтингах почали з'являтися нікнейми, вибрані гравцями. Загальний огляд причин відмов дивись у статті чому Apple відхиляє застосунок.
Що каже guideline 1.2?
Правило 1.2, «User-Generated Content», міститься в розділі 1, «Safety», App Review Guidelines. Воно стосується застосунків з контентом від користувачів або соціальною мережею. Щоб запобігти зловживанням, такі застосунки «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 дає гарне визначення. Вона говорить про контент, створений користувачами, коли створений користувачами контент широко поширюється в застосунку: відео, фото, тексти чи аудіо. Обмін повідомленнями між користувачами розглядається окремо.
| Що бачать інші | Стосується? |
|---|---|
| Повідомлення між учасниками | Так |
| Публічні фото чи відгуки | Так |
| Нікнейм у рейтингу | Так, на мою думку |
| Приватні нотатки | Ні |
| Контент, написаний тобою | Ні |
Apple не згадує нікнейми. Але я вважаю їх контентом користувачів: будь-хто може вибрати образливий, і його побачать інші гравці. Саме так я вирішив для рейтингів TradaZen.
5 механізмів, які треба закодити, з Expo і Supabase
Повідомлення про відмову за 1.2, яке один розробник опублікував на форумах Apple наприкінці 2025 року, перелічує очікувані заходи. Воно починається з «Require that users agree to terms (EULA)» і закінчується вимогою щодо термінів: реагувати на скарги «within 24 hours», видаляючи контент і виключаючи його автора.
| Механізм | Де кодити |
|---|---|
| Прийняті умови | Екран і профіль |
| Фільтр | Сервер, до показу |
| Скарга | Кнопка і таблиця |
| Блокування | Таблиця і правило доступу |
| Опублікований контакт | Застосунок і сторінка в App Store |
SQL-приклади нижче треба адаптувати під твою схему. Вони спираються на правила доступу на рівні рядків у Supabase, які діють навіть тоді, коли хтось обходить твій застосунок.
1. Прийняті умови без толерантності до зловживань
Твої умови використання мають чорним по білому казати, що образливий контент і користувачі-порушники не допускаються. Приклад пункту, який варто дати на перевірку (це не юридична порада): «Образливий, ненависницький, сексуальний або цькувальний контент не допускається. Контент, на який поскаржилися, може бути видалено, а його автора виключено без попередження».
Пасивна фраза під кнопкою реєстрації не доводить згоди: вимагай явної дії. Екран із посиланням на умови і кнопкою «Я приймаю» перед першою публікацією. Збережи дату й версію прийнятих умов у профілі, а потім забороняй публікацію, поки їх немає:
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 нікнейм, на який поскаржилися в рейтингу ліги, одразу показується під нейтральною назвою на телефоні того, хто скаржиться. Потім скарга йде на сервер, а якщо телефон офлайн, надсилається пізніше.
У базі: таблиця скарг, одна скарга від людини на один контент:
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 години, налаштуй сповіщення про кожну скаргу: вебхук бази даних Supabase може викликати серверну функцію, яка надішле тобі повідомлення. Ключ, що дозволяє видаляти контент, лишається на сервері, як я пояснюю в статті секретний API-ключ у застосунку Expo.
4. Блокування, яке діє одразу
Таблиця блокувань, а потім правило доступу, яке прибирає контент заблокованих людей зі стрічки того, хто блокує:
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 адреса підтримки є в політиці конфіденційності та в умовах використання. Що має бути на цих сторінках, дивись у статті політика конфіденційності застосунку.
Останнє: виріши, що станеться з контентом людини, яка видаляє акаунт. on delete cascade вище видаляє її скарги разом з акаунтом. Повний рецепт у статті видалення акаунта в iOS.
Що TradaZen показує у своїй політиці
Ці механізми публічно описані в політиці конфіденційності TradaZen, доповненій у вересні 2026 року з появою ліг і друзів: «Нікнейми проходять через автоматичний фільтр; ти можеш поскаржитися на неприйнятний нікнейм у рейтингу, а також видалити й заблокувати друга». Та сама політика уточнює, що e-mail і журнал ніколи не показуються іншим гравцям. Контекст застосунку є в кейсі TradaZen.
Що відповісти Apple після відмови за 1.2
Скажи рев'юеру, де знайти кожен механізм, і у відповіді, і в нотатках для перевірки. Ці функції живуть у застосунку: рев'юер тестує код, вбудований у білд, тож підготуй новий білд. Процедура, як відповісти App Review, така сама, як і для інших правил. Ось шаблон англійською, який треба адаптувати, лишивши тільки те, що справді є у твоєму застосунку:
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, Apple оцінює той білд, який має в руках.
Чек-лист 1.2 перед відправкою
- Ти переписав усе, що користувач публікує і що бачать інші, включно з нікнеймами.
- Твої умови забороняють образливий контент і зловживання, а застосунок вимагає явного «Я приймаю».
- Фільтр працює на сервері, шукає цілі слова й охоплює мови твоєї сторінки.
- Кожен контент має кнопку «Поскаржитися», і кожна скарга одразу тебе сповіщає.
- Ти вмієш видалити контент і виключити автора менш ніж за 24 години.
- Блокування користувача одразу прибирає його контент.
- Контактна адреса видна в застосунку, а URL підтримки працює.
- В анкеті вікового рейтингу вказано контент користувачів і обмін повідомленнями, якщо він є у твоєму застосунку.
- Нотатки для перевірки кажуть, де знайти кожен механізм, і містять демо-акаунт.
Виправ відмову, перш ніж надсилати застосунок знову
Якщо твій застосунок щойно відхилили за 1.2, Review Kit зібрав усе, що я перевіряю перед кожною відправкою, плюс два skills, які перечитують твій проєкт у Claude Code і готують відповідь, якщо Apple відмовить. Якщо потрібен людський погляд, забронюй годину зі мною: разом прочитаємо повідомлення і подивимося на твій процес модерації. Повний план дій після відмови є на сторінці застосунок відхилено Apple.
Якщо готуєш свій перший реліз, пройди безкоштовну діагностику: вона підкаже, з якого етапу почати, і надішле тобі мій чек-лист проти відмов Apple.
Ніхто не може гарантувати, що Apple прийме твій застосунок. Але ці п'ять механізмів, добре помітні, принаймні викреслюють цю причину зі списку.
Поширені запитання
Що означає «Guideline 1.2 - Safety - User-Generated Content»?
Це назва відмови в повідомленні Apple. Вона означає, що твій застосунок показує контент, створений користувачами, без усіх очікуваних видів захисту: фільтра, швидко оброблених скарг, блокування, опублікованого контакту і прийнятих умов використання.
Чи вважається нікнейм у рейтингу контентом користувача?
Текст Apple про це не каже. Я вважаю, що так, бо нікнейм вибирають вільно і його бачать інші гравці. У TradaZen нікнейми в рейтингах проходять через фільтр, на них можна поскаржитися, а якщо з ними проблема, їх замінює нейтральний нікнейм.
Чи справді треба обробляти скарги протягом 24 годин?
Саме цього вимагає повідомлення Apple про відмову. Текст правила говорить про швидку реакцію. Тож автоматичного фільтра недостатньо: потрібен хтось, хто видалить контент і виключить автора. Автоматичне приховування після кількох скарг допомагає протриматися до того часу.
Чи треба приймати умови використання саме в застосунку?
Це найнадійніший спосіб. Повідомлення про відмову вимагає, щоб користувачі прийняли умови, які не терплять ні образливого контенту, ні користувачів-порушників. Посилання внизу сторінки не доводить згоди. Екран із кнопкою «Я приймаю» перед першою публікацією не лишає сумнівів.
Чи може застосунок анонімного чату пройти guideline 1.2?
Поточний текст називає випадковий або анонімний чат серед того, чому не місце в App Store. Застосунок, який слугує переважно для цього, можуть зняти без попередження, навіть із фільтром, скаргами й блокуванням.

