# Guideline 4.8 Login Services: je Sign in with Apple obvezen?

> Guideline 4.8: če ima tvoja aplikacija prijavo z Googlom ali Facebookom, dodaj prijavo, ki ščiti e-pošto, kot je Apple. Izjeme, koda Expo in izbris računa.

Izvirna stran: [Guideline 4.8 Login Services: je Sign in with Apple obvezen?](https://devoria.fr/sl/blog/guideline-4-8-login-services-sign-in-with-apple)
Avtor: [Mehdi Azizi](https://devoria.fr/sl/mehdi-azizi)
Objava: 2026-10-27
Zadnja revizija vsebine: 2026-10-27


Guideline 4.8 velja takoj, ko tvoja aplikacija uporablja Google, Facebook ali drugo prijavo tretje osebe za ustvarjanje glavnega računa. Takrat zahteva še eno, enakovredno možnost prijave, ki podatke omeji na ime in e-pošto, omogoča skrivanje e-poštnega naslova in uporabnika brez njegovega soglasja ne sledi za oglaševanje. **Od januarja 2024 to ni nujno več „Sign in with Apple“, vendar je to tista možnost, ki jo Apple sam navaja v svojih sporočilih o zavrnitvi.**

Med mojimi aplikacijami Solys in Nolera ponujata Apple, Google in e-pošto. Ta vodnik izhaja iz trenutnega Applovega besedila, nato pokaže, kako dodam prijavo z Applom v aplikacijo Expo, povezano s Supabase, in kaj to spremeni pri izbrisu računa. Za pregled vseh razlogov za zavrnitev raje preberi [zakaj Apple zavrne aplikacijo](https://devoria.fr/sl/blog/apple-zavrnil-aplikacijo-razlogi).

## Kaj pravi guideline 4.8 Login Services?

Točka 4.8 je v razdelku 4, „Design“, v [App Review Guidelines](https://developer.apple.com/app-store/review/guidelines/#login-services). Velja za aplikacije, ki uporabljajo „a third-party or social login service“ za ustvarjanje ali preverjanje glavnega računa: Facebook Login, Google Sign-In, Log in with X, LinkedIn, Amazon ali WeChat. Te aplikacije morajo „as an equivalent option“ ponuditi še drugo storitev prijave, ki izpolnjuje tri pogoje.

| Applov pogoj               | Po domače                             |
| -------------------------- | ------------------------------------- |
| Omejeni podatki            | Ime in e-pošta, nič več               |
| Možna zasebna e-pošta      | Uporabnik jo lahko skrije             |
| Brez oglasov brez soglasja | Brez oglasnega sledenja brez soglasja |

Besedilo opredeli tudi glavni račun: tisti, ki ga oseba ustvari v tvoji aplikaciji, da se identificira, prijavi in dostopa do funkcij. Po tej opredelitvi **gumb Google, ki služi samo za uvoz datoteke, ne ustvari glavnega računa**. Točka 4.8 se nanaša na zaslon, prek katerega vstopiš v aplikacijo.

### Kaj se je spremenilo januarja 2024

Pred letom 2024 je pravilo zahtevalo „Sign in with Apple“ za aplikacije, ki so za glavni račun uporabljale prijavo tretje osebe. [25. januarja 2024](https://developer.apple.com/news/?id=f1v8pyay) je Apple to omilil: ponudiš lahko prijavo z Applom ali enakovredno storitev, ki varuje zasebnost. Veliko strani še vedno trdi nasprotno. [Dokumentacija Expo](https://docs.expo.dev/versions/latest/sdk/apple-authentication/) še vedno piše, da mora aplikacija s prijavo tretje osebe ponuditi Apple.

V praksi se sporočilo o zavrnitvi 4.8, objavljeno na [Applovih forumih za razvijalce](https://developer.apple.com/forums/thread/765145), konča takole: „Note that Sign in with Apple meets the requirements specified in guideline 4.8“. Apple ne omeni nobene druge skladne storitve. **Da se ne bi z reviewerjem igral ugibanja, dodam prijavo z Applom.**

## Pet izjem, ki jih predvideva besedilo

Apple našteje pet primerov, ko druga prijava ni zahtevana:

1. **Tvoja aplikacija uporablja samo lasten sistem računov**, na primer e-pošto z geslom ali kodo, poslano po e-pošti.
2. Tvoja aplikacija je alternativna trgovina z aplikacijami ali jo ta distribuira, s prijavo, ki je lastna tej trgovini.
3. Tvoja aplikacija je izobraževalna, podjetniška ali poslovna in zahteva obstoječ šolski ali službeni račun.
4. Tvoja aplikacija uporablja sistem elektronske identitete, ki ga podpira država ali panoga.
5. Tvoja aplikacija je odjemalec točno določene storitve tretje osebe: oseba se prijavi v svojo e-pošto ali družbeno omrežje, da dostopa do lastne vsebine.

Še pred temi izjemami se vprašaj: ali tvoja aplikacija sploh potrebuje račun? Če ne, guideline 5.1.1(v) zahteva, da je uporabna brez prijave, kot razložim v [vodniku za guideline 5.1.1](https://devoria.fr/sl/blog/smernica-5-1-1-zavrnitev-app-store).

| Tvoj zaslon za prijavo | Ali velja 4.8?    |
| ---------------------- | ----------------- |
| Brez računa            | Ne                |
| Samo e-pošta ali koda  | Ne                |
| Samo Google            | Da                |
| Google in e-pošta      | Načeloma da       |
| Google in Apple        | Da, in je skladno |
| Obstoječ šolski račun  | Ne                |
| Google za uvoz         | Ne, ni računa     |

## Dodajanje „Sign in with Apple“ v aplikacijo Expo

### 1. Namesti modul in prijavi zmožnost

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

Dokumentacija Expo nato zahteva, da zmožnost vklopiš v konfiguraciji aplikacije:

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

Druga vrstica prikaže gumb v jeziku iPhona. Z EAS Build se zmožnost vklopi na identifikatorju tvoje aplikacije ob buildu. **To je nativna nastavitev: pride z novim buildom, nikoli z oddaljeno posodobitvijo.**

Past, ki sem jo našel, ko sem pregledoval začetno kodo svojih kitov: ta zmožnost zahteva podpis, tudi za zagon aplikacije v simulatorju. Na Macu brez certifikata „Apple Development“ je lokalno prevajanje padlo z napako „No code signing certificates are available to use“. Rešitev: prijavo z Applom vklopi šele, ko je strežnik za avtentikacijo nastavljen.

### 2. Prikaži uradni gumb, enako viden kot Google

[Applova pravila oblikovanja](https://developer.apple.com/design/human-interface-guidelines/sign-in-with-apple) so jasna: gumb Apple ne sme biti manjši od drugih gumbov za prijavo in zanj ne smeš drseti po zaslonu. Komponenta Expo nariše uradni gumb z naslovom, ki ga Apple dovoli.

```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 in splet: ni prijave z Applom, ni gumba.
  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 opozarja, da se gumb brez širine in višine ne prikaže. Barvo in zaobljenost nastaviš prek `buttonStyle` in `cornerRadius`, ne prek stila.

### 3. Odpri sejo v Supabase

```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("Manjka Applov žeton");
    const { error } = await supabase.auth.signInWithIdToken({
      provider: "apple",
      token: credential.identityToken,
    });
    if (error) throw error;
    // Ime pride samo ob prvi avtorizaciji: shranimo ga takoj.
    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;
  }
}
```

Štiri podrobnosti so pomembne, povzete po [dokumentaciji Supabase](https://supabase.com/docs/guides/auth/social-login/auth-apple), dokumentaciji Expo in Applovih pravilih oblikovanja:

- **V Supabase vpiši identifikator bundla** med Client IDs ponudnika Apple. Povsem nativna aplikacija za prijavo ne potrebuje skrivnega ključa. Dodaj `host.exp.Exponent`, če testiraš v Expo Go.
- **Ime in e-pošta prideta samo enkrat.** Apple ju ob naslednjih prijavah ne vrne več: shrani ju takoj ob prvem odgovoru.
- **E-pošta je lahko posredniški naslov.** Apple priporoča, da potem ne zahtevaš ponovno osebnega naslova.
- **Preklic ni napaka.** Pri Noleri zapiranje Applovega okna ne sproži nobenega rdečega sporočila: to je namerno dejanje.

Primer iz prakse pri Solysu, avgusta 2026: gumba Apple in Google sta bila v aplikaciji, a nobeden od ponudnikov ni bil vklopljen v Supabase. Koda je bila pravilna, popravek je bil na strani strežnika, brez novega builda. **Gumb Apple, ki pred reviewerjem ne deluje, pomeni zavrnitev 2.1 namesto zavrnitve 4.8.** Podrobnosti so v [vodniku za guideline 2.1](https://devoria.fr/sl/blog/smernica-2-1-app-store-zavrnitev).

### 4. Testiraj na pravem iPhonu

Expo opozarja, da simulator omogoča le omejeno testiranje in da se poverilnice, prejete v Expo Go, razlikujejo od tistih v objavljeni aplikaciji. Prijavo, odjavo in ponovno prijavo testiraj na pravem iPhonu, z buildom v [TestFlight](https://devoria.fr/sl/blog/testflight-testiranje-aplikacije-iphone).

## Prijava z Applom in izbris računa

Guideline 5.1.1(v) zahteva, da je račun, ustvarjen v aplikaciji, mogoče izbrisati iz aplikacije. Pri prijavi z Applom [Applova stran o izbrisu računa](https://developer.apple.com/support/offering-account-deletion-in-your-app) doda korak: z API-jem REST za Sign in with Apple moraš [preklicati žetone](https://developer.apple.com/documentation/signinwithapplerestapi/revoke-tokens) osebe.

Preklic zahteva dvoje: žeton osebe, ki ga dobiš s preverjanjem avtorizacijske kode, in skrivnost, podpisano z zasebnim ključem Sign in with Apple. **Čeprav nativna prijava ne potrebuje skrivnega ključa, ga preklic zahteva, in ta ostane na tvojem strežniku.** Zakaj, preberi v [skrivni API ključ v aplikaciji Expo](https://devoria.fr/sl/blog/skrivni-api-kljuc-aplikacija-expo).

Pri Noleri aplikacija ob izbrisu računa znova zahteva prijavo z Applom, da dobi svežo avtorizacijsko kodo. Pošlje jo strežniški funkciji, ki jo zamenja pri Applu in nato prekliče žeton. Če oseba prekliče, jasno sporočilo to pove in nič se ne izbriše. Preostanek postopka, vključno s podatki, naročnino in testi, je v [izbris računa v iOS](https://devoria.fr/sl/blog/brisanje-racuna-ios-aplikacija-apple).

## Kaj odgovoriti Applu po zavrnitvi 4.8

Applovo sporočilo ponuja dva izhoda. Ali dodaš enakovredno možnost. Ali pa jo tvoja aplikacija že ima: odgovoriš v App Store Connect in poveš, katera je in zakaj izpolnjuje tri pogoje. Apple predlaga tudi posodobitev posnetkov zaslona, ki prikazujejo zaslon za prijavo. 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.

Tu je predloga v angleščini, ki jo prilagodi (zamenjaj številko builda):

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

## Kontrolni seznam 4.8 pred oddajo

- Veš, ali tvoja aplikacija potrebuje račun. Če ga ne, se uporablja brez prijave.
- Če Google, Facebook ali X ustvarijo račun, je prijava z Applom na istem zaslonu.
- Gumb Apple je uradni gumb, enako velik kot drugi, viden brez drsenja.
- Ponudnik Apple je vklopljen na strežniku, z identifikatorjem tvojega bundla.
- Preklic te vrne na zaslon za prijavo, brez sporočila o napaki.
- Ime in e-pošta se shranita že ob prvi prijavi.
- Izbris računa prekliče Applov žeton, s tvojega strežnika.
- Vse je testirano na pravem iPhonu, z Apple računom, ki se v aplikacijo še ni nikoli prijavil.
- Tvoji posnetki zaslona kažejo zaslon za prijavo tak, kot je v oddanem buildu.

## Popravi zavrnitev, preden aplikacijo pošlješ znova

Če je bila tvoja aplikacija pravkar zavrnjena zaradi 4.8, [Apple 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 zaslon za prijavo. 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 objavo, [opravi brezplačno diagnozo](https://devoria.fr/sl/diagnostic): pove ti, kateri korak se lotiti najprej, in ti pošlje moj kontrolni seznam proti Applovim zavrnitvam.

Nihče ne more zagotoviti, da bo Apple sprejel tvojo aplikacijo. Če prijavo z Applom dodaš na pravo mesto, vsaj ta razlog odpade s seznama.

## Pogosta vprašanja

### Ali je prijava z Applom v iOS obvezna?

Ne, ne v vseh primerih. Zahtevana je le, če tvoja aplikacija ponuja prijavo tretje osebe, kot sta Google ali Facebook, za ustvarjanje glavnega računa. Od januarja 2024 jo lahko nadomesti druga enakovredna storitev, vendar Apple kot skladno navaja samo prijavo z Applom.

### Kaj pomeni „Guideline 4.8 - Design - Login Services“?

To je naslov zavrnitve v Applovem sporočilu. Pomeni, da tvoja aplikacija ponuja prijavo tretje osebe, ne da bi ponudila enakovredno možnost, ki podatke omeji na ime in e-pošto, omogoča skrivanje e-pošte in se brez soglasja ne uporablja za oglaševanje.

### Ali zadošča registracija z e-pošto poleg Googla?

Ni zagotovljeno. Besedilo zahteva storitev, ki omogoča, da e-pošta ostane zasebna, klasičen obrazec pa jo zahteva. Apple o tem primeru ni objavil stališča, njegovo sporočilo o zavrnitvi pa navaja samo prijavo z Applom. Jaz tega tveganja ne bi sprejel.

### Ali moram prijavo z Applom ponuditi tudi v Androidu?

Ne. 4.8 je pravilo App Store, modul Expo pa deluje samo v iOS. V Androidu `isAvailableAsync()` vrne false: gumb Apple se ne prikaže in Google lahko ostane sam.

### Ali po zavrnitvi 4.8 potrebujem nov build?

Da, v večini primerov. Prijava z Applom zahteva nativno zmožnost, ki se vklopi ob buildu. Oddaljena posodobitev je ne more dodati. Edina izjema: tvoja aplikacija je že imela skladno možnost in jo moraš Applu le razložiti v odgovoru.


## Tvoj projekt

[Apple Review Kit](https://devoria.fr/sl/kits/app-review): Moj kontrolni seznam za App Store review, moje popravljene zavrnitve, opombe za preizkuševalca in dva skilla Claude Code za pregled aplikacije. 29 €.

[iOS Kit](https://devoria.fr/sl/kits/ios): Ustvari aplikacijo za iPhone s Claude Code: začetna koda mojih aplikacij, skilli, ki preverjajo delo, ter kiti Apple Review, Screenshots in ASO. 129,99 €.
