Guideline 1.2 User-Generated Content: čo Apple vyžaduje
Autor: Mehdi Azizi
Zverejnené , 10 min
Guideline 1.2: ak tvoji používatelia publikujú obsah, potrebuješ filter, nahlasovanie, blokovanie, kontakt a prijaté podmienky.
Guideline 1.2 platí hneď, ako používatelia publikujú niečo, čo vidia ostatní: správu, fotku, recenziu a podľa mňa aj obyčajnú prezývku v rebríčku. Apple vtedy vo svojom texte vyžaduje filter, nahlasovanie s rýchlou reakciou, blokovanie a zverejnený kontakt. Správy o zamietnutí pridávajú piatu požiadavku: prijaté podmienky používania, ktoré netolerujú ani nevhodný obsah, ani zneužívajúcich používateľov.
Tento návod nerozpráva príbeh zamietnutia. Ukazuje, čo som zaviedol v TradaZen, mojej appke na tréning tradingu, keď jej rebríčky začali zobrazovať prezývky, ktoré si zvolili hráči. Ak chceš prehľad dôvodov zamietnutia, prečítaj si radšej prečo Apple zamieta appky.
Čo hovorí guideline 1.2?
Pravidlo 1.2, „User-Generated Content“, nájdeš v sekcii 1, „Safety“, v App Review Guidelines. Týka sa appiek s obsahom od používateľov alebo so sociálnou sieťou. Aby sa predišlo zneužitiu, tieto appky „must include“ štyri ochrany:
- „A method for filtering objectionable material from being posted to the app“: filter, ktorý zablokuje nevhodný obsah ešte pred zverejnením.
- „A mechanism to report offensive content and timely responses to concerns“: spôsob, ako nahlásiť obsah, a rýchla reakcia na nahlásenia.
- „The ability to block abusive users from the service“: možnosť zablokovať zneužívajúceho používateľa.
- „Published contact information so users can easily reach you“: zverejnený kontakt, ktorý sa dá ľahko nájsť.
Aktuálna verzia textu, aktualizovaná 8. júna 2026, ide ešte ďalej. Pripomína, že je tvoja zodpovednosť odstrániť obsah, ktorý porušuje pravidlo, tvoje podmienky používania alebo pravidlá komunity. Ak Apple taký obsah nájde, požiada ťa o jeho odstránenie a o plán nápravy a medzitým môže appku stiahnuť.
Text tiež vymenúva appky, ktoré na App Store nepatria: tie, ktoré slúžia hlavne na pornografiu, náhodný alebo anonymný chat v štýle Chatroulette, hodnotenie vzhľadu skutočných ľudí, vyhrážky alebo obťažovanie. Pri takomto použití štyri ochrany nestačia. Pravidlo 1.2.1 pridáva pravidlá pre appky tvorcov, najmä overenie veku pri obsahu, ktorý presahuje vekovú klasifikáciu appky.
Týka sa to tvojej appky?
Dotazník vekovej klasifikácie v App Store Connect dáva dobrú definíciu. Hovorí o obsahu vytvorenom používateľmi, keď sa obsah od používateľov v appke široko šíri: videá, fotky, texty alebo audio. Správy medzi používateľmi rieši zvlášť.
| Čo vidia ostatní | Týka sa to? |
|---|---|
| Správy medzi členmi | Áno |
| Verejné fotky alebo recenzie | Áno |
| Prezývka v rebríčku | Podľa mňa áno |
| Súkromné poznámky | Nie |
| Obsah, ktorý píšeš ty | Nie |
Apple prezývky nespomína. Ja ich aj tak beriem ako obsah od používateľov: hocikto si môže zvoliť urážlivú a ostatní hráči ju uvidia. Tak som sa rozhodol pri rebríčkoch v TradaZen.
5 mechanizmov, ktoré treba naprogramovať, s Expo a Supabase
Správa o zamietnutí 1.2, ako ju koncom roka 2025 zverejnil jeden vývojár na fórach Apple, vymenúva očakávané opatrenia. Začína sa „Require that users agree to terms (EULA)“ a končí požiadavkou na lehotu: riešiť nahlásenia „within 24 hours“, odstrániť obsah a vylúčiť jeho autora.
| Mechanizmus | Kde ho naprogramovať |
|---|---|
| Prijaté podmienky | Obrazovka a profil |
| Filter | Server, pred zobrazením |
| Nahlasovanie | Tlačidlo a tabuľka |
| Blokovanie | Tabuľka a prístupové pravidlo |
| Zverejnený kontakt | Appka a stránka v App Store |
SQL príklady nižšie si prispôsob svojej schéme. Opierajú sa o pravidlá prístupu na úrovni riadkov v Supabase, ktoré platia, aj keď niekto tvoju appku obíde.
1. Prijaté podmienky bez tolerancie k zneužívaniu
Tvoje podmienky používania musia čierne na bielom povedať, že netolerujú žiadny nevhodný obsah ani zneužívajúcich používateľov. Príklad klauzuly, daj si ju skontrolovať, nie je to právna rada: „Netolerujeme žiadny urážlivý, nenávistný, sexuálny ani obťažujúci obsah. Nahlásený obsah môže byť odstránený a jeho autor vylúčený bez upozornenia.“
Pasívna veta pod tlačidlom registrácie súhlas nedokazuje: vyžaduj výslovný úkon. Obrazovka s odkazom na podmienky a tlačidlom „Súhlasím“ pred prvým príspevkom. Ulož do profilu dátum a verziu, ktorú používateľ prijal, a zakáž publikovanie, kým chýbajú:
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. Filter skôr, než obsah uvidia ostatní
Filter beží na serveri, pretože kód appky sa dá obísť. Kópia v appke slúži len na to, aby používateľa hneď upozornila.
V TradaZen každú prezývku kontroluje funkcia v databáze a appka používa ten istý zoznam, aby hráča upozornila. Oba držím rovnaké. Na strane servera sa urážlivá prezývka pri zápise neodmietne: pri zobrazení ju nahradí neutrálna prezývka, takže nikoho nezablokujem kvôli falošnému poplachu.
Falošné poplachy prídu rýchlo. V TradaZen prvá verzia filtra cenzurovala mená ako Dominique, Monique alebo Véronique, lebo obsahujú kúsok vulgárneho slova. Oprava: hľadať celé slová, nie časti slov. A keďže sa appka predáva aj v japončine a čínštine, filter pokrýva aj tieto jazyky.
3. Nahlásenie vybavené do 24 hodín
Každý zverejnený obsah má tlačidlo „Nahlásiť“. V TradaZen sa prezývka nahlásená v rebríčku ligy hneď zobrazí pod neutrálnym označením na telefóne toho, kto ju nahlásil. Nahlásenie potom odíde na server a ak je telefón offline, odošle sa neskôr.
V databáze tabuľka nahlásení, jedno na osobu a obsah:
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);
V TradaZen prezývku, ktorú nahlási viac hráčov, nahradí neutrálna prezývka, a nahlásenia sa nahlásenej osobe nikdy nezobrazia. Všeobecné opatrenie: identifikátor, ktorý sa používa pri nahlásení, nesmie autor obsahu vedieť zmeniť, inak by mohol skrytiu uniknúť.
Automatické skrytie nenahrádza tvoje rozhodnutie. Aby si stihol 24 hodín, nechaj sa upozorniť pri každom nahlásení: databázový webhook Supabase môže zavolať serverovú funkciu, ktorá ti pošle správu. Kľúč, ktorým sa obsah odstraňuje, zostáva na serveri, ako vysvetľujem v článku tajný API kľúč v Expo appke.
4. Blokovanie, ktoré funguje okamžite
Tabuľka blokovaní a potom prístupové pravidlo, ktoré odstráni obsah zablokovaných ľudí z feedu toho, kto blokuje:
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
)
);
V TradaZen si priateľa pridáš cez kód a môžeš ho odstrániť a zablokovať. Zablokovaný priateľ zmizne zo zoznamu, aj keď pošle novú žiadosť.
5. Zverejnený kontakt, ktorý sa dá ľahko nájsť
Daj kontaktnú adresu do nastavení appky a v App Store Connect URL podpory, ktorá naozaj odpovedá. V TradaZen je adresa podpory v zásadách ochrany súkromia aj v podmienkach používania. Čo majú tieto stránky obsahovať, nájdeš v článku zásady ochrany súkromia appky.
Posledný bod: rozhodni, čo sa stane s obsahom človeka, ktorý si zmaže účet. on delete cascade vyššie zmaže jeho nahlásenia spolu s účtom. Celý postup je v článku zmazanie účtu na iOS.
Čo TradaZen uvádza vo svojich zásadách
Tieto mechanizmy sú verejne opísané v zásadách ochrany súkromia TradaZen, doplnených v septembri 2026 s príchodom líg a priateľov: „Prezývky prechádzajú automatickým filtrom; nevhodnú prezývku môžeš v rebríčku nahlásiť a priateľa môžeš odstrániť a zablokovať.“ Tie isté zásady upresňujú, že e-mail a denník sa ostatným hráčom nikdy nezobrazujú. Kontext appky nájdeš v prípadovej štúdii TradaZen.
Čo odpovedať Apple po zamietnutí 1.2
Povedz reviewerovi, kde nájde každý mechanizmus, v odpovedi aj v poznámkach pre review. Tieto funkcie žijú v appke: reviewer testuje kód zabalený v builde, takže priprav nový build. Postup, ako odpovedať App Review, je rovnaký ako pri iných pravidlách. Tu je vzor v angličtine, prispôsob si ho a nechaj len to, čo v tvojej appke naozaj platí:
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,
Ak v builde nejaký mechanizmus chýba, odpoveď nestačí. Rovnako ako pri guideline 2.1, Apple posudzuje build, ktorý má v rukách.
Checklist 1.2 pred odoslaním
- Spísal si všetko, čo používateľ publikuje a ostatní vidia, vrátane prezývok.
- Tvoje podmienky zakazujú nevhodný obsah a zneužívanie a appka vyžaduje výslovné „Súhlasím“.
- Filter beží na serveri, hľadá celé slová a pokrýva jazyky tvojej stránky v obchode.
- Každý obsah má tlačidlo „Nahlásiť“ a každé nahlásenie ťa hneď upozorní.
- Vieš odstrániť obsah a vylúčiť jeho autora za menej ako 24 hodín.
- Zablokovanie používateľa okamžite odstráni jeho obsah.
- Kontaktná adresa je v appke viditeľná a URL podpory odpovedá.
- Dotazník vekovej klasifikácie uvádza obsah od používateľov a aj správy, ak ich tvoja appka má.
- Poznámky pre review hovoria, kde nájsť každý mechanizmus, a obsahujú demo účet.
Oprav zamietnutie pred opätovným odoslaním appky
Ak ti appku práve zamietli kvôli 1.2, Review Kit obsahuje všetko, čo kontrolujem pred každým odoslaním, plus dva skilly, ktoré v Claude Code prejdú tvoj projekt a pripravia odpoveď, ak Apple zamietne. Ak chceš ľudský pohľad, rezervuj si so mnou hodinu: prečítame si správu spolu a pozrieme sa na tvoj proces moderovania. Celý postup po zamietnutí je na stránke appka zamietnutá Apple.
Ak chystáš svoje prvé vydanie, urob si bezplatnú diagnostiku: povie ti, ktorým krokom začať, a pošle ti môj checklist proti zamietnutiu od Apple.
Nikto ti nezaručí, že Apple tvoju appku prijme. Týchto päť dobre viditeľných mechanizmov ti aspoň odstráni tento dôvod zo zoznamu.
Často kladené otázky
Čo znamená „Guideline 1.2 - Safety - User-Generated Content“?
Je to názov zamietnutia v správe od Apple. Znamená, že tvoja appka zobrazuje obsah vytvorený používateľmi bez všetkých očakávaných ochrán: filtra, rýchlo vybaveného nahlasovania, blokovania, zverejneného kontaktu a prijatých podmienok používania.
Počíta sa prezývka v rebríčku ako obsah od používateľov?
Text Apple to nehovorí. Ja ju tak beriem, pretože prezývku si človek volí slobodne a vidia ju ostatní hráči. V TradaZen prechádzajú prezývky v rebríčkoch filtrom, dajú sa nahlásiť a ak robia problém, nahradí ich neutrálna prezývka.
Treba nahlásenia naozaj vybaviť do 24 hodín?
To požaduje správa o zamietnutí od Apple. Text pravidla hovorí o rýchlej reakcii. Automatický filter teda nestačí: niekto musí obsah odstrániť a autora vylúčiť. Automatické skrytie po viacerých nahláseniach ti dovtedy pomôže to zvládnuť.
Musia sa podmienky používania prijať priamo v appke?
Je to najistejší spôsob. Správa o zamietnutí požaduje, aby používatelia prijali podmienky, ktoré netolerujú ani nevhodný obsah, ani zneužívajúcich používateľov. Odkaz v pätičke stránky súhlas nedokazuje. Obrazovka s tlačidlom „Súhlasím“ pred prvým príspevkom nenecháva žiadne pochybnosti.
Môže appka na anonymný chat prejsť cez guideline 1.2?
Aktuálny text uvádza náhodný alebo anonymný chat medzi použitiami, ktoré na App Store nepatria. Appku, ktorá slúži hlavne na to, môžu stiahnuť bez upozornenia, aj keď má filter, nahlasovanie a blokovanie.

