# Guideline 1.2 User-Generated Content: Applen vaatimukset

> Guideline 1.2: jos käyttäjät julkaisevat sisältöä, tarvitset suodattimen, ilmiannon, eston, yhteystiedon ja hyväksytyt käyttöehdot.

Alkuperäinen sivu: [Guideline 1.2 User-Generated Content: Applen vaatimukset](https://devoria.fr/fi/blog/guideline-1-2-user-generated-content-apple)
Kirjoittaja: [Mehdi Azizi](https://devoria.fr/fi/mehdi-azizi)
Julkaistu: 2026-11-04
Sisältö tarkistettu viimeksi: 2026-11-04


Guideline 1.2 koskee sovellustasi heti, kun käyttäjät julkaisevat jotain, minkä muut näkevät: viestin, kuvan, arvostelun ja minun mielestäni jo pelkän nimimerkin tulostaulukossa. Applen teksti vaatii silloin suodattimen, ilmiantomahdollisuuden ja nopean reagoinnin ilmiantoihin, estotoiminnon ja julkaistun yhteystiedon. **Hylkäysviestit lisäävät viidennen vaatimuksen: käyttöehdot, jotka käyttäjä hyväksyy ja jotka eivät salli loukkaavaa sisältöä eivätkä häiriköiviä käyttäjiä.**

Tämä opas ei kerro hylkäystarinaa. Se näyttää, mitä rakensin TradaZeniin, pörssikaupan harjoittelusovellukseeni, kun sen tulostaulukot alkoivat näyttää pelaajien itse valitsemia nimimerkkejä. Jos haluat kokonaiskuvan hylkäyssyistä, lue mieluummin [miksi Apple hylkää sovelluksen](https://devoria.fr/fi/blog/apple-hylkasi-sovelluksen-syyt).

## Mitä guideline 1.2 sanoo?

Kohta 1.2, "User-Generated Content", löytyy [App Review Guidelinesin](https://developer.apple.com/app-store/review/guidelines/#user-generated-content) osiosta 1, "Safety". Se koskee sovelluksia, joissa on käyttäjien tuottamaa sisältöä tai sosiaalisen verkoston palvelu. Väärinkäytösten estämiseksi näiden sovellusten "must include" neljä suojausta:

- "A method for filtering objectionable material from being posted to the app": **suodatin, joka pysäyttää loukkaavan sisällön ennen julkaisua**.
- "A mechanism to report offensive content and timely responses to concerns": tapa ilmiantaa sisältöä ja nopea reagointi ilmiantoihin.
- "The ability to block abusive users from the service": mahdollisuus estää häiriköivä käyttäjä.
- "Published contact information so users can easily reach you": julkaistu, helposti löytyvä yhteystieto.

Tekstin nykyinen versio, päivitetty 8. kesäkuuta 2026, menee pidemmälle. Se muistuttaa, että sinun vastuullasi on poistaa sisältö, joka rikkoo sääntöä, käyttöehtojasi tai yhteisösääntöjäsi. Jos Apple löytää sellaista, se pyytää sinua poistamaan sen ja toimittamaan parannussuunnitelman, ja se voi poistaa sovelluksen siksi aikaa.

Teksti luettelee myös sovellukset, joille ei ole paikkaa App Storessa: ne, jotka on tarkoitettu lähinnä pornografiaan, Chatroulette-tyyliseen satunnaiseen tai anonyymiin chattailuun, oikeiden ihmisten ulkonäön arvosteluun, uhkailuun tai häirintään. **Näissä käyttötarkoituksissa neljä suojausta eivät riitä.** Kohta 1.2.1 lisää sääntöjä sisällöntuottajasovelluksille, muun muassa ikätarkistuksen sisällölle, joka ylittää sovelluksen ikärajan.

## Koskeeko tämä sovellustasi?

App Store Connectin ikärajakysely antaa hyvän määritelmän. Se puhuu [käyttäjien tuottamasta sisällöstä](https://developer.apple.com/help/app-store-connect/reference/app-information/age-ratings-values-and-definitions), kun käyttäjien luomaa sisältöä jaetaan laajasti sovelluksessa: videoita, kuvia, tekstiä tai ääntä. Käyttäjien välinen viestintä käsitellään erikseen.

| Mitä muut näkevät             | Koskeeko?         |
| ----------------------------- | ----------------- |
| Jäsenten väliset viestit      | Kyllä             |
| Julkiset kuvat tai arvostelut | Kyllä             |
| Nimimerkki tulostaulukossa    | Kyllä, mielestäni |
| Yksityiset muistiinpanot      | Ei                |
| Itse kirjoittamasi sisältö    | Ei                |

Apple ei mainitse nimimerkkejä. Käsittelen ne silti käyttäjien sisältönä: kuka tahansa voi valita loukkaavan nimimerkin, ja muut pelaajat näkevät sen. Tämän valinnan tein TradaZenin tulostaulukoille.

## 5 koodattavaa mekanismia Expolla ja Supabasella

Guideline 1.2 -hylkäysviesti, jonka eräs kehittäjä julkaisi [Applen foorumeilla](https://developer.apple.com/forums/thread/807358) loppuvuodesta 2025, luettelee odotetut toimet. Se alkaa sanoilla "Require that users agree to terms (EULA)" ja päättyy aikavaatimukseen: ilmiantoihin on reagoitava "within 24 hours" poistamalla sisältö ja sulkemalla sen tekijä pois.

| Mekanismi              | Missä se koodataan          |
| ---------------------- | --------------------------- |
| Hyväksytyt käyttöehdot | Näkymä ja profiili          |
| Suodatin               | Palvelin, ennen näyttämistä |
| Ilmianto               | Painike ja taulu            |
| Esto                   | Taulu ja käyttöoikeussääntö |
| Julkaistu yhteystieto  | Sovellus ja App Store -sivu |

Alla olevat SQL-esimerkit on sovitettava omaan skeemaasi. Ne nojaavat [Supabasen rivitason käyttöoikeussääntöihin](https://supabase.com/docs/guides/database/postgres/row-level-security), jotka pätevät, vaikka joku kiertäisi sovelluksesi.

### 1. Hyväksytyt käyttöehdot, nollatoleranssi väärinkäytöksille

Käyttöehtojesi on sanottava selvästi, ettei loukkaavaa sisältöä eikä häiriköiviä käyttäjiä suvaita. Esimerkkilauseke, jonka tarkistutat, eikä tämä ole oikeudellinen neuvo: "Loukkaavaa, vihamielistä, seksuaalista tai häiritsevää sisältöä ei suvaita. Ilmiannettu sisältö voidaan poistaa ja sen tekijä sulkea pois ilman ennakkoilmoitusta."

**Passiivinen lause rekisteröitymispainikkeen alla ei todista hyväksyntää: vaadi selkeä teko.** Näkymä, jossa on linkki käyttöehtoihin ja "Hyväksyn"-painike, ennen ensimmäistä julkaisua. Tallenna hyväksymispäivä ja -versio profiiliin ja estä julkaiseminen, kunnes ne löytyvät:

```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. Suodatin ennen kuin muut näkevät sisällön

Suodatin toimii palvelimella, koska sovelluksen koodin voi kiertää. Sovelluksessa oleva kopio vain varoittaa käyttäjää heti.

TradaZenissa tietokantafunktio tarkistaa jokaisen nimimerkin, ja sovellus käyttää samaa listaa varoittaakseen pelaajaa. Pidän molemmat identtisinä. Palvelimella loukkaavaa nimimerkkiä ei hylätä tallennettaessa: **se korvataan näytettäessä neutraalilla nimimerkillä, jolloin ketään ei estetä väärän positiivisen takia**.

Vääriä positiivisia tulee nopeasti. TradaZenissa suodattimen ensimmäinen versio sensuroi etunimiä kuten Dominique, Monique tai Véronique, koska niissä on pala rumaa sanaa. Korjaus: etsi kokonaisia sanoja, ei sanan osia. Ja koska sovellusta myydään japaniksi ja kiinaksi, suodatin kattaa myös nämä kielet.

### 3. Ilmianto, käsitelty 24 tunnin sisällä

Jokaisessa julkaistussa sisällössä on "Ilmianna"-painike. TradaZenissa liigan tulostaulukossa ilmiannettu nimimerkki näkyy heti neutraalilla nimellä ilmiantajan puhelimessa. Ilmianto lähtee sitten palvelimelle, ja se lähetetään myöhemmin uudelleen, jos puhelin on offline-tilassa.

Tietokannassa on ilmiantotaulu, yksi ilmianto per henkilö ja sisältö:

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

TradaZenissa **usean pelaajan ilmiantama nimimerkki korvataan neutraalilla nimimerkillä**, eikä ilmiantoja koskaan näytetä ilmiannetulle. Yleinen varotoimi: ilmiannossa käytettävän tunnisteen ei pidä olla sisällön tekijän muutettavissa, muuten hän voi välttää piilotuksen.

Automaattinen piilotus ei korvaa omaa päätöstäsi. Jotta pysyt 24 tunnissa, pyydä ilmoitus jokaisesta ilmiannosta: [Supabasen tietokanta-webhook](https://supabase.com/docs/guides/database/webhooks) voi kutsua palvelinfunktiota, joka lähettää sinulle viestin. Sisällön poistamiseen tarvittava avain pysyy palvelimella, kuten selitän artikkelissa [salainen API-avain Expo-sovelluksessa](https://devoria.fr/fi/blog/salainen-api-avain-expo-sovellus).

### 4. Esto, joka toimii heti

Estotaulu ja sen jälkeen käyttöoikeussääntö, joka poistaa estettyjen sisällön estäjän syötteestä:

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

TradaZenissa kaveri lisätään koodilla, ja hänet voi poistaa ja estää. **Estetty kaveri katoaa listalta, vaikka hän lähettäisi pyynnön uudelleen.**

### 5. Julkaistu, helposti löytyvä yhteystieto

Laita yhteysosoite sovelluksen asetuksiin ja App Store Connectiin tukiosoite (URL), joka oikeasti toimii. TradaZenissa tukiosoite löytyy tietosuojakäytännöstä ja käyttöehdoista. Näiden sivujen odotettu sisältö on artikkelissa [sovelluksen tietosuojakäytäntö](https://devoria.fr/fi/blog/sovelluksen-tietosuojakaytanto-ios-opas).

Viimeinen asia: päätä, mitä tilinsä poistavan käyttäjän sisällöille tapahtuu. Yllä oleva `on delete cascade` poistaa hänen ilmiantonsa tilin mukana. Koko resepti on artikkelissa [tilin poisto iOS:ssä](https://devoria.fr/fi/blog/ios-tilin-poisto-testaa-ennen-applea).

## Mitä TradaZen kertoo tietosuojakäytännössään

Nämä mekanismit on kuvattu julkisesti TradaZenin tietosuojakäytännössä, jota täydennettiin syyskuussa 2026 liigojen ja kavereiden myötä: "Nimimerkit kulkevat automaattisen suodattimen läpi; voit ilmiantaa sopimattoman nimimerkin tulostaulukossa sekä poistaa ja estää kaverin." Sama käytäntö tarkentaa, ettei sähköpostia eikä päiväkirjaa koskaan näytetä muille pelaajille. Sovelluksen taustat löytyvät [TradaZen-tapaustutkimuksesta](https://devoria.fr/fi/blog/tradazen-tapaustutkimus-iphone-sovelluksen-julkaisu).

## Mitä vastata Applelle 1.2-hylkäyksen jälkeen

Kerro tarkastajalle, mistä kukin mekanismi löytyy, sekä vastauksessasi että tarkastusmuistiinpanoissa. Nämä toiminnot ovat sovelluksessa: tarkastaja testaa buildiin sisältyvää koodia, joten varaudu uuteen buildiin. Ohje [App Review'lle vastaamiseen](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/reply-to-app-review-messages/) on sama kuin muissakin säännöissä. Tässä englanninkielinen pohja, jota muokkaat ja josta jätät vain sen, mikä pitää paikkansa sovelluksessasi:

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

Jos jokin mekanismi puuttuu buildista, pelkkä vastaus ei riitä. Kuten [guideline 2.1:ssä](https://devoria.fr/fi/blog/guideline-2-1-app-store-hylkays-korjaus), Apple arvioi sen buildin, joka sillä on käsissään.

## Guideline 1.2 -tarkistuslista ennen lähetystä

- Olet listannut kaiken, mitä käyttäjä julkaisee ja muut näkevät, nimimerkit mukaan lukien.
- Käyttöehtosi kieltävät loukkaavan sisällön ja väärinkäytökset, ja sovellus pyytää selkeän "Hyväksyn"-kuittauksen.
- Suodatin toimii palvelimella, etsii kokonaisia sanoja ja kattaa App Store -sivusi kielet.
- Jokaisessa sisällössä on "Ilmianna"-painike, ja jokainen ilmianto ilmoitetaan sinulle heti.
- Osaat poistaa sisällön ja sulkea sen tekijän pois alle 24 tunnissa.
- Käyttäjän estäminen poistaa hänen sisältönsä heti.
- Yhteysosoite näkyy sovelluksessa, ja tukiosoite (URL) toimii.
- Ikärajakysely ilmoittaa käyttäjien tuottaman sisällön ja viestinnän, jos sovelluksessasi on sellainen.
- Tarkastusmuistiinpanoissa kerrotaan, mistä kukin mekanismi löytyy, ja mukana on demotili.

## Korjaa hylkäys ennen kuin lähetät sovelluksen uudelleen

Jos sovelluksesi juuri hylättiin kohdan 1.2 perusteella, [Review Kit](https://devoria.fr/fi/kits/app-review) kokoaa sen, mitä tarkistan ennen jokaista lähetystä, ja mukana on kaksi skilliä, jotka käyvät projektisi läpi Claude Codessa ja valmistelevat vastauksesi, jos Apple hylkää. Jos haluat ihmisen näkemyksen, [varaa tunti kanssani](https://devoria.fr/fi/coaching): luemme viestin yhdessä ja käymme läpi moderointipolkusi. Koko toimintatapa hylkäyksen jälkeen on sivulla [Applen hylkäämä sovellus](https://devoria.fr/fi/expertise/apple-hylkasi-sovelluksen).

Jos valmistelet ensimmäistä julkaisuasi, [tee ilmainen diagnoosi](https://devoria.fr/fi/diagnostic): se kertoo, mihin vaiheeseen tarttua ensin, ja lähettää sinulle tarkistuslistani Applen hylkäysten välttämiseen.

Kukaan ei voi taata, että Apple hyväksyy sovelluksesi. Nämä viisi mekanismia selvästi näkyvillä poistavat ainakin tämän syyn listalta.

## Usein kysytyt kysymykset

### Mitä "Guideline 1.2 - Safety - User-Generated Content" tarkoittaa?

Se on hylkäyksen otsikko Applen viestissä. Se tarkoittaa, että sovelluksesi näyttää käyttäjien luomaa sisältöä ilman kaikkia odotettuja suojauksia: suodatinta, nopeasti käsiteltävää ilmiantoa, estoa, julkaistua yhteystietoa ja hyväksyttyjä käyttöehtoja.

### Lasketaanko nimimerkki tulostaulukossa käyttäjien sisällöksi?

Applen teksti ei sano sitä. Käsittelen sen sellaisena, koska nimimerkki valitaan vapaasti ja muut pelaajat näkevät sen. TradaZenissa tulostaulukoiden nimimerkit kulkevat suodattimen läpi, ne voi ilmiantaa ja ne korvataan neutraalilla nimimerkillä, jos niissä on ongelma.

### Pitääkö ilmiannot todella käsitellä 24 tunnin sisällä?

Sitä Applen hylkäysviesti vaatii. Säännön teksti puhuu nopeasta reagoinnista. Automaattinen suodatin ei siis riitä: tarvitaan joku, joka poistaa sisällön ja sulkee tekijän pois. Automaattinen piilotus useamman ilmiannon jälkeen auttaa pärjäämään sillä välin.

### Pitääkö käyttöehdot hyväksyä sovelluksessa?

Se on varmin tapa. Hylkäysviesti vaatii, että käyttäjät hyväksyvät ehdot, jotka eivät salli loukkaavaa sisältöä eivätkä häiriköiviä käyttäjiä. Linkki sivun alalaidassa ei todista hyväksyntää. Näkymä, jossa on "Hyväksyn"-painike ennen ensimmäistä julkaisua, ei jätä epäselvyyttä.

### Voiko anonyymi chat-sovellus läpäistä guideline 1.2:n?

Nykyinen teksti mainitsee satunnaisen tai anonyymin chattailun käyttötarkoituksena, jolle ei ole paikkaa App Storessa. Sovellus, joka on tarkoitettu lähinnä siihen, voidaan poistaa ilman ennakkoilmoitusta, vaikka siinä olisi suodatin, ilmianto ja esto.


## Projektisi

[Review Kit](https://devoria.fr/fi/kits/app-review): App Store -tarkastuksen tarkistuslistani, korjatut Applen hylkäykseni, Google Playn lista ja kolme Claude Code -skilliä. 49 €.

[iOS & Android Kit](https://devoria.fr/fi/kits/ios): Tee iPhone- ja Android-sovelluksesi Claude Codella: sovellusteni pohjakoodi, polku kauppoihin asti ja kaikki kitit. 99 €.

[Diagnoosi: mikä erottaa sinut omasta iPhone-sovelluksestasi](https://devoria.fr/fi/diagnostic): 7 kysymystä, 60 sekuntia: tiedät, mikä oikeasti estää sinua julkaisemasta iPhone-sovellustasi, saat 4 vaiheen polkusi ja sinulle sopivan kitin.
