# Guideline 4.8: tarvitaanko Apple-kirjautuminen?

> Guideline 4.8: jos appissa on Google- tai Facebook-kirjautuminen, lisää sähköpostia suojaava vaihtoehto, kuten Apple. Poikkeukset, Expo-koodi ja tilin poisto.

Alkuperäinen sivu: [Guideline 4.8: tarvitaanko Apple-kirjautuminen?](https://devoria.fr/fi/blog/guideline-4-8-login-services-apple-kirjautuminen)
Kirjoittaja: [Mehdi Azizi](https://devoria.fr/fi/mehdi-azizi)
Julkaistu: 2026-10-27
Sisältö tarkistettu viimeksi: 2026-10-27


Guideline 4.8 koskee appiasi heti, kun se käyttää Googlea, Facebookia tai muuta kolmannen osapuolen kirjautumista päätilin luomiseen. Silloin sinun on tarjottava myös toinen, vastaava kirjautumisvaihtoehto, joka rajaa tiedot nimeen ja sähköpostiin, antaa piilottaa sähköpostiosoitteen eikä seuraa käyttäjää mainontaa varten ilman suostumusta. **Tammikuusta 2024 lähtien tämän vaihtoehdon ei ole pakko olla "Sign in with Apple", mutta juuri sen Apple itse mainitsee hylkäysviesteissään.**

Omista apeistani Solys ja Nolera tarjoavat Applen, Googlen ja sähköpostin. Tämä opas lähtee Applen nykyisestä tekstistä ja näyttää sitten, miten lisään Apple-kirjautumisen Expo-appiin, joka on kytketty Supabaseen, ja mitä se muuttaa tilin poistamisessa. Jos haluat yleiskuvan hylkäyssyistä, lue mieluummin [miksi Apple hylkää appin](https://devoria.fr/fi/blog/apple-hylkasi-sovelluksen-syyt).

## Mitä guideline 4.8 Login Services sanoo?

Kohta 4.8 löytyy [App Review Guidelinesin](https://developer.apple.com/app-store/review/guidelines/#login-services) osiosta 4, "Design". Se koskee appeja, jotka käyttävät "a third-party or social login service" -palvelua päätilin luomiseen tai tunnistamiseen: Facebook Login, Google Sign-In, Log in with X, LinkedIn, Amazon tai WeChat. Näiden appien on tarjottava myös "as an equivalent option" toinen kirjautumispalvelu, joka täyttää kolme ehtoa.

| Applen ehto                       | Selkokielellä                        |
| --------------------------------- | ------------------------------------ |
| Rajatut tiedot                    | Nimi ja sähköposti, ei muuta         |
| Yksityinen sähköposti mahdollinen | Käyttäjä voi piilottaa sen           |
| Ei mainontaa ilman suostumusta    | Ei mainosseurantaa ilman suostumusta |

Teksti määrittelee myös päätilin: sen tilin, jonka ihminen luo appiisi tunnistautuakseen, kirjautuakseen ja päästäkseen käsiksi toimintoihin. Tämän määritelmän mukaan **Google-painike, jota käytetään vain tiedoston tuomiseen, ei luo päätiliä**. Kohta 4.8 koskee sitä näkymää, josta appiin kirjaudutaan sisään.

### Mikä muuttui tammikuussa 2024

Ennen vuotta 2024 sääntö vaati "Sign in with Apple" -kirjautumista appeilta, jotka käyttivät kolmannen osapuolen kirjautumista päätiliin. [25. tammikuuta 2024](https://developer.apple.com/news/?id=f1v8pyay) Apple lievensi tätä: voit tarjota Apple-kirjautumisen tai vastaavan, yksityisyyttä suojaavan palvelun. Monet sivut väittävät yhä päinvastaista. [Expon dokumentaatiossa](https://docs.expo.dev/versions/latest/sdk/apple-authentication/) lukee edelleen, että kolmannen osapuolen kirjautumista käyttävän appin on tarjottava Apple.

Käytännössä [Applen kehittäjäfoorumeilla](https://developer.apple.com/forums/thread/765145) julkaistu 4.8-hylkäysviesti päättyy näin: "Note that Sign in with Apple meets the requirements specified in guideline 4.8". Apple ei nimeä mitään muuta vaatimukset täyttävää palvelua. **Jotta en joutuisi arvailemaan reviewerin kanssa, lisään Apple-kirjautumisen.**

## Tekstin viisi poikkeusta

Apple listaa viisi tapausta, joissa muuta kirjautumista ei vaadita:

1. **Appisi käyttää vain omaa tilijärjestelmääsi**, esimerkiksi sähköpostia ja salasanaa tai sähköpostiin lähetettävää koodia.
2. Appisi on vaihtoehtoinen sovelluskauppa tai sellaisen kautta jaeltu, ja siinä on kaupan oma kirjautuminen.
3. Appisi on opetus-, yritys- tai työkäyttöön tarkoitettu ja vaatii olemassa olevan koulu- tai yritystilin.
4. Appisi käyttää valtion tai toimialan tukemaa sähköistä tunnistusjärjestelmää.
5. Appisi on tietyn kolmannen osapuolen palvelun asiakasohjelma: ihminen kirjautuu sähköpostiinsa tai sosiaaliseen mediaansa päästäkseen omaan sisältöönsä.

Ennen näitä poikkeuksia kysy itseltäsi: tarvitseeko appisi tiliä ollenkaan? Jos ei, guideline 5.1.1(v) vaatii, että appia voi käyttää ilman kirjautumista, kuten selitän [guideline 5.1.1 -oppaassa](https://devoria.fr/fi/blog/guideline-5-1-1-app-store-hylkays-korjaus).

| Kirjautumisnäkymäsi       | Koskeeko 4.8?                   |
| ------------------------- | ------------------------------- |
| Ei tiliä                  | Ei                              |
| Vain sähköposti tai koodi | Ei                              |
| Pelkkä Google             | Kyllä                           |
| Google ja sähköposti      | Kyllä, lähtökohtaisesti         |
| Google ja Apple           | Kyllä, ja vaatimukset täyttyvät |
| Olemassa oleva koulutili  | Ei                              |
| Google tiedoston tuontiin | Ei, ei tiliä                    |

## "Sign in with Apple" -kirjautumisen lisääminen Expo-appiin

### 1. Asenna moduuli ja ilmoita kyvykkyys

```bash
npx expo install expo-apple-authentication
```

Expon dokumentaatio neuvoo sitten ottamaan kyvykkyyden käyttöön appin konfiguraatiossa:

```json
{
  "expo": {
    "ios": {
      "usesAppleSignIn": true,
      "infoPlist": { "CFBundleAllowMixedLocalizations": true }
    }
  }
}
```

Toinen rivi näyttää painikkeen iPhonen kielellä. EAS Buildilla kyvykkyys otetaan käyttöön app-tunnisteellesi buildin yhteydessä. **Kyse on natiiviasetuksesta: se lähtee mukaan uudessa buildissa, ei koskaan etäpäivityksessä.**

Yksi ansa, jonka löysin lukiessani kittieni aloituskoodia uudelleen: tämä kyvykkyys vaatii allekirjoituksen, jopa appin ajamiseen simulaattorissa. Macillä, jossa ei ollut "Apple Development" -varmennetta, paikallinen käännös kaatui virheeseen "No code signing certificates are available to use". Korjaus: ota Apple-kirjautuminen käyttöön vasta, kun tunnistautumispalvelin on konfiguroitu.

### 2. Näytä virallinen painike, yhtä näkyvänä kuin Google

[Applen suunnitteluohjeet](https://developer.apple.com/design/human-interface-guidelines/sign-in-with-apple) ovat selvät: Apple-painike ei saa olla muita kirjautumispainikkeita pienempi, eikä sen näkemiseksi saa joutua vierittämään näkymää. Expon komponentti piirtää virallisen painikkeen Applen hyväksymällä otsikolla.

```tsx
import * as AppleAuthentication from "expo-apple-authentication";
import { useEffect, useState } from "react";

export function BoutonApple({ onPress }: { onPress: () => void }) {
  const [disponible, setDisponible] = useState(false);

  useEffect(() => {
    AppleAuthentication.isAvailableAsync().then(setDisponible);
  }, []);

  // Android ja web: ei Apple-kirjautumista, ei painiketta.
  if (!disponible) return null;

  return (
    <AppleAuthentication.AppleAuthenticationButton
      buttonType={AppleAuthentication.AppleAuthenticationButtonType.CONTINUE}
      buttonStyle={AppleAuthentication.AppleAuthenticationButtonStyle.BLACK}
      cornerRadius={12}
      style={{ width: "100%", height: 50 }}
      onPress={onPress}
    />
  );
}
```

Expo huomauttaa, ettei painike näy ilman leveyttä ja korkeutta. Väri ja pyöristys asetetaan `buttonStyle`- ja `cornerRadius`-ominaisuuksilla, ei tyylillä.

### 3. Avaa istunto Supabasessa

```ts
import * as AppleAuthentication from "expo-apple-authentication";
import { supabase } from "./supabase";

export async function connexionApple(): Promise<"ok" | "annule"> {
  try {
    const credential = await AppleAuthentication.signInAsync({
      requestedScopes: [
        AppleAuthentication.AppleAuthenticationScope.FULL_NAME,
        AppleAuthentication.AppleAuthenticationScope.EMAIL,
      ],
    });
    if (!credential.identityToken) throw new Error("Apple-tunniste puuttuu");
    const { error } = await supabase.auth.signInWithIdToken({
      provider: "apple",
      token: credential.identityToken,
    });
    if (error) throw error;
    // Etunimi tulee vain ensimmäisellä valtuutuksella: tallennetaan se heti.
    const prenom = credential.fullName?.givenName;
    if (prenom) await supabase.auth.updateUser({ data: { prenom } });
    return "ok";
  } catch (e) {
    if ((e as { code?: string }).code === "ERR_REQUEST_CANCELED")
      return "annule";
    throw e;
  }
}
```

Neljä yksityiskohtaa on tärkeitä. Ne tulevat [Supabasen dokumentaatiosta](https://supabase.com/docs/guides/auth/social-login/auth-apple), Expon dokumentaatiosta ja Applen suunnitteluohjeista:

- **Lisää Supabasessa bundle-tunnisteesi** Apple-palveluntarjoajan Client IDs -kenttään. Pelkästään natiivi appi ei tarvitse salaista avainta kirjautumiseen. Lisää `host.exp.Exponent`, jos testaat Expo Gossa.
- **Etunimi ja sähköposti tulevat vain kerran.** Apple ei palauta niitä enää seuraavilla kirjautumiskerroilla: tallenna ne heti ensimmäisestä vastauksesta.
- **Sähköposti voi olla välitysosoite.** Apple suosittelee, ettei henkilökohtaista osoitetta kysytä jälkikäteen.
- **Peruutus ei ole virhe.** Noleralla Apple-ikkunan sulkeminen ei näytä mitään punaista virheilmoitusta: se on tietoinen valinta.

Oikea tapaus Solysista elokuulta 2026: Apple- ja Google-painikkeet olivat appissa, mutta kumpaakaan palveluntarjoajaa ei ollut otettu käyttöön Supabasessa. Koodi oli kunnossa, korjaus tehtiin palvelimen puolella ilman uutta buildia. **Apple-painike, joka epäonnistuu reviewerin edessä, tarkoittaa 2.1-hylkäystä 4.8-hylkäyksen sijaan.** Yksityiskohdat ovat [guideline 2.1 -oppaassa](https://devoria.fr/fi/blog/guideline-2-1-app-store-hylkays-korjaus).

### 4. Testaa oikealla iPhonella

Expo varoittaa, että simulaattorilla voi testata vain rajallisesti ja että Expo Gossa saadut tunnisteet eroavat julkaistun appin tunnisteista. Testaa kirjautuminen, uloskirjautuminen ja uudelleenkirjautuminen oikealla iPhonella [TestFlight](https://devoria.fr/fi/blog/testflight-testaa-iphone-sovellus-ennen-lahetysta)-buildilla.

## Apple-kirjautuminen ja tilin poistaminen

Guideline 5.1.1(v) vaatii, että appissa luodun tilin voi poistaa appista käsin. Apple-kirjautumisen kanssa [Applen tilin poistoa käsittelevä sivu](https://developer.apple.com/support/offering-account-deletion-in-your-app) lisää vaiheen: Sign in with Applen REST-rajapinnalla on [mitätöitävä henkilön tunnisteet](https://developer.apple.com/documentation/signinwithapplerestapi/revoke-tokens).

Mitätöinti vaatii kaksi asiaa: henkilön tunnisteen, jonka saat vahvistamalla valtuutuskoodin, ja salaisuuden, joka on allekirjoitettu Sign in with Applen yksityisellä avaimellasi. **Vaikka natiivikirjautuminen pärjää ilman salaista avainta, mitätöinti vaatii sellaisen, ja sen paikka on palvelimellasi.** Syy on selitetty artikkelissa [salainen API-avain Expo-appissa](https://devoria.fr/fi/blog/salainen-api-avain-expo-sovellus).

Noleralla tiliä poistettaessa appi pyytää uuden Apple-kirjautumisen saadakseen tuoreen valtuutuskoodin. Se lähettää koodin palvelinfunktiolle, joka vaihtaa sen Applelta ja mitätöi sitten tunnisteen. Jos henkilö peruu, selkeä viesti kertoo sen eikä mitään poisteta. Loput prosessista, tiedot, tilaus ja testit mukaan lukien, löytyy artikkelista [iOS-tilin poistaminen](https://devoria.fr/fi/blog/ios-tilin-poisto-testaa-ennen-applea).

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

Applen viesti tarjoaa kaksi ratkaisua. Joko lisäät vastaavan vaihtoehdon. Tai appissasi on jo sellainen: vastaat App Store Connectissa, kerrot mikä se on ja miksi se täyttää kolme ehtoa. Apple ehdottaa myös päivittämään kuvakaappaukset, joissa kirjautumisnäkymä näkyy. Menettely [App Review -viesteihin 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 muokattavaksi (vaihda buildin numero):

```text
Hello,

Thank you for your review.

Build X adds Sign in with Apple as an equivalent login option.
It appears on the same screen as Google Sign-In, with the same
size, and is visible without scrolling.

How to verify: launch the app, open the sign-in screen and
tap "Continue with Apple".

We also updated the screenshots that show the sign-in screen.

Best regards,
```

## 4.8-tarkistuslista ennen lähettämistä

- Tiedät, tarvitseeko appisi tiliä. Jos ei, sitä voi käyttää ilman kirjautumista.
- Jos Google, Facebook tai X luo tilin, Apple-kirjautuminen on samassa näkymässä.
- Apple-painike on virallinen painike, yhtä suuri kuin muut ja näkyvissä ilman vieritystä.
- Apple-palveluntarjoaja on otettu käyttöön palvelimella bundle-tunnisteellasi.
- Peruutus palauttaa kirjautumisnäkymään ilman virheilmoitusta.
- Etunimi ja sähköposti tallennetaan heti ensimmäisellä kirjautumisella.
- Tilin poisto mitätöi Apple-tunnisteen palvelimeltasi.
- Kaikki on testattu oikealla iPhonella Apple-tilillä, joka ei ole koskaan kirjautunut appiin.
- Kuvakaappauksesi näyttävät kirjautumisnäkymän sellaisena kuin se on lähetetyssä buildissa.

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

Jos appisi hylättiin juuri kohdan 4.8 perusteella, [Apple Review Kit](https://devoria.fr/fi/kits/app-review) kokoaa yhteen 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ää appin. Jos haluat ihmisen katsovan, [varaa tunti kanssani](https://devoria.fr/fi/coaching): luemme viestin yhdessä ja katsomme kirjautumisnäkymääsi. Koko toimintatapa hylkäyksen jälkeen on sivulla [Applen hylkäämä appi](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 kannattaa tarttua ensin, ja lähettää sinulle tarkistuslistani Applen hylkäysten välttämiseen.

Kukaan ei voi taata, että Apple hyväksyy appisi. Apple-kirjautumisen lisääminen oikeaan paikkaan poistaa ainakin tämän syyn listalta.

## Usein kysytyt kysymykset

### Onko Apple-kirjautuminen pakollinen iOS:ssä?

Ei kaikissa tapauksissa. Sitä vaaditaan vain, jos appisi tarjoaa kolmannen osapuolen kirjautumisen, kuten Googlen tai Facebookin, päätilin luomiseen. Tammikuusta 2024 lähtien sen voi korvata toisella vastaavalla palvelulla, mutta Apple mainitsee vaatimukset täyttävänä vain Apple-kirjautumisen.

### Mitä "Guideline 4.8 - Design - Login Services" tarkoittaa?

Se on hylkäyksen otsikko Applen viestissä. Se tarkoittaa, että appisi tarjoaa kolmannen osapuolen kirjautumisen tarjoamatta vastaavaa vaihtoehtoa, joka rajaa tiedot nimeen ja sähköpostiin, antaa piilottaa sähköpostin eikä palvele mainontaa ilman suostumusta.

### Riittääkö sähköpostirekisteröinti Googlen rinnalla?

Se ei ole varmaa. Teksti vaatii palvelua, jolla sähköpostin voi pitää yksityisenä, kun taas tavallinen lomake kysyy sitä. Apple ei ole julkaissut kantaansa tähän tapaukseen, ja sen hylkäysviesti mainitsee vain Apple-kirjautumisen. Itse en ottaisi tätä riskiä.

### Pitääkö Apple-kirjautuminen tarjota Androidilla?

Ei. Kohta 4.8 on App Storen sääntö, ja Expon moduuli toimii vain iOS:ssä. Androidilla `isAvailableAsync()` palauttaa epätoden: Apple-painike ei näy, ja Google voi olla ainoa vaihtoehto.

### Tarvitaanko uusi build 4.8-hylkäyksen jälkeen?

Kyllä, useimmiten. Apple-kirjautuminen vaatii natiivin kyvykkyyden, joka otetaan käyttöön buildin yhteydessä. Etäpäivitys ei voi lisätä sitä. Ainoa poikkeus: appissasi oli jo vaatimukset täyttävä vaihtoehto, ja riittää, että selität sen Applelle vastauksessasi.


## Projektisi

[Apple Review Kit](https://devoria.fr/fi/kits/app-review): Käyttämäni App Store -reviewn tarkistuslista, korjatut Apple-hylkäykseni, muistiinpanot testaajalle ja kaksi appisi tarkistavaa Claude Code -skilliä. 29 €.

[iOS Kit](https://devoria.fr/fi/kits/ios): Tee iPhone-appisi Claude Coden avulla: omien appieni aloituskoodi, työn tarkistavat skillit sekä Apple Review-, Screenshots- ja ASO-kitit. 129,99 €.
