Guideline 4.8 Login Services: je Sign in with Apple obvezen?
Avtor: Mehdi Azizi
Objavljeno , 9 min
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.
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.
Kaj pravi guideline 4.8 Login Services?
Točka 4.8 je v razdelku 4, „Design“, v App Review Guidelines. 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 je Apple to omilil: ponudiš lahko prijavo z Applom ali enakovredno storitev, ki varuje zasebnost. Veliko strani še vedno trdi nasprotno. Dokumentacija Expo š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, 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:
- Tvoja aplikacija uporablja samo lasten sistem računov, na primer e-pošto z geslom ali kodo, poslano po e-pošti.
- Tvoja aplikacija je alternativna trgovina z aplikacijami ali jo ta distribuira, s prijavo, ki je lastna tej trgovini.
- Tvoja aplikacija je izobraževalna, podjetniška ali poslovna in zahteva obstoječ šolski ali službeni račun.
- Tvoja aplikacija uporablja sistem elektronske identitete, ki ga podpira država ali panoga.
- 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.
| 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
npx expo install expo-apple-authentication
Dokumentacija Expo nato zahteva, da zmožnost vklopiš v konfiguraciji aplikacije:
{
"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 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.
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
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, 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.
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.
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 doda korak: z API-jem REST za Sign in with Apple moraš preklicati žetone 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.
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.
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 je enak kot pri drugih pravilih.
Tu je predloga v angleščini, ki jo prilagodi (zamenjaj številko builda):
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 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: skupaj prebereva sporočilo in pogledava tvoj zaslon za prijavo. Celoten postopek po zavrnitvi je na strani aplikacija, ki jo je Apple zavrnil.
Če pripravljaš svojo prvo objavo, opravi brezplačno diagnozo: 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.