# Guideline 1.2 User-Generated Content: što Apple traži

> Guideline 1.2: ako korisnici objavljuju sadržaj, trebaš filtar, prijavu, blokiranje, kontakt i prihvaćene uvjete korištenja. Check-lista za Expo i Supabase.

Izvorna stranica: [Guideline 1.2 User-Generated Content: što Apple traži](https://devoria.fr/hr/blog/guideline-1-2-user-generated-content-apple)
Autor: [Mehdi Azizi](https://devoria.fr/hr/mehdi-azizi)
Objavljeno: 2026-11-04
Zadnja revizija sadržaja: 2026-11-04


Guideline 1.2 vrijedi čim korisnici objave nešto što drugi vide: poruku, fotku, recenziju, a po meni i običan nadimak na ljestvici. Appleov tekst tada traži filtar, prijavu na koju se brzo odgovara, blokiranje i objavljen kontakt. **Poruke o odbijanju dodaju i peti zahtjev: prihvaćene uvjete korištenja koji ne toleriraju ni uvredljiv sadržaj ni korisnike koji zlorabe aplikaciju.**

Ovaj vodič ne priča priču o odbijanju. Pokazuje što sam ugradio u TradaZen, svoju aplikaciju za vježbanje tradinga, kad su njezine ljestvice počele prikazivati nadimke koje su birali igrači. Za pregled svih razloga odbijanja pročitaj radije [zašto Apple odbija aplikaciju](https://devoria.fr/hr/blog/apple-odbio-aplikaciju-razlozi).

## Što kaže guideline 1.2?

Pravilo 1.2, „User-Generated Content“, nalazi se u odjeljku 1, „Safety“, u [App Review Guidelines](https://developer.apple.com/app-store/review/guidelines/#user-generated-content). Odnosi se na aplikacije sa sadržajem korisnika ili uslugom društvene mreže. Da bi se spriječile zloupotrebe, takve aplikacije „must include“ četiri zaštite:

- „A method for filtering objectionable material from being posted to the app“: **filtar koji blokira uvredljiv sadržaj prije objave**.
- „A mechanism to report offensive content and timely responses to concerns“: način da se sadržaj prijavi i brz odgovor na prijave.
- „The ability to block abusive users from the service“: mogućnost blokiranja korisnika koji zlorabe aplikaciju.
- „Published contact information so users can easily reach you“: objavljen kontakt koji se lako pronađe.

Trenutna verzija teksta, ažurirana 8. lipnja 2026., ide i dalje. Podsjeća da je tvoja odgovornost ukloniti sadržaj koji krši pravilo, tvoje uvjete korištenja ili pravila zajednice. Ako ga Apple pronađe, tražit će da ga ukloniš i dostaviš plan poboljšanja, a u međuvremenu može ukloniti aplikaciju.

Tekst navodi i aplikacije kojima nije mjesto na App Storeu: one koje uglavnom služe za pornografiju, nasumični ili anonimni chat u stilu Chatroulettea, ocjenjivanje izgleda stvarnih ljudi, prijetnje ili uznemiravanje. **Za takve namjene četiri zaštite nisu dovoljne.** Pravilo 1.2.1 dodaje pravila za aplikacije kreatora, među ostalim provjeru dobi za sadržaj koji prelazi dobnu klasifikaciju aplikacije.

## Odnosi li se to na tvoju aplikaciju?

Upitnik za dobnu klasifikaciju u App Store Connectu daje dobru definiciju. Govori o [sadržaju koji generiraju korisnici](https://developer.apple.com/help/app-store-connect/reference/app-information/age-ratings-values-and-definitions) kad se sadržaj koji su stvorili korisnici široko dijeli u aplikaciji: videi, fotke, tekstovi ili audio. Poruke između korisnika tretira zasebno.

| Što drugi vide             | Odnosi se?  |
| -------------------------- | ----------- |
| Poruke između članova      | Da          |
| Javne fotke ili recenzije  | Da          |
| Nadimak na ljestvici       | Da, po meni |
| Privatne bilješke          | Ne          |
| Sadržaj koji si ti napisao | Ne          |

Apple ne spominje nadimke. Ja ih ipak tretiram kao sadržaj korisnika: bilo tko može odabrati uvredljiv nadimak, a drugi igrači ga vide. To sam odlučio za ljestvice u TradaZenu.

## 5 mehanizama koje trebaš napraviti, s Expoom i Supabaseom

Poruka o odbijanju po pravilu 1.2, kakvu je jedan developer objavio na [Appleovim forumima](https://developer.apple.com/forums/thread/807358) krajem 2025., navodi očekivane mjere. Počinje s „Require that users agree to terms (EULA)“, a završava zahtjevom za rokom: postupiti po prijavama „within 24 hours“, uklanjanjem sadržaja i isključivanjem autora.

| Mehanizam                    | Gdje ga napraviti                   |
| ---------------------------- | ----------------------------------- |
| Prihvaćeni uvjeti korištenja | Ekran i profil                      |
| Filtar                       | Server, prije prikaza               |
| Prijava                      | Gumb i tablica                      |
| Blokiranje                   | Tablica i pravilo pristupa          |
| Objavljen kontakt            | Aplikacija i stranica na App Storeu |

SQL primjere u nastavku prilagodi svojoj shemi. Oslanjaju se na [Supabaseova pravila pristupa po retku](https://supabase.com/docs/guides/database/postgres/row-level-security), koja vrijede čak i ako netko zaobiđe tvoju aplikaciju.

### 1. Prihvaćeni uvjeti korištenja, bez tolerancije za zloupotrebe

Tvoji uvjeti korištenja moraju crno na bijelo reći da se ne tolerira ni uvredljiv sadržaj ni korisnici koji zlorabe aplikaciju. Primjer klauzule, koju neka netko pregleda, ovo nije pravni savjet: „Ne tolerira se nikakav uvredljiv, mrziteljski, seksualni ili uznemirujući sadržaj. Prijavljeni sadržaj može biti uklonjen, a njegov autor isključen, bez prethodne obavijesti.“

**Pasivna rečenica ispod gumba za registraciju ne dokazuje pristanak: traži izričitu radnju.** Ekran s poveznicom na uvjete korištenja i gumbom „Prihvaćam“, prije prve objave. Spremi datum i prihvaćenu verziju u profil, a zatim zabrani objavu dok ih nema:

```sql
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. Filtar prije nego što drugi vide sadržaj

Filtar živi na serveru, jer se kod aplikacije može zaobići. Kopija u aplikaciji služi samo da odmah upozori korisnika.

U TradaZenu funkcija u bazi provjerava svaki nadimak, a aplikacija koristi isti popis da upozori igrača. Oba popisa držim identičnima. Na serveru se uvredljiv nadimak ne odbija pri upisu: **zamjenjuje se neutralnim nadimkom pri prikazu, pa nitko ne ostane blokiran zbog lažno pozitivnog rezultata**.

Lažno pozitivni rezultati dođu brzo. U TradaZenu je prva verzija filtra cenzurirala imena poput Dominique, Monique ili Véronique, jer sadrže dio vulgarne riječi. Rješenje: tražiti cijele riječi, a ne dijelove riječi. A budući da se aplikacija prodaje i na japanskom i kineskom, filtar pokriva i te jezike.

### 3. Prijava, obrađena u roku od 24 sata

Svaki objavljeni sadržaj ima gumb „Prijavi“. U TradaZenu se nadimak prijavljen na ljestvici lige odmah prikazuje pod neutralnom oznakom, na mobitelu osobe koja ga prijavljuje. Prijava zatim odlazi na server, a ako je mobitel offline, šalje se kasnije.

U bazi: tablica prijava, jedna po osobi i po sadržaju:

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

U TradaZenu **nadimak koji je prijavilo više igrača zamjenjuje se neutralnim nadimkom**, a prijave se nikad ne prikazuju prijavljenoj osobi. Opći oprez: identifikator koji se koristi za prijavu ne smije moći mijenjati autor sadržaja, inače može izbjeći skrivanje.

Automatsko skrivanje ne zamjenjuje tvoju odluku. Da bi stigao u 24 sata, neka te svaka prijava obavijesti: [Supabaseov database webhook](https://supabase.com/docs/guides/database/webhooks) može pozvati serversku funkciju koja ti šalje poruku. Ključ kojim se uklanja sadržaj ostaje na serveru, kao što objašnjavam u članku [tajni API ključ u Expo aplikaciji](https://devoria.fr/hr/blog/tajni-api-kljuc-expo-aplikacija).

### 4. Blokiranje koje djeluje odmah

Tablica blokiranja, pa pravilo pristupa koje uklanja sadržaj blokiranih osoba iz feeda osobe koja blokira:

```sql
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
  )
);
```

U TradaZenu se prijatelj dodaje kodom, a može ga se ukloniti i blokirati. **Blokirani prijatelj nestaje s popisa, čak i ako ponovno pošalje zahtjev.**

### 5. Objavljen kontakt koji se lako pronađe

Stavi kontakt adresu u postavke aplikacije, a u App Store Connect URL podrške koji stvarno radi. U TradaZenu se adresa podrške nalazi u pravilima privatnosti i u uvjetima korištenja. Što te stranice trebaju sadržavati, pročitaj u članku [pravila privatnosti za aplikaciju](https://devoria.fr/hr/blog/politika-privatnosti-ios-aplikacija).

Još jedna stvar: odluči što se događa sa sadržajem osobe koja obriše račun. Gornji `on delete cascade` briše njezine prijave zajedno s računom. Cijeli postupak je u članku [brisanje računa na iOS-u](https://devoria.fr/hr/blog/brisanje-racuna-ios-aplikacija-app-review).

## Što TradaZen navodi u svojim pravilima

Ovi mehanizmi javno su opisani u pravilima privatnosti TradaZena, dopunjenima u rujnu 2026. kad su stigle lige i prijatelji: „Nadimci prolaze kroz automatski filtar; možeš prijaviti neprikladan nadimak na ljestvici te ukloniti i blokirati prijatelja.“ Ista pravila navode da se e-mail i dnevnik nikad ne prikazuju drugim igračima. Kontekst aplikacije je u [studiji slučaja TradaZen](https://devoria.fr/hr/blog/tradazen-studija-slucaja-lansiranje-iphone-aplikacije).

## Što odgovoriti Appleu nakon odbijanja po 1.2

Reci revieweru gdje može pronaći svaki mehanizam, i u odgovoru i u bilješkama za reviziju. Te funkcije žive u aplikaciji: reviewer testira kod koji je u buildu, zato pripremi novi build. Postupak za [odgovor App Reviewu](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/reply-to-app-review-messages/) isti je kao za ostala pravila. Evo predloška na engleskom, prilagodi ga i zadrži samo ono što je u tvojoj aplikaciji stvarno istina:

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

Ako neki mehanizam nedostaje u buildu, odgovor neće biti dovoljan. Kao i kod [guideline 2.1](https://devoria.fr/hr/blog/guideline-2-1-app-completeness-odbijanje-app-store), Apple ocjenjuje build koji ima u rukama.

## Check-lista za 1.2 prije slanja

- Popisao si sve što korisnik objavljuje, a drugi vide, uključujući nadimke.
- Tvoji uvjeti korištenja zabranjuju uvredljiv sadržaj i zloupotrebe, a aplikacija traži izričito „Prihvaćam“.
- Filtar radi na serveru, traži cijele riječi i pokriva jezike tvoje stranice na App Storeu.
- Svaki sadržaj ima gumb „Prijavi“, a svaka prijava te odmah obavijesti.
- Znaš ukloniti sadržaj i isključiti autora za manje od 24 sata.
- Blokiranje korisnika odmah uklanja njegov sadržaj.
- Kontakt adresa vidljiva je u aplikaciji, a URL podrške radi.
- Upitnik za dobnu klasifikaciju navodi sadržaj korisnika, a i poruke ako ih tvoja aplikacija ima.
- Bilješke za reviziju govore gdje se nalazi svaki mehanizam, uz demo račun.

## Ispravi odbijanje prije ponovnog slanja

Ako ti je aplikacija upravo odbijena po pravilu 1.2, [Review Kit](https://devoria.fr/hr/kits/app-review) skuplja sve što provjeravam prije svakog slanja, uz dva skilla koji u Claude Codeu pregledavaju tvoj projekt i pripremaju odgovor ako te Apple odbije. Ako želiš da netko pogleda, [rezerviraj sat vremena sa mnom](https://devoria.fr/hr/coaching): zajedno čitamo poruku i prolazimo tvoj tok moderacije. Cijeli postupak nakon odbijanja nalazi se na stranici [aplikacija odbijena od Applea](https://devoria.fr/hr/expertise/apple-odbio-aplikaciju).

Ako pripremaš prvo objavljivanje, [napravi besplatnu dijagnostiku](https://devoria.fr/hr/diagnostic): reći će ti koji korak prvo napasti i poslati ti moju check-listu protiv Appleova odbijanja.

Nitko ne može jamčiti da će Apple prihvatiti tvoju aplikaciju. Ovih pet mehanizama, jasno vidljivih, barem miče ovaj razlog s popisa.

## Česta pitanja

### Što znači „Guideline 1.2 - Safety - User-Generated Content“?

To je naslov odbijanja u Appleovoj poruci. Znači da tvoja aplikacija prikazuje sadržaj koji su stvorili korisnici bez svih očekivanih zaštita: filtra, brzo obrađene prijave, blokiranja, objavljenog kontakta i prihvaćenih uvjeta korištenja.

### Smatra li se nadimak na ljestvici sadržajem korisnika?

Appleov tekst to ne kaže. Ja ga tako tretiram, jer se nadimak bira slobodno, a vide ga drugi igrači. U TradaZenu nadimci na ljestvicama prolaze kroz filtar, mogu se prijaviti i zamjenjuju se neutralnim nadimkom ako stvaraju problem.

### Moraju li se prijave stvarno obraditi u roku od 24 sata?

To traži Appleova poruka o odbijanju. Tekst pravila govori o brzim odgovorima. Automatski filtar zato nije dovoljan: treba netko tko uklanja sadržaj i isključuje autora. Automatsko skrivanje nakon više prijava pomaže ti da izdržiš do tada.

### Moraju li se uvjeti korištenja prihvatiti u aplikaciji?

To je najsigurniji način. Poruka o odbijanju traži da korisnici prihvate uvjete koji ne toleriraju ni uvredljiv sadržaj ni korisnike koji zlorabe aplikaciju. Poveznica na dnu stranice ne dokazuje pristanak. Ekran s gumbom „Prihvaćam“, prije prve objave, ne ostavlja nikakvu sumnju.

### Može li aplikacija za anonimni chat proći guideline 1.2?

Trenutni tekst navodi nasumični ili anonimni chat među namjenama kojima nije mjesto na App Storeu. Aplikacija koja uglavnom tome služi može biti uklonjena bez prethodne obavijesti, čak i s filtrom, prijavom i blokiranjem.


## Tvoj projekt

[Review Kit](https://devoria.fr/hr/kits/app-review): Moja checklista za App Store pregled, moja Appleova odbijanja i kako sam ih ispravio, checklista za Google Play i tri Claude Code skilla. 49 €.

[iOS & Android Kit](https://devoria.fr/hr/kits/ios): Napravi svoju iPhone i Android aplikaciju s Claude Codeom: početni kod mojih aplikacija, put do trgovina i svi kitovi. 99 €.

[Dijagnoza: što te dijeli od tvoje iPhone aplikacije](https://devoria.fr/hr/diagnostic): 7 pitanja, 60 sekundi: saznaj što te stvarno koči da objaviš svoju iPhone aplikaciju, dobij svoj put u 4 koraka i kit koji ti odgovara.
