# Guideline 1.2 User-Generated Content: co Apple vyžaduje

> Guideline 1.2: když uživatelé publikují obsah, potřebuješ filtr, nahlašování, blokování, kontakt a odsouhlasené podmínky. Checklist pro Expo a Supabase.

Původní stránka: [Guideline 1.2 User-Generated Content: co Apple vyžaduje](https://devoria.fr/cs/blog/guideline-1-2-user-generated-content-apple)
Autor: [Mehdi Azizi](https://devoria.fr/cs/mehdi-azizi)
Publikováno: 2026-11-04
Poslední revize obsahu: 2026-11-04


Guideline 1.2 platí, jakmile uživatelé publikují něco, co vidí ostatní: zprávu, fotku, recenzi a podle mě i obyčejnou přezdívku v žebříčku. Text Applu pak vyžaduje filtr, nahlašování s rychlou reakcí, blokování a zveřejněný kontakt. **Zamítací zprávy přidávají pátý požadavek: odsouhlasené podmínky použití, které netolerují ani nevhodný obsah, ani uživatele, kteří se chovají nevhodně.**

Tenhle návod nevypráví o zamítnutí. Ukazuje, co jsem zavedl v TradaZenu, mé aplikaci na trénink tradingu, když její žebříčky začaly zobrazovat přezdívky, které si hráči sami vybrali. Pro celkový přehled důvodů zamítnutí si radši přečti, [proč Apple zamítá aplikace](https://devoria.fr/cs/blog/apple-zamitl-aplikaci-duvody).

## Co říká guideline 1.2?

Pravidlo 1.2, „User-Generated Content“, najdeš v sekci 1, „Safety“, v [App Review Guidelines](https://developer.apple.com/app-store/review/guidelines/#user-generated-content). Týká se aplikací s obsahem od uživatelů nebo se sociální sítí. Aby se předešlo zneužití, tyhle aplikace „must include“ čtyři ochrany:

- „A method for filtering objectionable material from being posted to the app“: **filtr, který zablokuje nevhodný obsah ještě před zveřejněním**.
- „A mechanism to report offensive content and timely responses to concerns“: možnost obsah nahlásit a rychlá reakce na nahlášení.
- „The ability to block abusive users from the service“: možnost zablokovat uživatele, který se chová nevhodně.
- „Published contact information so users can easily reach you“: zveřejněný kontakt, který se dá snadno najít.

Aktuální verze textu, aktualizovaná 8. června 2026, jde ještě dál. Připomíná, že je tvou odpovědností odstranit obsah, který porušuje pravidlo, tvé podmínky použití nebo pravidla komunity. Pokud Apple takový obsah najde, požádá tě o jeho odstranění a o plán nápravy a mezitím může aplikaci stáhnout.

Text taky vyjmenovává aplikace, které na App Store nepatří: ty, které slouží hlavně k pornografii, k náhodnému nebo anonymnímu chatu ve stylu Chatroulette, k hodnocení vzhledu skutečných lidí, k výhrůžkám nebo obtěžování. **Pro takové použití čtyři ochrany nestačí.** Pravidlo 1.2.1 přidává pravidla pro aplikace tvůrců, zejména ověření věku u obsahu, který přesahuje věkovou klasifikaci aplikace.

## Týká se to tvé aplikace?

Dotazník věkové klasifikace v App Store Connect nabízí dobrou definici. Mluví o [obsahu generovaném uživateli](https://developer.apple.com/help/app-store-connect/reference/app-information/age-ratings-values-and-definitions), když se v aplikaci široce šíří obsah vytvořený uživateli: videa, fotky, texty nebo audio. Zprávy mezi uživateli řeší zvlášť.

| Co vidí ostatní            | Týká se to?   |
| -------------------------- | ------------- |
| Zprávy mezi členy          | Ano           |
| Veřejné fotky nebo recenze | Ano           |
| Přezdívka v žebříčku       | Ano, podle mě |
| Soukromé poznámky          | Ne            |
| Obsah, který píšeš ty      | Ne            |

Apple přezdívky nezmiňuje. Přesto je beru jako obsah od uživatelů: kdokoli si může zvolit urážlivou a ostatní hráči ji uvidí. Tak jsem se rozhodl u žebříčků v TradaZenu.

## 5 mechanismů, které musíš naprogramovat, s Expo a Supabase

Zamítací zpráva 1.2, jak ji jeden vývojář zveřejnil na [fórech Applu](https://developer.apple.com/forums/thread/807358) koncem roku 2025, vyjmenovává očekávaná opatření. Začíná „Require that users agree to terms (EULA)“ a končí požadavkem na lhůtu: řešit nahlášení „within 24 hours“, tedy odstranit obsah a vyloučit jeho autora.

| Mechanismus           | Kde ho naprogramovat           |
| --------------------- | ------------------------------ |
| Odsouhlasené podmínky | Obrazovka a profil             |
| Filtr                 | Server, před zobrazením        |
| Nahlašování           | Tlačítko a tabulka             |
| Blokování             | Tabulka a pravidlo přístupu    |
| Zveřejněný kontakt    | Aplikace a stránka v App Store |

Příklady SQL níže si uprav podle svého schématu. Opírají se o [pravidla přístupu na úrovni řádků v Supabase](https://supabase.com/docs/guides/database/postgres/row-level-security), která platí, i když někdo tvou aplikaci obejde.

### 1. Odsouhlasené podmínky, bez tolerance ke zneužití

Tvé podmínky použití musí černé na bílém říkat, že se netoleruje žádný nevhodný obsah ani uživatel, který se chová nevhodně. Příklad klauzule, nech si ji zkontrolovat, nejde o právní radu: „Netolerujeme žádný urážlivý, nenávistný, sexuální ani obtěžující obsah. Nahlášený obsah může být odstraněn a jeho autor vyloučen, bez předchozího upozornění.“

**Pasivní věta pod tlačítkem registrace souhlas nedokazuje: chtěj výslovný úkon.** Obrazovka s odkazem na podmínky a tlačítkem „Souhlasím“ před prvním příspěvkem. Ulož do profilu datum a verzi odsouhlasených podmínek a zakaž publikování, dokud chybí:

```sql
create policy "publikovat po souhlasu s podmínkami" 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. Filtr dřív, než obsah uvidí ostatní

Filtr běží na serveru, protože kód aplikace se dá obejít. Kopie v aplikaci slouží jen k tomu, aby uživatele hned upozornila.

V TradaZenu kontroluje každou přezdívku funkce v databázi a aplikace používá stejný seznam, aby hráče upozornila. Obojí držím stejné. Na straně serveru se urážlivá přezdívka při zápisu neodmítne: **při zobrazení se nahradí neutrální přezdívkou, takže nikoho nezablokuju kvůli falešnému poplachu**.

Falešné poplachy přijdou rychle. V TradaZenu první verze filtru cenzurovala jména jako Dominique, Monique nebo Véronique, protože obsahují kus sprostého slova. Oprava: hledat celá slova, ne jejich kusy. A protože se aplikace prodává i v japonštině a čínštině, filtr pokrývá i tyhle jazyky.

### 3. Nahlášení, vyřízené do 24 hodin

Každý zveřejněný obsah má tlačítko „Nahlásit“. V TradaZenu se přezdívka nahlášená v žebříčku ligy okamžitě zobrazí pod neutrálním označením, a to na telefonu toho, kdo ji nahlásil. Nahlášení pak odejde na server, a pokud je telefon offline, odešle se později znovu.

V databázi tabulka nahlášení, jedno na osobu a obsah:

```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 "moje nahlášení" on public.reports
for insert to authenticated
with check (auth.uid() = reporter_id);
```

V TradaZenu se **přezdívka nahlášená více hráči nahradí neutrální přezdívkou** a nahlášení se nahlášenému nikdy neukazují. Obecné opatření: identifikátor, podle kterého se nahlašuje, nesmí autor obsahu měnit, jinak by se mohl skrytí vyhnout.

Automatické skrytí nenahrazuje tvé rozhodnutí. Abys dodržel 24 hodin, nech se upozornit na každé nahlášení: [databázový webhook Supabase](https://supabase.com/docs/guides/database/webhooks) může zavolat serverovou funkci, která ti pošle zprávu. Klíč, kterým se obsah odstraňuje, zůstává na serveru, jak vysvětluju v článku [tajný API klíč v aplikaci Expo](https://devoria.fr/cs/blog/tajny-api-klic-aplikace-expo).

### 4. Blokování, které funguje okamžitě

Tabulka blokování a pak pravidlo přístupu, které odstraní obsah zablokovaných lidí z feedu toho, kdo blokuje:

```sql
create policy "bez zablokovaných" 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
  )
);
```

V TradaZenu si přítele přidáš pomocí kódu a můžeš ho odebrat a zablokovat. **Zablokovaný přítel zmizí ze seznamu, i kdyby znovu poslal žádost.**

### 5. Zveřejněný kontakt, snadno k nalezení

Dej kontaktní adresu do nastavení aplikace a do App Store Connect URL podpory, která opravdu funguje. V TradaZenu je adresa podpory v zásadách ochrany osobních údajů i v podmínkách použití. Co na těchto stránkách má být, najdeš v článku [zásady ochrany osobních údajů aplikace](https://devoria.fr/cs/blog/zasady-ochrany-osobnich-udaju-ios-aplikace).

Poslední věc: rozhodni, co se stane s obsahem člověka, který si smaže účet. `on delete cascade` výše smaže jeho nahlášení spolu s účtem. Celý postup je v článku [smazání účtu v iOS](https://devoria.fr/cs/blog/smazani-uctu-ios-aplikace-test-pred-apple).

## Co TradaZen uvádí ve svých zásadách

Tyhle mechanismy jsou veřejně popsané v zásadách ochrany osobních údajů TradaZenu, doplněných v září 2026 s příchodem lig a přátel: „Přezdívky procházejí automatickým filtrem; nevhodnou přezdívku můžeš v žebříčku nahlásit a přítele můžeš odebrat a zablokovat.“ Tytéž zásady uvádějí, že e-mail a deník se ostatním hráčům nikdy nezobrazují. Kontext aplikace najdeš v [případové studii TradaZen](https://devoria.fr/cs/blog/pripadova-studie-tradazen-spustit-aplikaci-iphone).

## Co odpovědět Applu po zamítnutí 1.2

Řekni revieweru, kde každý mechanismus najde, v odpovědi i v poznámkách k review. Tyhle funkce žijí v aplikaci: reviewer testuje kód zabudovaný v buildu, takže počítej s novým buildem. Postup, jak [odpovědět App Review](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/reply-to-app-review-messages/), je stejný jako u ostatních pravidel. Tady je šablona v angličtině, uprav si ji a nech v ní jen to, co v tvé aplikaci opravdu platí:

```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,
```

Pokud nějaký mechanismus v buildu chybí, odpověď stačit nebude. Stejně jako u [guideline 2.1](https://devoria.fr/cs/blog/guideline-2-1-zamitnuti-app-store) Apple posuzuje build, který má v rukou.

## Checklist 1.2 před odesláním

- Sepsal sis všechno, co uživatel publikuje a co vidí ostatní, včetně přezdívek.
- Tvé podmínky zakazují nevhodný obsah a zneužívání a aplikace vyžaduje výslovné „Souhlasím“.
- Filtr běží na serveru, hledá celá slova a pokrývá jazyky tvé stránky v App Store.
- Každý obsah má tlačítko „Nahlásit“ a každé nahlášení tě okamžitě upozorní.
- Umíš odstranit obsah a vyloučit jeho autora za méně než 24 hodin.
- Zablokování uživatele okamžitě odstraní jeho obsah.
- Kontaktní adresa je v aplikaci vidět a URL podpory funguje.
- Dotazník věkové klasifikace uvádí obsah od uživatelů, a zprávy, pokud je tvá aplikace má.
- Poznámky k review říkají, kde každý mechanismus najít, a obsahují demo účet.

## Oprav zamítnutí, než aplikaci pošleš znovu

Pokud ti právě zamítli aplikaci kvůli 1.2, [Review Kit](https://devoria.fr/cs/kits/app-review) shrnuje, co kontroluju před každým odesláním, se dvěma skilly, které projdou tvůj projekt v Claude Code a připraví odpověď, když Apple zamítne. Pokud chceš lidský pohled, [rezervuj si se mnou hodinu](https://devoria.fr/cs/coaching): projdeme zprávu spolu a podíváme se na tvůj proces moderace. Celý postup po zamítnutí je na stránce [aplikace zamítnutá Applem](https://devoria.fr/cs/expertise/aplikace-zamitnuta-applem).

Pokud chystáš své první vydání, [udělej si bezplatnou diagnostiku](https://devoria.fr/cs/diagnostic): řekne ti, do kterého kroku se pustit nejdřív, a pošle ti můj checklist proti zamítnutí od Applu.

Nikdo nemůže zaručit, že Apple tvou aplikaci přijme. Těchhle pět dobře viditelných mechanismů ale aspoň tenhle důvod ze seznamu škrtne.

## Časté dotazy

### Co znamená „Guideline 1.2 - Safety - User-Generated Content“?

To je název zamítnutí ve zprávě od Applu. Znamená, že tvá aplikace zobrazuje obsah vytvořený uživateli bez všech očekávaných ochran: filtru, rychle vyřízeného nahlášení, blokování, zveřejněného kontaktu a odsouhlasených podmínek použití.

### Počítá se přezdívka v žebříčku jako obsah od uživatelů?

Text Applu to neříká. Já ji tak beru, protože přezdívku si hráč volí sám a vidí ji ostatní. V TradaZenu přezdívky v žebříčcích procházejí filtrem, dají se nahlásit a když dělají problémy, nahradí se neutrální přezdívkou.

### Je opravdu nutné vyřizovat nahlášení do 24 hodin?

To požaduje zamítací zpráva od Applu. Text pravidla mluví o rychlé reakci. Automatický filtr tedy nestačí: musí tu být někdo, kdo obsah odstraní a autora vyloučí. Automatické skrytí po několika nahlášeních ti mezitím pomůže to zvládnout.

### Musí se podmínky použití odsouhlasit přímo v aplikaci?

Je to nejjistější cesta. Zamítací zpráva požaduje, aby uživatelé odsouhlasili podmínky, které netolerují ani nevhodný obsah, ani uživatele, kteří se chovají nevhodně. Odkaz dole na stránce souhlas nedokazuje. Obrazovka s tlačítkem „Souhlasím“ před prvním příspěvkem nenechává žádné pochybnosti.

### Může aplikace pro anonymní chat projít guideline 1.2?

Aktuální text uvádí náhodný nebo anonymní chat mezi použitími, která na App Store nepatří. Aplikace, která slouží hlavně k tomu, může být stažena bez předchozího upozornění, i když má filtr, nahlašování a blokování.


## Tvůj projekt

[Review Kit](https://devoria.fr/cs/kits/app-review): Můj checklist pro review v App Store, moje opravená zamítnutí od Applu, checklist pro Google Play a tři skilly pro Claude Code. 1 199 Kč.

[iOS & Android Kit](https://devoria.fr/cs/kits/ios): Vytvoř si aplikaci pro iPhone a Android s Claude Code: startovní kód mých aplikací, cesta až do obchodů a všechny kity. 2 399 Kč.

[Diagnostika: co tě dělí od tvé iPhone aplikace](https://devoria.fr/cs/diagnostic): 7 otázek, 60 sekund: zjistíš, co ti doopravdy brání vydat iPhone aplikaci, dostaneš cestu ve 4 krocích a kit přesně pro tebe.
