# Guideline 4.8: musí mať app Sign in with Apple?

> Guideline 4.8: ak má tvoja app prihlásenie cez Google alebo Facebook, pridaj prihlásenie, ktoré chráni e-mail, ako Apple. Výnimky, kód v Expo a zmazanie účtu.

Pôvodná stránka: [Guideline 4.8: musí mať app Sign in with Apple?](https://devoria.fr/sk/blog/guideline-4-8-login-services-sign-in-with-apple)
Autor: [Mehdi Azizi](https://devoria.fr/sk/mehdi-azizi)
Zverejnenie: 2026-10-27
Posledná revízia obsahu: 2026-10-27


Guideline 4.8 platí, keď tvoja app používa Google, Facebook alebo iné prihlásenie tretej strany na vytvorenie hlavného účtu. V takom prípade musí ponúknuť ďalšiu, rovnocennú možnosť prihlásenia, ktorá obmedzí údaje na meno a e-mail, umožní e-mail skryť a bez súhlasu používateľa ho nesleduje kvôli reklame. **Od januára 2024 to už nemusí byť nutne „Sign in with Apple“, ale práve túto možnosť Apple sám uvádza vo svojich správach o zamietnutí.**

V mojich appkách ponúkajú Solys a Nolera prihlásenie cez Apple, Google a e-mail. Tento návod vychádza z aktuálneho textu Apple, potom ukazuje, ako pridávam prihlásenie cez Apple do Expo appky prepojenej so Supabase, a čo to mení pri mazaní účtu. Celkový prehľad dôvodov zamietnutia nájdeš skôr v článku [prečo Apple zamieta appky](https://devoria.fr/sk/blog/zamietnutie-aplikacie-apple-pricina).

## Čo hovorí guideline 4.8 Login Services?

Pravidlo 4.8 je v sekcii 4, „Design“, v [App Review Guidelines](https://developer.apple.com/app-store/review/guidelines/#login-services). Týka sa appiek, ktoré používajú „a third-party or social login service“ na vytvorenie alebo overenie hlavného účtu: Facebook Login, Google Sign-In, Log in with X, LinkedIn, Amazon alebo WeChat. Tieto appky musia ponúknuť aj, „as an equivalent option“, ďalšiu prihlasovaciu službu, ktorá spĺňa tri podmienky.

| Podmienka Apple            | Zrozumiteľne                           |
| -------------------------- | -------------------------------------- |
| Obmedzené údaje            | Meno a e-mail, nič viac                |
| Možnosť súkromného e-mailu | Používateľ ho môže skryť               |
| Žiadna reklama bez súhlasu | Žiadne reklamné sledovanie bez súhlasu |

Text definuje aj hlavný účet: ten, ktorý si človek v tvojej appke vytvorí, aby sa identifikoval, prihlásil a dostal sa k jej funkciám. Podľa tejto definície **tlačidlo Google, ktoré slúži len na import súboru, nevytvára hlavný účet**. Pravidlo 4.8 mieri na obrazovku, cez ktorú sa vstupuje do tvojej appky.

### Čo sa zmenilo v januári 2024

Pred rokom 2024 pravidlo vyžadovalo „Sign in with Apple“ pri appkách, ktoré na hlavný účet používali prihlásenie tretej strany. [25. januára 2024](https://developer.apple.com/news/?id=f1v8pyay) to Apple zmiernil: môžeš ponúknuť prihlásenie cez Apple alebo rovnocennú službu, ktorá chráni súkromie. Veľa stránok stále tvrdí opak. [Dokumentácia Expo](https://docs.expo.dev/versions/latest/sdk/apple-authentication/) stále píše, že appka s prihlásením tretej strany musí ponúknuť Apple.

V praxi sa správa o zamietnutí 4.8 zverejnená na [vývojárskych fórach Apple](https://developer.apple.com/forums/thread/765145) končí takto: „Note that Sign in with Apple meets the requirements specified in guideline 4.8“. Apple nemenuje žiadnu inú vyhovujúcu službu. **Aby som s reviewerom nehral hádanky, pridávam prihlásenie cez Apple.**

## Päť výnimiek, ktoré text uvádza

Apple vymenúva päť prípadov, keď sa žiadne ďalšie prihlásenie nevyžaduje:

1. **Tvoja appka používa len vlastný systém účtov**, napríklad e-mail s heslom alebo kód poslaný e-mailom.
2. Tvoja appka je alternatívny obchod s appkami alebo je cez taký obchod distribuovaná, s prihlásením vlastným tomuto obchodu.
3. Tvoja appka je vzdelávacia, firemná alebo pracovná a vyžaduje existujúci školský alebo firemný účet.
4. Tvoja appka používa systém elektronickej identity podporovaný štátom alebo odvetvím.
5. Tvoja appka je klientom konkrétnej služby tretej strany: človek sa prihlasuje do svojej pošty alebo sociálnej siete, aby sa dostal k vlastnému obsahu.

Ešte pred týmito výnimkami si polož otázku: potrebuje tvoja appka vôbec účet? Ak nie, guideline 5.1.1(v) žiada, aby sa dala používať bez prihlásenia, ako vysvetľujem v [návode ku guideline 5.1.1](https://devoria.fr/sk/blog/guideline-5-1-1-zamietnutie-app-store).

| Tvoja prihlasovacia obrazovka | Platí 4.8?         |
| ----------------------------- | ------------------ |
| Žiadny účet                   | Nie                |
| Len e-mail alebo kód          | Nie                |
| Len Google                    | Áno                |
| Google a e-mail               | Áno, pravdepodobne |
| Google a Apple                | Áno, a vyhovuje    |
| Existujúci školský účet       | Nie                |
| Google na import              | Nie, žiadny účet   |

## Pridanie „Sign in with Apple“ do Expo appky

### 1. Nainštaluj modul a deklaruj capability

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

Dokumentácia Expo potom žiada zapnúť capability v konfigurácii appky:

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

Druhý riadok zobrazí tlačidlo v jazyku iPhonu. S EAS Build sa capability zapne na identifikátore tvojej appky pri builde. **Je to natívne nastavenie: ide s novým buildom, nikdy nie so vzdialenou aktualizáciou.**

Pasca, ktorú som našiel pri prechádzaní štartovacieho kódu mojich kitov: táto capability vyžaduje podpisovanie, aj keď appku len spúšťaš v simulátore. Na Macu bez certifikátu „Apple Development“ lokálna kompilácia zlyhávala s „No code signing certificates are available to use“. Oprava: zapnúť prihlásenie cez Apple až vtedy, keď je nakonfigurovaný autentifikačný server.

### 2. Zobraz oficiálne tlačidlo, rovnako viditeľné ako Google

[Dizajnové pravidlá Apple](https://developer.apple.com/design/human-interface-guidelines/sign-in-with-apple) sú jasné: tlačidlo Apple nesmie byť menšie ako ostatné prihlasovacie tlačidlá a nesmie byť potrebné posúvať obrazovku, aby bolo vidieť. Komponent z Expo vykreslí oficiálne tlačidlo s nadpisom, ktorý Apple povoľuje.

```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 a web: žiadne prihlásenie cez Apple, žiadne tlačidlo.
  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 upozorňuje, že bez šírky a výšky sa tlačidlo nezobrazí. Farba a zaoblenie sa nastavujú cez `buttonStyle` a `cornerRadius`, nie cez style.

### 3. Otvor reláciu 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("Chýba Apple token");
    const { error } = await supabase.auth.signInWithIdToken({
      provider: "apple",
      token: credential.identityToken,
    });
    if (error) throw error;
    // Krstné meno príde len pri prvej autorizácii: hneď si ho uložíme.
    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;
  }
}
```

Dôležité sú štyri detaily, prevzaté z [dokumentácie Supabase](https://supabase.com/docs/guides/auth/social-login/auth-apple), z dokumentácie Expo a z dizajnových pravidiel Apple:

- **V Supabase zadaj svoj bundle identifier** do Client IDs poskytovateľa Apple. Čisto natívna appka nepotrebuje na prihlásenie tajný kľúč. Ak testuješ v Expo Go, pridaj `host.exp.Exponent`.
- **Krstné meno a e-mail prídu len raz.** Pri ďalších prihláseniach ich Apple už neposiela: ulož si ich hneď pri prvej odpovedi.
- **E-mail môže byť relay adresa.** Apple odporúča potom nežiadať osobnú adresu.
- **Zrušenie nie je chyba.** V Nolere zatvorenie Apple okna nevyvolá žiadnu červenú hlášku: je to zámerné gesto.

Skutočný prípad zo Solysu, august 2026: tlačidlá Apple aj Google boli v appke, ale ani jeden poskytovateľ nebol v Supabase zapnutý. Kód bol v poriadku, oprava prebehla na strane servera, bez nového buildu. **Tlačidlo Apple, ktoré pred reviewerom zlyhá, znamená zamietnutie 2.1 namiesto zamietnutia 4.8.** Podrobnosti sú v [návode ku guideline 2.1](https://devoria.fr/sk/blog/guideline-2-1-zamietnutie-app-store).

### 4. Testuj na skutočnom iPhone

Expo upozorňuje, že simulátor umožňuje len obmedzený test a že identifikátory získané v Expo Go sa líšia od tých v publikovanej appke. Otestuj prihlásenie, odhlásenie a opätovné prihlásenie na skutočnom iPhone, s buildom z [TestFlight](https://devoria.fr/sk/blog/testflight-otestovat-iphone-aplikaciu).

## Prihlásenie cez Apple a zmazanie účtu

Guideline 5.1.1(v) žiada, aby sa účet vytvorený v appke dal zmazať priamo v appke. Pri prihlásení cez Apple pridáva [stránka Apple o mazaní účtu](https://developer.apple.com/support/offering-account-deletion-in-your-app) ďalší krok: použiť REST API Sign in with Apple na [zrušenie tokenov](https://developer.apple.com/documentation/signinwithapplerestapi/revoke-tokens) danej osoby.

Toto zrušenie vyžaduje dve veci: token danej osoby, ktorý získaš overením autorizačného kódu, a secret podpísaný tvojím privátnym kľúčom Sign in with Apple. **Aj keď sa natívne prihlásenie zaobíde bez tajného kľúča, zrušenie ho vyžaduje a ten zostáva na tvojom serveri.** Prečo, to nájdeš v článku [tajný API kľúč v Expo appke](https://devoria.fr/sk/blog/tajny-api-kluc-expo-aplikacia).

V Nolere si appka pri mazaní účtu znova vyžiada prihlásenie cez Apple, aby získala čerstvý autorizačný kód. Pošle ho serverovej funkcii, ktorá ho u Apple vymení a potom token zruší. Ak človek akciu zruší, jasná správa to povie a nič sa nezmaže. Zvyšok procesu, vrátane údajov, predplatného a testov, je v článku [zmazanie účtu v iOS](https://devoria.fr/sk/blog/odstranenie-uctu-ios-appka-test-pred-apple).

## Čo odpovedať Apple po zamietnutí 4.8

Správa od Apple ponúka dve cesty. Buď pridáš rovnocennú možnosť. Alebo ju tvoja appka už má: odpovieš v App Store Connect, napíšeš ktorú a prečo spĺňa tri podmienky. Apple tiež odporúča aktualizovať screenshoty, ktoré ukazujú prihlasovaciu obrazovku. Postup, ako [odpovedať App Review](https://developer.apple.com/help/app-store-connect/manage-submissions-to-app-review/reply-to-app-review-messages/), je rovnaký ako pri ostatných pravidlách.

Tu je vzor v angličtine na úpravu (nahraď číslo buildu):

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

## Check-list 4.8 pred odoslaním

- Vieš, či tvoja appka potrebuje účet. Ak nie, dá sa používať bez prihlásenia.
- Ak účet vytvára Google, Facebook alebo X, prihlásenie cez Apple je na tej istej obrazovke.
- Tlačidlo Apple je oficiálne, rovnako veľké ako ostatné, viditeľné bez posúvania.
- Poskytovateľ Apple je zapnutý na strane servera, s tvojím bundle identifierom.
- Zrušenie vráti človeka na prihlasovaciu obrazovku, bez chybovej hlášky.
- Krstné meno a e-mail sa uložia hneď pri prvom prihlásení.
- Zmazanie účtu zruší Apple token, z tvojho servera.
- Všetko je otestované na skutočnom iPhone, s Apple účtom, ktorý sa do appky ešte nikdy neprihlásil.
- Tvoje screenshoty ukazujú prihlasovaciu obrazovku presne tak, ako je v odoslanom builde.

## Oprav zamietnutie pred opätovným odoslaním

Ak ti práve zamietli appku kvôli 4.8, [Apple Review Kit](https://devoria.fr/sk/kits/app-review) obsahuje všetko, čo kontrolujem pred každým odoslaním, s dvoma skillmi, ktoré prejdú tvoj projekt v Claude Code a pripravia odpoveď, ak Apple zamietne. Ak chceš ľudský pohľad, [rezervuj si so mnou hodinu](https://devoria.fr/sk/coaching): prečítame si správu spolu a pozrieme sa na tvoju prihlasovaciu obrazovku. Celý postup po zamietnutí je na stránke [appka zamietnutá Apple](https://devoria.fr/sk/expertise/aplikacia-zamietnuta-apple).

Ak pripravuješ svoje prvé vydanie, [sprav si bezplatnú diagnostiku](https://devoria.fr/sk/diagnostic): povie ti, do ktorého kroku sa pustiť najprv, a pošle ti môj check-list proti zamietnutiu od Apple.

Nikto ti nemôže zaručiť, že Apple tvoju appku prijme. Pridanie prihlásenia cez Apple na správne miesto ťa aspoň zbaví tohto dôvodu.

## Často kladené otázky

### Je prihlásenie cez Apple v iOS povinné?

Nie, nie vždy. Vyžaduje sa len vtedy, ak tvoja appka ponúka prihlásenie tretej strany, napríklad Google alebo Facebook, na vytvorenie hlavného účtu. Od januára 2024 ho môže nahradiť iná rovnocenná služba, ale Apple ako vyhovujúce uvádza len prihlásenie cez Apple.

### Čo znamená „Guideline 4.8 - Design - Login Services“?

Je to názov zamietnutia v správe od Apple. Znamená, že tvoja appka ponúka prihlásenie tretej strany bez rovnocennej možnosti, ktorá obmedzuje údaje na meno a e-mail, umožňuje skryť e-mail a bez súhlasu neslúži na reklamu.

### Stačí registrácia e-mailom popri Google?

Nie je to isté. Text žiada službu, ktorá umožní ponechať si e-mail v súkromí, kým klasický formulár ho vyžaduje. Apple k tomuto prípadu nezverejnil stanovisko a jeho správa o zamietnutí uvádza len prihlásenie cez Apple. Ja by som to neriskoval.

### Treba ponúkať prihlásenie cez Apple aj na Androide?

Nie. 4.8 je pravidlo App Store a modul z Expo funguje len v iOS. Na Androide vráti `isAvailableAsync()` false: tlačidlo Apple sa nezobrazí a Google môže zostať sám.

### Treba po zamietnutí 4.8 nový build?

Áno, vo väčšine prípadov. Prihlásenie cez Apple vyžaduje natívnu capability, ktorá sa zapína pri builde. Vzdialená aktualizácia ju pridať nevie. Jediná výnimka: tvoja appka už mala vyhovujúcu možnosť a stačí to Apple vysvetliť v odpovedi.


## Tvoj projekt

[Apple Review Kit](https://devoria.fr/sk/kits/app-review): Checklist na App Store review, ktorý používam, moje opravené zamietnutia od Apple, poznámky pre testera a dva skills pre Claude Code na kontrolu appky. 29 €.

[iOS Kit](https://devoria.fr/sk/kits/ios): Vytvor iPhone appku s Claude Code: štartovací kód mojich appiek, skills, ktoré kontrolujú jeho prácu, a kity Apple Review, Screenshots a ASO. 129,99 €.
