Guideline 4.8 Login Services: kell az Apple-bejelentkezés?
Írta: Mehdi Azizi
Megjelent: , 9 p
Guideline 4.8: ha az appod Google- vagy Facebook-bejelentkezést kínál, adj hozzá egy e-mailt védő opciót, például az Apple-t. Kivételek, Expo-kód, fióktörlés.
A 4.8-as guideline akkor vonatkozik rád, ha az appod Google-, Facebook- vagy más külső bejelentkezéssel hozza létre a fő fiókot. Ilyenkor kötelező egy másik, egyenértékű bejelentkezési opció is, amely a nevet és az e-mailt kéri csak, lehetővé teszi az e-mail elrejtését, és a felhasználó beleegyezése nélkül nem követi őt hirdetési célból. 2024 januárja óta ennek nem kell feltétlenül a „Sign in with Apple”-nek lennie, de az Apple maga ezt említi az elutasító üzeneteiben.
Az én appjaim közül a Solys és a Nolera Apple-, Google- és e-mailes bejelentkezést kínál. Ez az útmutató az Apple jelenlegi szövegéből indul ki, aztán megmutatja, hogyan adom hozzá az Apple-bejelentkezést egy Supabase-hez kötött Expo-apphoz, és mit változtat ez a fióktörlésen. Ha az elutasítási okok áttekintésére van szükséged, inkább azt olvasd el, miért utasítja el az Apple az appodat.
Mit mond a 4.8 Login Services guideline?
A 4.8 az App Review Guidelines 4. szakaszában („Design”) található. Azokra az appokra vonatkozik, amelyek „a third-party or social login service” segítségével hozzák létre vagy hitelesítik a fő fiókot: Facebook Login, Google Sign-In, Log in with X, LinkedIn, Amazon vagy WeChat. Ezeknek az appoknak „as an equivalent option” egy másik bejelentkezési szolgáltatást is kínálniuk kell, amely három feltételnek felel meg.
| Az Apple feltétele | Egyszerűen |
|---|---|
| Korlátozott adatok | Név és e-mail, semmi több |
| Privát e-mail lehetősége | A felhasználó elrejtheti |
| Nincs hirdetés beleegyezés nélkül | Nincs hirdetési követés beleegyezés nélkül |
A szöveg a fő fiókot is meghatározza: ez az, amelyet a felhasználó az appodban hoz létre, hogy azonosítsa magát, bejelentkezzen és elérje a funkcióidat. E meghatározás szerint egy Google-gomb, amely csak egy fájl importálására szolgál, nem hoz létre fő fiókot. A 4.8 azt a képernyőt célozza, ahol belépnek az appodba.
Mi változott 2024 januárjában
2024 előtt a szabály kötelezővé tette a „Sign in with Apple”-t azoknak az appoknak, amelyek külső bejelentkezést használtak a fő fiókhoz. 2024. január 25-én az Apple lazított ezen: kínálhatsz Apple-bejelentkezést, vagy egy egyenértékű, adatvédelmet biztosító szolgáltatást. Sok oldal még mindig az ellenkezőjét állítja. Az Expo dokumentációja is még mindig azt írja, hogy egy külső bejelentkezést használó appnak Apple-t kell kínálnia.
A gyakorlatban az Apple fejlesztői fórumain közzétett 4.8-as elutasító üzenet így zárul: „Note that Sign in with Apple meets the requirements specified in guideline 4.8”. Más megfelelő szolgáltatást az Apple nem nevez meg. Hogy ne kelljen találgatnom a reviewer elvárásait, én az Apple-bejelentkezést adom hozzá.
A szöveg öt kivétele
Az Apple öt esetet sorol fel, amikor nem kell másik bejelentkezés:
- Az appod csak a saját fiókrendszeredet használja, például e-mailt jelszóval vagy e-mailben küldött kódot.
- Az appod egy alternatív alkalmazásbolt, vagy egy ilyen terjeszti, a bolt saját bejelentkezésével.
- Az appod oktatási, vállalati vagy üzleti célú, és meglévő iskolai vagy céges fiókot igényel.
- Az appod állami vagy ágazati támogatású elektronikus azonosítási rendszert használ.
- Az appod egy konkrét külső szolgáltatás kliense: a felhasználó a saját levelezőjébe vagy közösségi hálójába lép be, hogy a saját tartalmát elérje.
Már a kivételek előtt tedd fel magadnak a kérdést: kell egyáltalán fiók az appodhoz? Ha nem, az 5.1.1(v) guideline előírja, hogy bejelentkezés nélkül is használható legyen, ahogy az 5.1.1-es guideline-ról szóló útmutatóban elmagyarázom.
| A bejelentkezési képernyőd | Vonatkozik rá a 4.8? |
|---|---|
| Nincs fiók | Nem |
| Csak e-mail vagy kód | Nem |
| Csak Google | Igen |
| Google és e-mail | Elvileg igen |
| Google és Apple | Igen, és megfelel |
| Meglévő iskolai fiók | Nem |
| Google importáláshoz | Nem, nincs fiók |
A „Sign in with Apple” hozzáadása egy Expo-apphoz
1. A modul telepítése és a képesség deklarálása
npx expo install expo-apple-authentication
Az Expo dokumentációja szerint ezután be kell kapcsolni a képességet az app konfigurációjában:
{
"expo": {
"ios": {
"usesAppleSignIn": true,
"infoPlist": { "CFBundleAllowMixedLocalizations": true }
}
}
}
A második sor az iPhone nyelvén jeleníti meg a gombot. EAS Builddel a képesség a build idején kapcsolódik be az appazonosítódon. Ez natív beállítás: új builddel kerül ki, távoli frissítéssel soha.
Egy csapda, amelyet a kitjeim kezdőkódjának átnézésekor találtam: ez a képesség aláírást igényel, még akkor is, ha csak a szimulátoron futtatod az appot. Egy „Apple Development” tanúsítvány nélküli Macen a helyi fordítás ezzel hibázott: „No code signing certificates are available to use”. A javítás: az Apple-bejelentkezést csak akkor kapcsold be, ha a hitelesítési szerver be van állítva.
2. A hivatalos gomb megjelenítése, ugyanolyan jól láthatóan, mint a Google
Az Apple design-szabályai egyértelműek: az Apple-gomb nem lehet kisebb a többi bejelentkezési gombnál, és nem kell görgetni ahhoz, hogy látszódjon. Az Expo komponense a hivatalos gombot rajzolja ki, az Apple által engedélyezett felirattal.
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 és web: nincs Apple-bejelentkezés, nincs gomb.
if (!disponible) return null;
return (
<AppleAuthentication.AppleAuthenticationButton
buttonType={AppleAuthentication.AppleAuthenticationButtonType.CONTINUE}
buttonStyle={AppleAuthentication.AppleAuthenticationButtonStyle.BLACK}
cornerRadius={12}
style={{ width: "100%", height: 50 }}
onPress={onPress}
/>
);
}
Az Expo kiemeli, hogy szélesség és magasság nélkül a gomb nem jelenik meg. A színt és a lekerekítést a buttonStyle és a cornerRadius adja meg, nem a style.
3. A munkamenet megnyitása a Supabase-ben
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("Hiányzik az Apple-token");
const { error } = await supabase.auth.signInWithIdToken({
provider: "apple",
token: credential.identityToken,
});
if (error) throw error;
// A keresztnév csak az első engedélyezéskor érkezik meg: azonnal elmentjük.
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;
}
}
Négy részlet számít, a Supabase dokumentációja, az Expo dokumentációja és az Apple design-szabályai alapján:
- A Supabase-ben add meg a bundle-azonosítódat az Apple-szolgáltató Client IDs mezőjében. Egy kizárólag natív appnak nincs szüksége titkos kulcsra a bejelentkezéshez. Add hozzá a
host.exp.Exponentértéket is, ha Expo Góban tesztelsz. - A keresztnév és az e-mail csak egyszer érkezik meg. A későbbi bejelentkezéseknél az Apple már nem küldi el őket: mentsd el már az első válaszból.
- Az e-mail lehet továbbító (relay) cím. Az Apple azt javasolja, hogy utána ne kérj be személyes címet.
- A megszakítás nem hiba. A Nolerában az Apple-lap bezárása nem dob fel piros üzenetet: ez szándékos mozdulat.
Egy valós eset a Solysből, 2026 augusztusából: az Apple- és a Google-gomb is ott volt az appban, de egyik szolgáltató sem volt bekapcsolva a Supabase-ben. A kód jó volt, a javítás szerveroldalon történt, új build nélkül. Ha az Apple-gomb a reviewer előtt hibára fut, 4.8-as helyett 2.1-es elutasítást kapsz. A részletek a 2.1-es guideline-ról szóló útmutatóban vannak.
4. Tesztelés valódi iPhone-on
Az Expo figyelmeztet, hogy a szimulátorban csak korlátozottan lehet tesztelni, és az Expo Góban kapott azonosítók eltérnek a közzétett app azonosítóitól. Teszteld a bejelentkezést, a kijelentkezést, majd az újbóli bejelentkezést valódi iPhone-on, egy TestFlight builddel.
Apple-bejelentkezés és fióktörlés
Az 5.1.1(v) guideline előírja, hogy az appban létrehozott fiókot az appból is törölni lehessen. Apple-bejelentkezésnél az Apple fióktörlésről szóló oldala egy lépéssel többet kér: a Sign in with Apple REST API-jával vissza kell vonni a felhasználó tokenjeit.
A visszavonáshoz két dolog kell: a felhasználó egy tokenje, amelyet egy engedélyezési kód érvényesítésével kapsz meg, és egy titok, amelyet a Sign in with Apple privát kulcsoddal írsz alá. Bár a natív bejelentkezés megvan titkos kulcs nélkül, a visszavonáshoz kell egy, és annak a szervereden a helye. Hogy miért, azt a titkos API-kulcs egy Expo-appban cikkben írom le.
A Nolerában a fiók törlésekor az app újra Apple-bejelentkezést kér, hogy friss engedélyezési kódot kapjon. Ezt elküldi egy szerverfüggvénynek, amely beváltja az Apple-nél, majd visszavonja a tokent. Ha a felhasználó megszakítja, egy világos üzenet jelzi ezt, és semmi nem törlődik. A folyamat többi része, az adatokkal, az előfizetéssel és a tesztekkel együtt, az iOS-fióktörlésről szóló cikkben van.
Mit válaszolj az Apple-nek egy 4.8-as elutasítás után
Az Apple üzenete két kiutat kínál. Vagy hozzáadsz egy egyenértékű opciót. Vagy az appodban már van ilyen: válaszolsz az App Store Connectben, megírod, melyik az, és miért felel meg a három feltételnek. Az Apple azt is javasolja, hogy frissítsd a bejelentkezési képernyőt mutató képernyőképeket. Az App Review-nak való válaszadás menete ugyanaz, mint a többi szabálynál.
Íme egy angol nyelvű sablon, amelyet a saját esetedhez igazíthatsz (cseréld ki a build számát):
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,
A 4.8-as check-lista beküldés előtt
- Tudod, hogy kell-e fiók az appodhoz. Ha nem, bejelentkezés nélkül is használható.
- Ha Google, Facebook vagy X hozza létre a fiókot, az Apple-bejelentkezés ugyanazon a képernyőn van.
- Az Apple-gomb a hivatalos gomb, ugyanakkora, mint a többi, és görgetés nélkül látható.
- Az Apple-szolgáltató szerveroldalon be van kapcsolva, a bundle-azonosítóddal.
- A megszakítás visszavisz a bejelentkezési képernyőre, hibaüzenet nélkül.
- A keresztnév és az e-mail már az első bejelentkezéskor elmentődik.
- A fióktörlés visszavonja az Apple-tokent, a szerveredről.
- Mindent valódi iPhone-on teszteltél, egy olyan Apple-fiókkal, amely még sosem jelentkezett be az appba.
- A képernyőképeid a bejelentkezési képernyőt úgy mutatják, ahogy a beküldött buildben van.
Javítsd az elutasítást, mielőtt újra beküldöd az appot
Ha az appodat most utasították el 4.8 alapján, az Apple Review Kit összegyűjti, amit minden beküldés előtt ellenőrzök, két skill-lel, amelyek átnézik a projektedet a Claude Code-ban, és elkészítik a válaszodat, ha az Apple elutasít. Ha emberi szemre van szükséged, foglalj velem egy órát: együtt elolvassuk az üzenetet, és megnézzük a bejelentkezési képernyődet. Az elutasítás utáni teljes folyamat az Apple által elutasított alkalmazás oldalon van.
Ha az első megjelenésedre készülsz, töltsd ki az ingyenes diagnosztikát: megmondja, melyik lépéssel kezdj, és elküldi neked az Apple-elutasítás elleni check-listámat.
Senki nem garantálhatja, hogy az Apple elfogadja az appodat. Ha a megfelelő helyre teszed az Apple-bejelentkezést, legalább ezt az okot kihúzhatod a listáról.
Gyakori kérdések
Kötelező az Apple-bejelentkezés iOS-en?
Nem minden esetben. Csak akkor kötelező, ha az appod külső bejelentkezést, például Google-t vagy Facebookot kínál a fő fiók létrehozásához. 2024 januárja óta egy másik, egyenértékű szolgáltatás is helyettesítheti, de az Apple csak az Apple-bejelentkezést nevezi meg megfelelőként.
Mit jelent a „Guideline 4.8 - Design - Login Services”?
Ez az elutasítás címe az Apple üzenetében. Azt jelenti, hogy az appod külső bejelentkezést kínál anélkül, hogy olyan egyenértékű opciót adna, amely a nevet és az e-mailt kéri csak, lehetővé teszi az e-mail elrejtését, és beleegyezés nélkül nem szolgál hirdetési célokat.
Elég az e-mailes regisztrációm a Google mellett?
Ez nem biztos. A szöveg olyan szolgáltatást kér, amellyel privátként megtarthatod az e-mailedet, egy hagyományos űrlap viszont bekéri. Az Apple nem foglalt állást ebben az esetben, és az elutasító üzenete csak az Apple-bejelentkezést említi. Én nem vállalnám ezt a kockázatot.
Kell Apple-bejelentkezést kínálni Androidon?
Nem. A 4.8 az App Store szabálya, és az Expo modulja csak iOS-en működik. Androidon az isAvailableAsync() hamisat ad vissza: az Apple-gomb nem jelenik meg, a Google maradhat egyedül.
Kell új build egy 4.8-as elutasítás után?
Igen, a legtöbb esetben. Az Apple-bejelentkezés natív képességet igényel, amely a build idején kapcsolódik be. Távoli frissítéssel nem lehet hozzáadni. Egyetlen kivétel: ha az appodban már volt megfelelő opció, és elég ezt elmagyarázni az Apple-nek a válaszodban.