Guideline 4.8 Login Services: cal Sign in with Apple?
Per Mehdi Azizi
Publicat el , 9 min
Guideline 4.8: si l'app ofereix Google o Facebook, afegeix un inici de sessió que protegeixi el correu, com Apple. Excepcions, codi Expo i esborrat de compte.
La guideline 4.8 s'aplica quan la teva app fa servir Google, Facebook o un altre inici de sessió de tercers per crear el compte principal. En aquest cas, n'exigeix una altra opció d'inici de sessió, equivalent, que limiti les dades al nom i al correu, permeti amagar el correu i no segueixi l'usuari per a publicitat sense el seu consentiment. Des del gener del 2024, aquesta opció ja no ha de ser necessàriament "Sign in with Apple", però és la que el mateix Apple cita als seus missatges de rebuig.
A les meves apps, Solys i Nolera ofereixen Apple, Google i correu. Aquesta guia parteix del text actual d'Apple, després mostra com afegeixo l'inici de sessió amb Apple en una app Expo connectada a Supabase, i què canvia per a l'esborrat del compte. Per a una visió general dels motius de rebuig, millor llegeix per què Apple rebutja una app.
Què diu la guideline 4.8 Login Services?
La 4.8 és a la secció 4, "Design", de les App Review Guidelines. Afecta les apps que fan servir "a third-party or social login service" per crear o autenticar el compte principal: Facebook Login, Google Sign-In, Log in with X, LinkedIn, Amazon o WeChat. Aquestes apps també han d'oferir, "as an equivalent option", un altre servei d'inici de sessió que compleixi tres condicions.
| Condició d'Apple | En clar |
|---|---|
| Dades limitades | Nom i correu, res més |
| Correu privat possible | L'usuari el pot amagar |
| Sense publicitat sense permís | Cap seguiment publicitari sense permís |
El text també defineix el compte principal: el que la persona crea a la teva app per identificar-se, iniciar sessió i accedir a les teves funcions. Segons aquesta definició, un botó de Google que només serveix per importar un fitxer no crea cap compte principal. La 4.8 apunta a la pantalla per on s'entra a la teva app.
Què va canviar el gener del 2024
Abans del 2024, la norma imposava "Sign in with Apple" a les apps que feien servir un inici de sessió de tercers per al compte principal. El 25 de gener del 2024, Apple va relaxar aquest punt: pots oferir l'inici de sessió amb Apple, o un servei equivalent que protegeixi la privadesa. Moltes pàgines encara diuen el contrari. La documentació d'Expo encara diu que una app amb un inici de sessió de tercers ha d'oferir Apple.
A la pràctica, el missatge de rebuig 4.8 publicat als fòrums de desenvolupadors d'Apple acaba així: "Note that Sign in with Apple meets the requirements specified in guideline 4.8". Apple no anomena cap altre servei conforme. Per no jugar a endevinar amb el revisor, jo afegeixo l'inici de sessió amb Apple.
Les cinc excepcions que preveu el text
Apple llista cinc casos en què no s'exigeix cap altre inici de sessió:
- La teva app només fa servir el teu propi sistema de comptes, per exemple un correu amb contrasenya o un codi enviat per correu.
- La teva app és una botiga d'apps alternativa, o es distribueix a través d'una, amb un inici de sessió propi d'aquesta botiga.
- La teva app és educativa, d'empresa o professional, i exigeix un compte d'escola o d'empresa ja existent.
- La teva app fa servir un sistema d'identitat electrònica avalat per un Estat o un sector.
- La teva app és el client d'un servei de tercers concret: la persona inicia sessió al seu correu o a la seva xarxa social per accedir al seu propi contingut.
Abans fins i tot d'aquestes excepcions, fes-te una pregunta: la teva app necessita un compte? Si no, la guideline 5.1.1(v) demana que es pugui fer servir sense iniciar sessió, com explico a la guia de la guideline 5.1.1.
| La teva pantalla d'inici de sessió | S'aplica la 4.8? |
|---|---|
| Cap compte | No |
| Només correu o codi | No |
| Només Google | Sí |
| Google i correu | Sí, en principi |
| Google i Apple | Sí, i conforme |
| Compte d'escola existent | No |
| Google per a una importació | No, no hi ha compte |
Afegir "Sign in with Apple" en una app Expo
1. Instal·lar el mòdul i declarar la capacitat
npx expo install expo-apple-authentication
La documentació d'Expo demana després activar la capacitat a la configuració de l'app:
{
"expo": {
"ios": {
"usesAppleSignIn": true,
"infoPlist": { "CFBundleAllowMixedLocalizations": true }
}
}
}
La segona línia mostra el botó en l'idioma de l'iPhone. Amb EAS Build, la capacitat s'activa al teu identificador d'app en el moment del build. És un ajust natiu: va amb un build nou, mai amb una actualització remota.
Un parany que vaig trobar en rellegir el codi base dels meus kits: aquesta capacitat exigeix una signatura, fins i tot per executar l'app al simulador. En un Mac sense certificat "Apple Development", la compilació local fallava amb "No code signing certificates are available to use". La solució: només activar l'inici de sessió amb Apple quan el servidor d'autenticació està configurat.
2. Mostrar el botó oficial, tan visible com el de Google
Les normes de disseny d'Apple són clares: el botó d'Apple no pot ser més petit que els altres botons d'inici de sessió, i no s'ha d'haver de desplaçar la pantalla per veure'l. El component d'Expo dibuixa el botó oficial, amb un títol autoritzat per Apple.
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 i web: sense inici de sessió amb Apple, sense botó.
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 especifica que el botó no apareix sense amplada ni alçada. El color i l'arrodoniment es defineixen amb buttonStyle i cornerRadius, no amb l'estil.
3. Obrir la sessió a 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("Falta el token d'Apple");
const { error } = await supabase.auth.signInWithIdToken({
provider: "apple",
token: credential.identityToken,
});
if (error) throw error;
// El nom només arriba a la primera autorització: el desem de seguida.
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;
}
}
Hi ha quatre detalls importants, tret de la documentació de Supabase, de la d'Expo i de les normes de disseny d'Apple:
- A Supabase, declara el teu identificador de bundle als Client IDs del proveïdor Apple. Una app només nativa no necessita clau secreta per iniciar sessió. Afegeix
host.exp.Exponentsi fas proves a Expo Go. - El nom i el correu només arriben un cop. Apple ja no els torna a enviar en els inicis de sessió següents: desa'ls a la primera resposta.
- El correu pot ser una adreça de reenviament. Apple recomana no tornar a demanar una adreça personal després.
- Una cancel·lació no és un error. A Nolera, tancar el full d'Apple no mostra cap missatge en vermell: és un gest voluntari.
Un cas real a Solys, l'agost del 2026: els botons d'Apple i Google eren a l'app, però cap dels dos proveïdors estava activat a Supabase. El codi era correcte, la correcció es va fer al servidor, sense build nou. Un botó d'Apple que falla davant del revisor és un rebuig 2.1 en lloc d'un rebuig 4.8. El detall és a la guia de la guideline 2.1.
4. Provar en un iPhone real
Expo avisa que el simulador només permet una prova limitada, i que els identificadors rebuts a Expo Go són diferents dels de l'app publicada. Prova l'inici de sessió, el tancament de sessió i un nou inici en un iPhone real, amb un build de TestFlight.
Inici de sessió amb Apple i esborrat del compte
La guideline 5.1.1(v) demana que un compte creat a l'app es pugui esborrar des de l'app. Amb l'inici de sessió amb Apple, la pàgina d'Apple sobre l'esborrat de comptes hi afegeix un pas: fer servir l'API REST de Sign in with Apple per revocar els tokens de la persona.
Aquesta revocació necessita dues coses: un token de la persona, que s'obté validant un codi d'autorització, i un secret signat amb la teva clau privada de Sign in with Apple. Encara que l'inici de sessió natiu no necessiti clau secreta, la revocació sí que en demana una, i aquesta es queda al teu servidor. El perquè és a clau API secreta en una app Expo.
A Nolera, en el moment d'esborrar el compte, l'app torna a demanar un inici de sessió amb Apple per obtenir un codi d'autorització nou. L'envia a una funció del servidor, que el bescanvia amb Apple i després revoca el token. Si la persona cancel·la, un missatge clar ho diu i no s'esborra res. La resta del procés, dades, subscripció i proves incloses, és a esborrat de compte a iOS.
Què respondre a Apple després d'un rebuig 4.8
El missatge d'Apple proposa dues sortides. O afegeixes una opció equivalent. O la teva app ja en té una: respons a App Store Connect, dius quina és i per què compleix les tres condicions. Apple també suggereix actualitzar les captures que mostren la pantalla d'inici de sessió. El procediment per respondre a App Review és el mateix que per a les altres normes.
Aquí tens un model en anglès, per adaptar (substitueix el número de build):
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,
La checklist 4.8 abans d'enviar
- Saps si la teva app necessita un compte. Si no, es fa servir sense iniciar sessió.
- Si Google, Facebook o X creen el compte, l'inici de sessió amb Apple és a la mateixa pantalla.
- El botó d'Apple és l'oficial, tan gran com els altres, visible sense desplaçar.
- El proveïdor Apple està activat al servidor, amb el teu identificador de bundle.
- Una cancel·lació torna a la pantalla d'inici de sessió, sense missatge d'error.
- El nom i el correu es desen des del primer inici de sessió.
- L'esborrat del compte revoca el token d'Apple, des del teu servidor.
- Tot s'ha provat en un iPhone real, amb un compte d'Apple que no ha iniciat mai sessió a l'app.
- Les teves captures mostren la pantalla d'inici de sessió tal com és al build enviat.
Corregir el rebuig abans de tornar a enviar l'app
Si la teva app acaba de ser rebutjada per la 4.8, l'Apple Review Kit recull el que comprovo abans de cada enviament, amb dues skills que revisen el teu projecte a Claude Code i preparen la teva resposta si Apple et rebutja. Si vols una mirada humana, reserva una hora amb mi: llegim el missatge junts i mirem la teva pantalla d'inici de sessió. El procés complet després d'un rebuig és a la pàgina app rebutjada per Apple.
Si prepares el teu primer llançament, fes el teu diagnòstic gratuït: et diu quin pas atacar primer i t'envia la meva checklist antirebuig d'Apple.
Ningú no pot garantir que Apple acceptarà la teva app. Afegir l'inici de sessió amb Apple al lloc correcte, com a mínim, treu aquest motiu de la llista.
Preguntes freqüents
L'inici de sessió amb Apple és obligatori a iOS?
No, no sempre. Només s'exigeix si la teva app ofereix un inici de sessió de tercers, com Google o Facebook, per crear el compte principal. Des del gener del 2024, un altre servei equivalent el pot substituir, però Apple només cita l'inici de sessió amb Apple com a conforme.
Què vol dir "Guideline 4.8 - Design - Login Services"?
És el títol del rebuig al missatge d'Apple. Vol dir que la teva app ofereix un inici de sessió de tercers sense oferir una opció equivalent que limiti les dades al nom i al correu, permeti amagar el correu i no serveixi per a publicitat sense permís.
El registre per correu n'hi ha prou al costat de Google?
No està garantit. El text demana un servei que permeti mantenir el correu privat, mentre que un formulari clàssic te'l demana. Apple no ha publicat cap posició sobre aquest cas, i el seu missatge de rebuig només cita l'inici de sessió amb Apple. Jo no m'hi arriscaria.
Cal oferir l'inici de sessió amb Apple a Android?
No. La 4.8 és una norma de l'App Store, i el mòdul d'Expo només funciona a iOS. A Android, isAvailableAsync() retorna fals: el botó d'Apple no es mostra, i Google pot quedar sol.
Cal un build nou després d'un rebuig 4.8?
Sí, en la majoria de casos. L'inici de sessió amb Apple necessita una capacitat nativa, activada en el moment del build. Una actualització remota no la pot afegir. Única excepció: la teva app ja tenia una opció conforme, i n'hi ha prou d'explicar-ho a Apple a la teva resposta.