# Guideline 1.2 User-Generated Content: kaj zahteva Apple

> Guideline 1.2: če tvoji uporabniki objavljajo, potrebuješ filter, prijavo, blokiranje, kontakt in sprejete pogoje uporabe. Kontrolni seznam za Expo in Supabase.

Izvirna stran: [Guideline 1.2 User-Generated Content: kaj zahteva Apple](https://devoria.fr/sl/blog/guideline-1-2-user-generated-content-apple)
Avtor: [Mehdi Azizi](https://devoria.fr/sl/mehdi-azizi)
Objava: 2026-11-04
Zadnja revizija vsebine: 2026-11-04


Guideline 1.2 velja takoj, ko uporabniki objavijo nekaj, kar vidijo drugi: sporočilo, fotografijo, oceno in po mojem mnenju tudi samo vzdevek na lestvici. Applovo besedilo takrat zahteva filter, prijavo s hitrim odzivom, blokiranje in objavljen kontakt. **Sporočila o zavrnitvi dodajo še peto zahtevo: sprejete pogoje uporabe, ki ne dopuščajo ne žaljive vsebine ne nasilnih uporabnikov.**

Ta vodnik ne opisuje zavrnitve. Pokaže, kaj sem vgradil v TradaZen, mojo aplikacijo za vadbo trgovanja, ko so njene lestvice začele prikazovati vzdevke, ki so si jih izbrali igralci. Za pregled vseh razlogov za zavrnitev raje preberi [zakaj Apple zavrne aplikacijo](https://devoria.fr/sl/blog/apple-zavrnil-aplikacijo-razlogi).

## Kaj pravi guideline 1.2?

1.2, »User-Generated Content«, je v razdelku 1, »Safety«, dokumenta [App Review Guidelines](https://developer.apple.com/app-store/review/guidelines/#user-generated-content). Velja za aplikacije z uporabniško vsebino ali družbenim omrežjem. Da bi preprečile zlorabe, morajo te aplikacije (»must include«) imeti štiri zaščite:

- »A method for filtering objectionable material from being posted to the app«: **filter, ki žaljivo vsebino ustavi, preden je objavljena**.
- »A mechanism to report offensive content and timely responses to concerns«: način za prijavo vsebine in hiter odziv na prijave.
- »The ability to block abusive users from the service«: možnost blokiranja nasilnega uporabnika.
- »Published contact information so users can easily reach you«: objavljen kontakt, ki ga je lahko najti.

Trenutna različica besedila, posodobljena 8. junija 2026, gre še dlje. Opozarja, da si ti odgovoren za odstranitev vsebine, ki krši pravilo, tvoje pogoje uporabe ali pravila skupnosti. Če jo Apple najde, te prosi, da jo odstraniš in pripraviš načrt izboljšav, aplikacijo pa lahko medtem umakne.

Besedilo našteva tudi aplikacije, ki jim v App Storu ni mesta: tiste, ki služijo predvsem pornografiji, naključnemu ali anonimnemu klepetu v slogu Chatroulette, ocenjevanju videza resničnih ljudi, grožnjam ali nadlegovanju. **Za takšno rabo štiri zaščite niso dovolj.** 1.2.1 dodaja pravila za aplikacije ustvarjalcev, med drugim preverjanje starosti za vsebino, ki presega starostno oceno aplikacije.

## Ali to velja za tvojo aplikacijo?

Vprašalnik za starostno oceno v App Store Connect ponuja dobro definicijo. O [uporabniško ustvarjeni vsebini](https://developer.apple.com/help/app-store-connect/reference/app-information/age-ratings-values-and-definitions) govori, kadar se vsebina, ki jo ustvarijo uporabniki, v aplikaciji široko deli: videi, fotografije, besedila ali zvok. Sporočanje med uporabniki obravnava posebej.

| Kaj vidijo drugi            | Velja?       |
| --------------------------- | ------------ |
| Sporočila med člani         | Da           |
| Javne fotografije ali ocene | Da           |
| Vzdevek na lestvici         | Da, po mojem |
| Zasebni zapiski             | Ne           |
| Vsebina, ki jo napišeš ti   | Ne           |

Apple vzdevkov ne omenja. Sam jih vseeno obravnavam kot uporabniško vsebino: kdorkoli si lahko izbere žaljivega, drugi igralci pa ga vidijo. Tako sem se odločil za lestvice v TradaZenu.

## 5 mehanizmov za implementacijo z Expo in Supabase

Sporočilo o zavrnitvi 1.2, kot ga je razvijalec konec leta 2025 objavil na [Applovih forumih](https://developer.apple.com/forums/thread/807358), našteva pričakovane ukrepe. Začne se z »Require that users agree to terms (EULA)« in konča z rokom: na prijave ukrepati »within 24 hours«, tako da odstraniš vsebino in izključiš njenega avtorja.

| Mehanizem         | Kje ga implementirati           |
| ----------------- | ------------------------------- |
| Sprejeti pogoji   | Zaslon in profil                |
| Filter            | Strežnik, pred prikazom         |
| Prijava           | Gumb in tabela                  |
| Blokiranje        | Tabela in pravilo dostopa       |
| Objavljen kontakt | Aplikacija in stran v App Storu |

Spodnje primere SQL prilagodi svoji shemi. Temeljijo na [Supabasovih pravilih dostopa na ravni vrstic](https://supabase.com/docs/guides/database/postgres/row-level-security), ki veljajo, tudi če nekdo obide tvojo aplikacijo.

### 1. Sprejeti pogoji uporabe, brez tolerance do zlorab

Tvoji pogoji uporabe morajo črno na belem povedati, da žaljiva vsebina in nasilni uporabniki niso dovoljeni. Primer klavzule, ki naj jo nekdo pregleda, ni pravni nasvet: »Žaljiva, sovražna, spolna ali nadlegovalna vsebina ni dovoljena. Prijavljena vsebina se lahko odstrani, njen avtor pa izključi brez predhodnega obvestila.«

**Pasiven stavek pod gumbom za registracijo ne dokazuje soglasja: zahtevaj izrecno dejanje.** Zaslon s povezavo do pogojev in gumbom »Sprejmem« pred prvo objavo. V profil shrani datum in sprejeto različico, nato prepovej objavljanje, dokler ju ni:

```sql
create policy "objava po sprejetju pogojev" 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, preden drugi vidijo vsebino

Filter živi na strežniku, ker je kodo aplikacije mogoče obiti. Kopija v aplikaciji služi le temu, da uporabnika takoj opozori.

V TradaZenu vsak vzdevek preveri funkcija v bazi, aplikacija pa uporablja isti seznam, da opozori igralca. Oba ohranjam enaka. Na strežniku žaljiv vzdevek ni zavrnjen ob zapisu: **ob prikazu ga zamenja nevtralen vzdevek, tako nikogar ne blokiram zaradi lažno pozitivnega zadetka**.

Lažno pozitivni zadetki pridejo hitro. V TradaZenu je prva različica filtra cenzurirala imena, kot so Dominique, Monique ali Véronique, ker vsebujejo del kletvice. Popravek: iskati cele besede, ne delov besed. Ker se aplikacija prodaja tudi v japonščini in kitajščini, filter pokriva tudi ta jezika.

### 3. Prijava, obdelana v 24 urah

Vsaka objavljena vsebina ima gumb »Prijavi«. V TradaZenu se vzdevek, prijavljen na lestvici lige, na telefonu osebe, ki ga je prijavila, takoj prikaže pod nevtralno oznako. Prijava gre nato na strežnik in se pošlje pozneje, če je telefon brez povezave.

V bazi tabela prijav, ena na osebo in vsebino:

```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 prijave" on public.reports
for insert to authenticated
with check (auth.uid() = reporter_id);
```

V TradaZenu **vzdevek, ki ga prijavi več igralcev, zamenja nevtralen vzdevek**, prijave pa prijavljeni osebi nikoli niso prikazane. Splošna previdnost: identifikatorja, ki se uporablja za prijavo, avtor vsebine ne sme moči spremeniti, sicer se lahko izogne skrivanju.

Samodejno skrivanje ne nadomesti tvoje odločitve. Da ujameš 24 ur, naj te vsaka prijava obvesti: [Supabasov webhook baze podatkov](https://supabase.com/docs/guides/database/webhooks) lahko pokliče strežniško funkcijo, ki ti pošlje sporočilo. Ključ, ki omogoča odstranitev vsebine, ostane na strežniku, kot razlagam v [skrivni API ključ v aplikaciji Expo](https://devoria.fr/sl/blog/skrivni-api-kljuc-aplikacija-expo).

### 4. Blokiranje, ki deluje takoj

Tabela blokad, nato pravilo dostopa, ki vsebino blokiranih oseb odstrani iz vira osebe, ki blokira:

```sql
create policy "brez blokiranih" 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 prijatelja dodaš s kodo, lahko pa ga odstraniš in blokiraš. **Blokiran prijatelj izgine s seznama, tudi če znova pošlje prošnjo.**

### 5. Objavljen kontakt, ki ga je lahko najti

V nastavitve aplikacije dodaj kontaktni naslov, v App Store Connect pa URL za podporo, ki res deluje. V TradaZenu je naslov podpore v politiki zasebnosti in v pogojih uporabe. Kaj mora biti na teh straneh, najdeš v [politika zasebnosti aplikacije](https://devoria.fr/sl/blog/politika-zasebnosti-aplikacija-ios).

Še zadnja stvar: odloči, kaj se zgodi z vsebino osebe, ki izbriše svoj račun. Zgornji `on delete cascade` skupaj z računom izbriše njene prijave. Celoten recept je v [brisanje računa v iOS](https://devoria.fr/sl/blog/brisanje-racuna-ios-aplikacija-apple).

## Kaj TradaZen navaja v svoji politiki

Ti mehanizmi so javno opisani v politiki zasebnosti TradaZena, dopolnjeni septembra 2026 ob prihodu lig in prijateljev: »Vzdevki gredo skozi samodejni filter; neprimeren vzdevek na lestvici lahko prijaviš, prijatelja pa lahko odstraniš in blokiraš.« Ista politika navaja, da e-pošta in dnevnik drugim igralcem nikoli nista prikazana. Ozadje aplikacije je v [študiji primera TradaZen](https://devoria.fr/sl/blog/studija-primera-tradazen-lansiranje-aplikacije-iphone).

## Kaj odgovoriti Applu po zavrnitvi 1.2

Povej pregledovalcu, kje najde vsak mehanizem, v odgovoru in v opombah za pregled. Te funkcije živijo v aplikaciji: pregledovalec testira kodo v buildu, zato pripravi nov build. Postopek za [odgovor App Review](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/reply-to-app-review-messages/) je enak kot pri drugih pravilih. Tukaj je predloga v angleščini, ki jo prilagodi in obdrži le to, kar v tvoji aplikaciji res drži:

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

Če mehanizem v buildu manjka, odgovor ne bo dovolj. Tako kot pri [guideline 2.1](https://devoria.fr/sl/blog/smernica-2-1-app-store-zavrnitev) Apple presoja build, ki ga ima v rokah.

## Kontrolni seznam 1.2 pred oddajo

- Popisal si vse, kar uporabnik objavi in vidijo drugi, vključno z vzdevki.
- Tvoji pogoji prepovedujejo žaljivo vsebino in zlorabe, aplikacija pa zahteva izrecen »Sprejmem«.
- Filter teče na strežniku, išče cele besede in pokriva jezike tvoje strani v trgovini.
- Vsaka vsebina ima gumb »Prijavi«, vsaka prijava pa te takoj obvesti.
- Vsebino znaš odstraniti in avtorja izključiti v manj kot 24 urah.
- Blokiranje uporabnika takoj odstrani njegovo vsebino.
- Kontaktni naslov je viden v aplikaciji, URL za podporo pa deluje.
- Vprašalnik za starostno oceno navaja uporabniško vsebino in sporočanje, če ga tvoja aplikacija ima.
- Opombe za pregled povedo, kje najti vsak mehanizem, skupaj z demo računom.

## Popravi zavrnitev, preden znova oddaš aplikacijo

Če je bila tvoja aplikacija pravkar zavrnjena zaradi 1.2, [Review Kit](https://devoria.fr/sl/kits/app-review) zbira vse, kar preverim pred vsako oddajo, z dvema skilloma, ki v Claude Code pregledata tvoj projekt in pripravita odgovor, če Apple zavrne. Za človeški pogled [rezerviraj uro z mano](https://devoria.fr/sl/coaching): skupaj prebereva sporočilo in pogledava tvoj postopek moderiranja. Celoten postopek po zavrnitvi je na strani [aplikacija, ki jo je Apple zavrnil](https://devoria.fr/sl/expertise/apple-zavrnil-aplikacijo).

Če pripravljaš svojo prvo izdajo, [opravi brezplačno diagnostiko](https://devoria.fr/sl/diagnostic): pove ti, katerega koraka se lotiti najprej, in ti pošlje moj kontrolni seznam proti Applovim zavrnitvam.

Nihče ne more zagotoviti, da bo Apple sprejel tvojo aplikacijo. Teh pet mehanizmov, dobro vidnih, s seznama odstrani vsaj ta razlog.

## Pogosta vprašanja

### Kaj pomeni »Guideline 1.2 - Safety - User-Generated Content«?

To je naslov zavrnitve v Applovem sporočilu. Pomeni, da tvoja aplikacija prikazuje vsebino, ki jo ustvarijo uporabniki, brez vseh pričakovanih zaščit: filtra, hitro obdelane prijave, blokiranja, objavljenega kontakta in sprejetih pogojev uporabe.

### Ali vzdevek na lestvici šteje za uporabniško vsebino?

Applovo besedilo tega ne pove. Sam ga obravnavam tako, ker si vzdevek vsak prosto izbere in ga vidijo drugi igralci. V TradaZenu gredo vzdevki na lestvicah skozi filter, lahko jih prijaviš, če so problematični, pa jih zamenja nevtralen vzdevek.

### Ali je res treba prijave obdelati v 24 urah?

To zahteva Applovo sporočilo o zavrnitvi. Besedilo pravila govori o hitrem odzivu. Samodejni filter torej ni dovolj: nekdo mora vsebino odstraniti in avtorja izključiti. Samodejno skrivanje po več prijavah ti pomaga zdržati vmes.

### Ali morajo biti pogoji uporabe sprejeti v aplikaciji?

To je najbolj varen način. Sporočilo o zavrnitvi zahteva, da uporabniki sprejmejo pogoje, ki ne dopuščajo ne žaljive vsebine ne nasilnih uporabnikov. Povezava na dnu strani ne dokazuje soglasja. Zaslon z gumbom »Sprejmem« pred prvo objavo ne pušča dvoma.

### Ali lahko aplikacija za anonimni klepet prestane guideline 1.2?

Trenutno besedilo naključni ali anonimni klepet navaja med rabami, ki jim v App Storu ni mesta. Aplikacijo, ki služi predvsem temu, lahko umaknejo brez predhodnega obvestila, tudi s filtrom, prijavo in blokiranjem.


## Tvoj projekt

[Review Kit](https://devoria.fr/sl/kits/app-review): Moj kontrolni seznam za pregled v App Store, moje popravljene zavrnitve Applea, seznam za Google Play in trije skilli za Claude Code. 49 €.

[iOS & Android Kit](https://devoria.fr/sl/kits/ios): Ustvari svojo aplikacijo za iPhone in Android s Claude Code: začetna koda mojih aplikacij, pot do trgovin in vsi kompleti. 99 €.

[Diagnoza: kaj te loči od tvoje aplikacije za iPhone](https://devoria.fr/sl/diagnostic): 7 vprašanj, 60 sekund: izveš, kaj te zares ovira pri objavi aplikacije za iPhone, dobiš pot v 4 korakih in komplet, ki ti ustreza.
