# Guideline 1.2 User-Generated Content: czego wymaga Apple

> Guideline 1.2: jeśli użytkownicy coś publikują, potrzebujesz filtra, zgłaszania, blokowania, kontaktu i akceptacji regulaminu. Checklista Expo i Supabase.

Oryginalna strona: [Guideline 1.2 User-Generated Content: czego wymaga Apple](https://devoria.fr/pl/blog/guideline-1-2-user-generated-content-apple)
Autor: [Mehdi Azizi](https://devoria.fr/pl/mehdi-azizi)
Publikacja: 2026-11-04
Ostatnia aktualizacja treści: 2026-11-04


Guideline 1.2 obowiązuje, gdy tylko użytkownicy publikują coś, co widzą inni: wiadomość, zdjęcie, opinię, a moim zdaniem nawet zwykły nick w rankingu. Tekst Apple wymaga wtedy filtra, zgłaszania z szybką reakcją, blokowania i opublikowanego kontaktu. **Wiadomości o odrzuceniu dodają piąty wymóg: zaakceptowany regulamin, który nie toleruje ani obraźliwych treści, ani użytkowników nadużywających aplikacji.**

Ten poradnik nie opisuje odrzucenia. Pokazuje, co wdrożyłem w TradaZen, mojej aplikacji do treningu tradingu, kiedy w jej rankingach zaczęły się pojawiać nicki wybrane przez graczy. Jeśli chcesz zobaczyć wszystkie powody odrzuceń, przeczytaj raczej [dlaczego Apple odrzuca aplikację](https://devoria.fr/pl/blog/odrzucenie-aplikacji-apple-prawdziwe-przypadki).

## Co mówi guideline 1.2?

Punkt 1.2, „User-Generated Content”, znajduje się w sekcji 1, „Safety”, [App Review Guidelines](https://developer.apple.com/app-store/review/guidelines/#user-generated-content). Dotyczy aplikacji z treściami użytkowników lub z funkcją sieci społecznościowej. Żeby zapobiegać nadużyciom, takie aplikacje „must include” cztery zabezpieczenia:

- „A method for filtering objectionable material from being posted to the app”: **filtr, który blokuje obraźliwe treści przed publikacją**.
- „A mechanism to report offensive content and timely responses to concerns”: sposób na zgłoszenie treści i szybka reakcja na zgłoszenia.
- „The ability to block abusive users from the service”: możliwość zablokowania użytkownika, który nadużywa aplikacji.
- „Published contact information so users can easily reach you”: opublikowany kontakt, łatwy do znalezienia.

Obecna wersja tekstu, zaktualizowana 8 czerwca 2026, idzie dalej. Przypomina, że to ty odpowiadasz za usuwanie treści naruszających zasady, twój regulamin albo zasady społeczności. Jeśli Apple takie treści znajdzie, poprosi cię o ich usunięcie i o plan poprawy, a w międzyczasie może wycofać aplikację.

Tekst wymienia też aplikacje, którym nie ma miejsca w App Store: takie, które służą głównie do pornografii, losowego lub anonimowego czatu w stylu Chatroulette, oceniania wyglądu prawdziwych osób, gróźb lub nękania. **W tych przypadkach cztery zabezpieczenia nie wystarczą.** Punkt 1.2.1 dodaje zasady dla aplikacji twórców, m.in. weryfikację wieku dla treści, które wykraczają poza kategorię wiekową aplikacji.

## Czy twoja aplikacja się w to wpisuje?

Dobrą definicję daje kwestionariusz kategorii wiekowej w App Store Connect. Mówi o [treściach generowanych przez użytkowników](https://developer.apple.com/help/app-store-connect/reference/app-information/age-ratings-values-and-definitions), gdy treści tworzone przez użytkowników są szeroko udostępniane w aplikacji: filmy, zdjęcia, teksty albo audio. Wiadomości między użytkownikami traktuje osobno.

| Co widzą inni                | Dotyczy?         |
| ---------------------------- | ---------------- |
| Wiadomości między członkami  | Tak              |
| Publiczne zdjęcia lub opinie | Tak              |
| Nick w rankingu              | Moim zdaniem tak |
| Prywatne notatki             | Nie              |
| Treści napisane przez ciebie | Nie              |

Apple nie wspomina o nickach. Mimo to traktuję je jak treści użytkowników: każdy może wybrać obraźliwy, a inni gracze go zobaczą. Taką decyzję podjąłem dla rankingów TradaZen.

## 5 mechanizmów do zakodowania, z Expo i Supabase

Wiadomość o odrzuceniu z powodu 1.2, którą jeden z developerów opublikował na [forach Apple](https://developer.apple.com/forums/thread/807358) pod koniec 2025, wymienia oczekiwane działania. Zaczyna się od „Require that users agree to terms (EULA)”, a kończy wymogiem czasowym: reagować na zgłoszenia „within 24 hours”, usuwając treść i wykluczając jej autora.

| Mechanizm               | Gdzie go zakodować             |
| ----------------------- | ------------------------------ |
| Zaakceptowany regulamin | Ekran i profil                 |
| Filtr                   | Serwer, przed wyświetleniem    |
| Zgłaszanie              | Przycisk i tabela              |
| Blokowanie              | Tabela i reguła dostępu        |
| Opublikowany kontakt    | Aplikacja i strona w App Store |

Poniższe przykłady SQL dostosuj do swojego schematu. Opierają się na [regułach dostępu na poziomie wiersza w Supabase](https://supabase.com/docs/guides/database/postgres/row-level-security), które działają nawet wtedy, gdy ktoś obejdzie twoją aplikację.

### 1. Zaakceptowany regulamin, bez tolerancji dla nadużyć

Twój regulamin musi jasno mówić, że obraźliwe treści i użytkownicy nadużywający aplikacji nie są tolerowani. Przykładowa klauzula, do sprawdzenia przez prawnika, to nie porada prawna: „Treści obraźliwe, nienawistne, seksualne lub nękające nie są tolerowane. Zgłoszona treść może zostać usunięta, a jej autor wykluczony, bez uprzedzenia.”

**Bierne zdanie pod przyciskiem rejestracji nie dowodzi zgody: wymagaj wyraźnego działania.** Ekran z linkiem do regulaminu i przyciskiem „Akceptuję”, przed pierwszą publikacją. Zapisz datę i zaakceptowaną wersję w profilu, a potem blokuj publikowanie, dopóki ich brakuje:

```sql
create policy "publikowanie po akceptacji regulaminu" 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, zanim inni zobaczą treść

Filtr działa na serwerze, bo kod aplikacji da się obejść. Kopia w aplikacji służy tylko do tego, żeby od razu ostrzec użytkownika.

W TradaZen funkcja w bazie sprawdza każdy nick, a aplikacja stosuje tę samą listę, żeby ostrzec gracza. Pilnuję, żeby obie były identyczne. Po stronie serwera obraźliwy nick nie jest odrzucany przy zapisie: **przy wyświetlaniu zastępuje go neutralny nick, dzięki czemu nikt nie zostaje zablokowany przez fałszywy alarm**.

Fałszywe alarmy pojawiają się szybko. W TradaZen pierwsza wersja filtra cenzurowała imiona takie jak Dominique, Monique czy Véronique, bo zawierają fragment wulgarnego słowa. Poprawka: szukać całych słów, a nie ich fragmentów. A skoro aplikacja jest sprzedawana po japońsku i po chińsku, filtr obejmuje też te języki.

### 3. Zgłoszenie obsłużone w ciągu 24 godzin

Każda opublikowana treść ma przycisk „Zgłoś”. W TradaZen nick zgłoszony w rankingu ligi od razu wyświetla się pod neutralną etykietą na telefonie osoby, która go zgłosiła. Zgłoszenie trafia potem na serwer, a jeśli telefon jest offline, zostaje wysłane później.

W bazie: tabela zgłoszeń, jedno zgłoszenie na osobę i treść:

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

W TradaZen **nick zgłoszony przez kilku graczy zostaje zastąpiony neutralnym nickiem**, a zgłoszenia nigdy nie są pokazywane osobie zgłoszonej. Ogólna zasada ostrożności: identyfikator używany do zgłoszenia nie może być modyfikowalny przez autora treści, bo inaczej może on uniknąć ukrycia.

Automatyczne ukrywanie nie zastępuje twojej decyzji. Żeby zmieścić się w 24 godzinach, ustaw sobie powiadomienie przy każdym zgłoszeniu: [webhook bazy danych Supabase](https://supabase.com/docs/guides/database/webhooks) może wywołać funkcję serwerową, która wyśle ci wiadomość. Klucz pozwalający usuwać treści zostaje na serwerze, co wyjaśniam w [sekretny klucz API w aplikacji Expo](https://devoria.fr/pl/blog/klucz-api-aplikacja-expo-co-chronic).

### 4. Blokowanie, które działa natychmiast

Tabela blokad, a potem reguła dostępu, która usuwa treści zablokowanych osób z feedu osoby blokującej:

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

W TradaZen znajomego dodaje się za pomocą kodu, a potem można go usunąć i zablokować. **Zablokowany znajomy znika z listy, nawet jeśli ponownie wyśle zaproszenie.**

### 5. Opublikowany kontakt, łatwy do znalezienia

Umieść adres kontaktowy w ustawieniach aplikacji, a w App Store Connect podaj URL wsparcia, który naprawdę działa. W TradaZen adres wsparcia jest w polityce prywatności i w regulaminie. Co powinno się znaleźć na tych stronach, opisuję w [polityka prywatności aplikacji](https://devoria.fr/pl/blog/polityka-prywatnosci-aplikacji-ios).

Ostatnia rzecz: zdecyduj, co dzieje się z treściami osoby, która usuwa konto. Powyższe `on delete cascade` usuwa jej zgłoszenia razem z kontem. Pełny przepis znajdziesz w [usuwanie konta w iOS](https://devoria.fr/pl/blog/usuwanie-konta-aplikacja-ios-testy-przed-apple).

## Co TradaZen pokazuje w swojej polityce

Te mechanizmy są publicznie opisane w polityce prywatności TradaZen, uzupełnionej we wrześniu 2026 wraz z pojawieniem się lig i znajomych: „Nicki przechodzą przez automatyczny filtr; możesz zgłosić niestosowny nick w rankingu oraz usunąć i zablokować znajomego.” Ta sama polityka precyzuje, że e-mail i dziennik nigdy nie są pokazywane innym graczom. Kontekst aplikacji znajdziesz w [studium przypadku TradaZen](https://devoria.fr/pl/blog/tradazen-studium-przypadku-aplikacja-iphone).

## Co odpowiedzieć Apple po odrzuceniu z powodu 1.2

Powiedz recenzentowi, gdzie znaleźć każdy mechanizm, w odpowiedzi i w notatkach do recenzji. Te funkcje są w aplikacji: recenzent testuje kod zawarty w buildzie, więc przygotuj nowy build. Procedura [odpowiadania App Review](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/reply-to-app-review-messages/) jest taka sama jak przy innych zasadach. Oto szablon po angielsku, do dostosowania, w którym zostawiasz tylko to, co jest prawdą w twojej aplikacji:

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

Jeśli w buildzie brakuje jakiegoś mechanizmu, sama odpowiedź nie wystarczy. Tak jak przy [guideline 2.1](https://devoria.fr/pl/blog/guideline-2-1-odrzucenie-app-store), Apple ocenia build, który ma w rękach.

## Checklista 1.2 przed wysłaniem

- Spisałeś wszystko, co użytkownik publikuje, a widzą inni, łącznie z nickami.
- Twój regulamin zabrania obraźliwych treści i nadużyć, a aplikacja wymaga wyraźnego „Akceptuję”.
- Filtr działa na serwerze, szuka całych słów i obejmuje języki twojej strony w App Store.
- Każda treść ma przycisk „Zgłoś”, a każde zgłoszenie od razu cię powiadamia.
- Potrafisz usunąć treść i wykluczyć jej autora w mniej niż 24 godziny.
- Zablokowanie użytkownika natychmiast usuwa jego treści.
- Adres kontaktowy jest widoczny w aplikacji, a URL wsparcia działa.
- Kwestionariusz kategorii wiekowej deklaruje treści użytkowników, a także wiadomości, jeśli twoja aplikacja je ma.
- Notatki do recenzji mówią, gdzie znaleźć każdy mechanizm, i zawierają konto demo.

## Napraw odrzucenie, zanim ponownie wyślesz aplikację

Jeśli twoja aplikacja właśnie została odrzucona z powodu 1.2, [Review Kit](https://devoria.fr/pl/kits/app-review) zbiera wszystko, co sprawdzam przed każdym wysłaniem, z dwoma skillami, które przeglądają twój projekt w Claude Code i przygotowują odpowiedź, jeśli Apple odrzuci aplikację. Jeśli chcesz, żeby spojrzał na to człowiek, [zarezerwuj ze mną godzinę](https://devoria.fr/pl/coaching): razem przeczytamy wiadomość i przejrzymy twój proces moderacji. Pełne postępowanie po odrzuceniu opisuję na stronie [aplikacja odrzucona przez Apple](https://devoria.fr/pl/expertise/aplikacja-odrzucona-przez-apple).

Jeśli przygotowujesz swoje pierwsze wydanie, [zrób darmową diagnozę](https://devoria.fr/pl/diagnostic): powie ci, od którego etapu zacząć, i wyśle ci moją checklistę przeciw odrzuceniom przez Apple.

Nikt nie zagwarantuje, że Apple zaakceptuje twoją aplikację. Te pięć dobrze widocznych mechanizmów skreśla z listy przynajmniej ten powód.

## Najczęściej zadawane pytania

### Co oznacza „Guideline 1.2 - Safety - User-Generated Content”?

To nagłówek odrzucenia w wiadomości od Apple. Oznacza, że twoja aplikacja wyświetla treści tworzone przez użytkowników bez wszystkich oczekiwanych zabezpieczeń: filtra, szybko obsługiwanych zgłoszeń, blokowania, opublikowanego kontaktu i zaakceptowanego regulaminu.

### Czy nick w rankingu liczy się jako treść użytkownika?

Tekst Apple tego nie mówi. Ja traktuję go jako taką treść, bo nick jest wybierany swobodnie i widzą go inni gracze. W TradaZen nicki w rankingach przechodzą przez filtr, można je zgłosić i są zastępowane neutralnym nickiem, jeśli sprawiają problem.

### Czy naprawdę trzeba obsługiwać zgłoszenia w ciągu 24 godzin?

Tego wymaga wiadomość o odrzuceniu od Apple. Tekst zasady mówi o szybkiej reakcji. Automatyczny filtr więc nie wystarczy: potrzebny jest ktoś, kto usunie treść i wykluczy jej autora. Automatyczne ukrywanie po kilku zgłoszeniach pomaga ci wytrzymać do tego czasu.

### Czy regulamin musi być zaakceptowany w aplikacji?

To najbezpieczniejsze rozwiązanie. Wiadomość o odrzuceniu wymaga, żeby użytkownicy akceptowali warunki, które nie tolerują ani obraźliwych treści, ani użytkowników nadużywających aplikacji. Link na dole strony nie dowodzi zgody. Ekran z przyciskiem „Akceptuję” przed pierwszą publikacją nie zostawia wątpliwości.

### Czy aplikacja z anonimowym czatem może przejść guideline 1.2?

Obecny tekst wymienia losowy lub anonimowy czat wśród zastosowań, którym nie ma miejsca w App Store. Aplikacja, która służy głównie do tego, może zostać wycofana bez uprzedzenia, nawet z filtrem, zgłaszaniem i blokowaniem.


## Twój projekt

[Review Kit](https://devoria.fr/pl/kits/app-review): Moja checklista do App Store Review, poprawione odrzucenia od Apple, checklista do Google Play i trzy skille Claude Code. 219 zł.

[iOS & Android Kit](https://devoria.fr/pl/kits/ios): Stwórz swoją aplikację na iPhone'a i Androida z Claude Code: kod startowy moich aplikacji, droga aż do sklepów i wszystkie kity. 439 zł.

[Diagnoza: co dzieli cię od twojej aplikacji na iPhone'a](https://devoria.fr/pl/diagnostic): 7 pytań, 60 sekund: wiesz, co naprawdę blokuje publikację twojej aplikacji na iPhone'a, masz plan w 4 krokach i kit dopasowany do ciebie.
