Guideline 1.2 User-Generated Content: mit vár el az Apple?
Írta: Mehdi Azizi
Megjelent: , 10 p
Guideline 1.2: ha a felhasználóid tartalmat tesznek közzé, kell szűrő, jelentés, tiltás, elérhetőség és elfogadott ÁSZF. Ellenőrzőlista Expóhoz és Supabase-hez.
A 1.2-es guideline akkor lép életbe, amikor a felhasználók közzétesznek valamit, amit mások is látnak: egy üzenetet, egy fotót, egy értékelést, és szerintem akár egy egyszerű becenevet egy ranglistán. Az Apple szövege ilyenkor szűrőt, gyors válasszal kezelt jelentést, tiltást és közzétett elérhetőséget követel. Az elutasító üzenetek egy ötödik követelményt is hozzátesznek: elfogadott felhasználási feltételeket, amelyek sem a kifogásolható tartalmat, sem a visszaélő felhasználókat nem tűrik.
Ez az útmutató nem egy elutasítás történetét meséli el. Azt mutatja meg, mit építettem be a TradaZenbe, a tőzsdei gyakorló appomba, amikor a ranglistái elkezdték megjeleníteni a játékosok által választott beceneveket. Az elutasítási okok áttekintéséhez inkább olvasd el, miért utasítja el az Apple az appokat.
Mit mond a 1.2-es guideline?
A 1.2, „User-Generated Content”, az App Review Guidelines 1. szakaszában („Safety”) található. Azokra az appokra vonatkozik, amelyekben felhasználói tartalom vagy közösségi hálózati szolgáltatás van. A visszaélések megelőzésére ezeknek az appoknak „must include” négy védelmet:
- „A method for filtering objectionable material from being posted to the app”: egy szűrő, amely még a közzététel előtt blokkolja a kifogásolható tartalmat.
- „A mechanism to report offensive content and timely responses to concerns”: egy mód a tartalom jelentésére, és gyors válasz a jelentésekre.
- „The ability to block abusive users from the service”: a visszaélő felhasználók letiltásának lehetősége.
- „Published contact information so users can easily reach you”: közzétett, könnyen megtalálható elérhetőség.
A szöveg jelenlegi, 2026. június 8-án frissített változata tovább megy. Emlékeztet, hogy a te felelősséged eltávolítani azt a tartalmat, amely sérti a szabályt, a felhasználási feltételeidet vagy a közösségi irányelveidet. Ha az Apple ilyet talál, kéri, hogy távolítsd el, és adj be egy fejlesztési tervet, közben pedig akár le is veheti az appot.
A szöveg azt is felsorolja, milyen appoknak nincs helye az App Store-ban: azoknak, amelyek elsősorban pornográfiára, Chatroulette-szerű véletlenszerű vagy anonim chatre, valódi emberek külsejének pontozására, fenyegetésre vagy zaklatásra szolgálnak. Ezekre a felhasználásokra a négy védelem nem elég. A 1.2.1 további szabályokat ad a tartalomkészítői appokra, többek között életkor-ellenőrzést az app besorolását meghaladó tartalomhoz.
Érinti az appodat?
Az App Store Connect korhatár-besorolási kérdőíve jó definíciót ad. Felhasználók által létrehozott tartalomról beszél, amikor a felhasználók által készített tartalom széles körben terjed az appban: videók, fotók, szövegek vagy hang. A felhasználók közötti üzenetküldést külön kezeli.
| Amit mások látnak | Érintett? |
|---|---|
| Üzenetek tagok között | Igen |
| Nyilvános fotók, értékelések | Igen |
| Becenév egy ranglistán | Szerintem igen |
| Privát jegyzetek | Nem |
| Általad írt tartalom | Nem |
Az Apple nem említi a beceneveket. Én mégis felhasználói tartalomként kezelem őket: bárki választhat sértőt, és más játékosok látják. Ezt döntöttem el a TradaZen ranglistáinál.
Az 5 lekódolandó mechanizmus, Expóval és Supabase-zel
A 1.2-es elutasító üzenet, ahogy egy fejlesztő 2025 végén közzétette az Apple fórumain, felsorolja az elvárt intézkedéseket. Így kezdődik: „Require that users agree to terms (EULA)”, és egy határidővel zárul: a jelentésekre „within 24 hours” kell reagálni, a tartalom eltávolításával és a szerző kizárásával.
| Mechanizmus | Hol kódold |
|---|---|
| Elfogadott ÁSZF | Képernyő és profil |
| Szűrő | Szerver, megjelenítés előtt |
| Jelentés | Gomb és tábla |
| Tiltás | Tábla és hozzáférési szabály |
| Közzétett elérhetőség | App és App Store-adatlap |
Az alábbi SQL-példákat igazítsd a saját sémádhoz. A Supabase soralapú hozzáférési szabályaira épülnek, amelyek akkor is érvényesek, ha valaki megkerüli az appodat.
1. Elfogadott ÁSZF, zéró toleranciával a visszaélésekkel szemben
A felhasználási feltételeidnek feketén-fehéren ki kell mondaniuk, hogy semmilyen kifogásolható tartalmat és visszaélő felhasználót nem tűrsz. Egy példa kikötés, amit nézess át, ez nem jogi tanács: „Semmilyen sértő, gyűlöletkeltő, szexuális vagy zaklató tartalmat nem tűrünk. A jelentett tartalom eltávolítható, a szerzője pedig előzetes értesítés nélkül kizárható.”
Egy passzív mondat a regisztrációs gomb alatt nem bizonyítja az elfogadást: kérj kifejezett mozdulatot. Egy képernyő, rajta link az ÁSZF-re és egy „Elfogadom” gomb, még az első közzététel előtt. Mentsd el a profilba az elfogadás dátumát és verzióját, és tiltsd a közzétételt, amíg ezek hiányoznak:
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. Szűrő, mielőtt mások látják a tartalmat
A szűrő a szerveren fut, mert az app kódja megkerülhető. Az appban lévő másolat csak arra jó, hogy azonnal figyelmeztesse a felhasználót.
A TradaZenben egy adatbázis-függvény ellenőriz minden becenevet, és az app ugyanazt a listát alkalmazza, hogy szóljon a játékosnak. A kettőt azonosan tartom. Szerveroldalon a sértő becenevet nem utasítom el íráskor: megjelenítéskor egy semleges becenévre cserélődik, így senkit nem blokkolok egy téves találat miatt.
A téves találatok gyorsan jönnek. A TradaZenben a szűrő egy korai verziója cenzúrázott olyan keresztneveket, mint a Dominique, a Monique vagy a Véronique, mert egy durva szó darabját tartalmazzák. A javítás: egész szavakat keresni, nem szódarabokat. És mivel az app japánul és kínaiul is elérhető, a szűrő ezeket a nyelveket is lefedi.
3. Jelentés, 24 órán belül kezelve
Minden közzétett tartalom mellett van egy „Jelentés” gomb. A TradaZenben a liga ranglistáján jelentett becenév a jelentő telefonján azonnal semleges felirattal jelenik meg. A jelentés ezután a szerverre megy, és ha a telefon offline, később újraküldi.
Az adatbázisban egy jelentéstábla, személyenként és tartalmanként egyetlen jelentéssel:
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);
A TradaZenben a több játékos által jelentett becenév semleges becenévre cserélődik, és a jelentéseket soha nem mutatjuk meg a jelentett személynek. Általános óvintézkedés: a jelentéshez használt azonosítót a tartalom szerzője ne módosíthassa, különben kibújhat az elrejtés alól.
Az automatikus elrejtés nem helyettesíti a te döntésedet. Hogy tartsd a 24 órát, kérj értesítést minden jelentésnél: egy Supabase adatbázis-webhook meghívhat egy szerverfüggvényt, amely üzenetet küld neked. A tartalom eltávolítására szolgáló kulcs a szerveren marad, ahogy a titkos API-kulcs egy Expo appban cikkben elmagyarázom.
4. Azonnal ható tiltás
Egy tiltástábla, majd egy hozzáférési szabály, amely a letiltott személyek tartalmát kiveszi a tiltó felhasználó hírfolyamából:
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
)
);
A TradaZenben barátot egy kóddal lehet hozzáadni, és el lehet távolítani, illetve le lehet tiltani. A letiltott barát eltűnik a listáról, akkor is, ha újra jelölést küld.
5. Közzétett, könnyen megtalálható elérhetőség
Tegyél egy kapcsolattartási címet az app beállításaiba, és egy valóban működő támogatási URL-t az App Store Connectbe. A TradaZenben a támogatási cím az adatvédelmi szabályzatban és a felhasználási feltételekben is szerepel. Hogy mi kerüljön ezekre az oldalakra, azt az app adatvédelmi szabályzata cikkben találod.
Utolsó pont: döntsd el, mi történik annak a tartalmaival, aki törli a fiókját. A fenti on delete cascade a fiókkal együtt törli a jelentéseit is. A teljes receptet az iOS-fióktörlés cikkben találod.
Mit közöl a TradaZen a szabályzatában
Ezeket a mechanizmusokat nyilvánosan leírja a TradaZen adatvédelmi szabályzata, amelyet 2026 szeptemberében egészítettem ki a ligák és a barátok érkezésével: „A becenevek automatikus szűrőn mennek át; a ranglistán jelentheted a nem megfelelő becenevet, és eltávolíthatsz, illetve letilthatsz egy barátot.” Ugyanez a szabályzat rögzíti, hogy az e-mail-címet és a naplót soha nem mutatjuk meg más játékosoknak. Az app hátterét a TradaZen esettanulmányban találod.
Mit válaszolj az Apple-nek egy 1.2-es elutasítás után
Írd meg a reviewernek, hol találja az egyes mechanizmusokat, a válaszodban és a review-jegyzetekben is. Ezek a funkciók az appban élnek: a reviewer a buildbe épített kódot teszteli, úgyhogy készíts új buildet. Az App Review-nak való válaszadás menete ugyanaz, mint a többi szabálynál. Íme egy angol nyelvű sablon, amit igazíts a saját appodhoz, és csak azt hagyd benne, ami igaz rá:
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,
Ha egy mechanizmus hiányzik a buildből, egy válasz nem lesz elég. Ahogy a 2.1-es guideline esetében, az Apple azt a buildet ítéli meg, ami a kezében van.
A 1.2-es ellenőrzőlista beküldés előtt
- Összeszedted mindazt, amit egy felhasználó közzétesz és mások látnak, a beceneveket is beleértve.
- Az ÁSZF-ed tiltja a kifogásolható tartalmat és a visszaéléseket, és az app kifejezett „Elfogadom”-ot kér.
- A szűrő a szerveren fut, egész szavakat keres, és lefedi az adatlapod nyelveit.
- Minden tartalomnál van „Jelentés” gomb, és minden jelentésről azonnal értesítést kapsz.
- Tudsz tartalmat eltávolítani és a szerzőjét kizárni 24 órán belül.
- Egy felhasználó letiltása azonnal eltünteti a tartalmát.
- Az appban látható egy kapcsolattartási cím, és a támogatási URL működik.
- A korhatár-besorolási kérdőív jelzi a felhasználói tartalmat, és az üzenetküldést is, ha az appodban van ilyen.
- A review-jegyzetek megmondják, hol található az egyes mechanizmus, egy demófiókkal együtt.
Javítsd az elutasítást, mielőtt újra beküldöd az appot
Ha az appodat épp most utasították el 1.2 alapján, a Review Kit összegyűjti mindazt, amit minden beküldés előtt ellenőrzök, két skill-lel, amelyek átnézik a projektedet a Claude Code-ban, és előkészítik a válaszodat, ha az Apple elutasít. Ha emberi szemre van szükséged, foglalj velem egy órát: együtt elolvassuk az üzenetet, és átnézzük a moderálási folyamatodat. Az elutasítás utáni teljes teendőket az Apple által elutasított alkalmazás oldalon találod.
Ha az első megjelenésedre készülsz, csináld meg az ingyenes diagnózist: megmondja, melyik lépéssel kezdj, és elküldi az Apple-elutasítás elleni ellenőrzőlistámat.
Senki nem garantálhatja, hogy az Apple elfogadja az appodat. Ez az öt, jól látható mechanizmus legalább ezt az okot leveszi a listáról.
Gyakori kérdések
Mit jelent a „Guideline 1.2 - Safety - User-Generated Content”?
Ez az elutasítás címe az Apple üzenetében. Azt jelenti, hogy az appod felhasználók által létrehozott tartalmat jelenít meg az összes elvárt védelem nélkül: szűrő, gyorsan kezelt jelentés, tiltás, közzétett elérhetőség és elfogadott felhasználási feltételek.
Felhasználói tartalomnak számít egy becenév a ranglistán?
Az Apple szövege ezt nem mondja ki. Én annak tekintem, mert a becenevet szabadon választják, és más játékosok látják. A TradaZenben a ranglisták becenevei szűrőn mennek át, jelenthetők, és ha gondot okoznak, semleges becenévre cserélődnek.
Tényleg 24 órán belül kell kezelni a jelentéseket?
Ezt kéri az Apple elutasító üzenete. A szabály szövege gyors válaszokról beszél. Egy automatikus szűrő tehát nem elég: kell valaki, aki eltávolítja a tartalmat és kizárja a szerzőjét. A több jelentés utáni automatikus elrejtés segít addig is tartani magad.
Az appon belül kell elfogadtatni a felhasználási feltételeket?
Ez a legbiztosabb módszer. Az elutasító üzenet azt kéri, hogy a felhasználók fogadjanak el olyan feltételeket, amelyek sem a kifogásolható tartalmat, sem a visszaélő felhasználókat nem tűrik. Egy link egy oldal alján nem bizonyítja az elfogadást. Egy képernyő „Elfogadom” gombbal, az első közzététel előtt, nem hagy kétséget.
Átmehet egy anonim chatapp a 1.2-es guideline-on?
A jelenlegi szöveg a véletlenszerű vagy anonim chatet azok között említi, amelyeknek nincs helye az App Store-ban. Egy elsősorban erre szolgáló app előzetes értesítés nélkül eltávolítható, még szűrővel, jelentéssel és tiltással is.

