Middle+
Come implementare l'autenticazione tramite Apple in un'app iOS?
sobes.tech AI
Risposta dell'AI
Per implementare l'autenticazione con Apple (Accedi con Apple) in un'app iOS, sono necessari i seguenti passaggi:
-
Configurare l'app nel Apple Developer Portal:
- Attivare la capacità "Accedi con Apple" per il tuo App ID.
- Generare o aggiornare il Profilo di Provisioning con la capacità attivata.
-
Aggiungere la capacità "Accedi con Apple" nel progetto Xcode.
-
Utilizzare il framework
AuthenticationServices.
Esempio di codice per avviare la richiesta di autenticazione:
import AuthenticationServices
@available(iOS 13.0, *)
func performSignInWithApple() {
// Creare il provider
let appleIDProvider = ASAuthorizationAppleIDProvider()
// Creare le richieste
let request = appleIDProvider.createRequest()
request.requestedScopes = [.fullName, .email] // Richiedere nome e email utente
// Creare il controller per gestire le richieste
let authorizationController = ASAuthorizationController(authorizationRequests: [request])
// Impostare i delegati per gestire le risposte
authorizationController.delegate = self
authorizationController.presentationContextProvider = self
// Avviare il processo di autenticazione
authorizationController.performRequests()
}
// Implementazione dei delegati
// ASAuthorizationControllerDelegate
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerDelegate {
// Gestire autenticazione riuscita
func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
let userIdentifier = appleIDCredential.user // Identificatore unico Apple
let fullName = appleIDCredential.fullName // Nome utente
let email = appleIDCredential.email // Email utente (disponibile solo al primo accesso)
// Qui puoi inviare userIdentifier e altri dati al tuo server
print("User ID: \(userIdentifier)")
print("Full Name: \(fullName?.givenName ?? "") \(fullName?.familyName ?? "")")
print("Email: \(email ?? "")")
} else if let passwordCredential = authorization.credential as? ASPasswordCredential {
// L'utente ha usato password salvate in iCloud Keychain
let username = passwordCredential.user
let password = passwordCredential.password
// Qui puoi usare questi dati per l'accesso
print("Username: \(username)")
print("Password: \(password)")
}
}
// Gestire errore di autenticazione
func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
print("Autenticazione con Apple fallita: \(error.localizedDescription)")
// Gestisci gli errori qui
}
}
// ASAuthorizationControllerPresentationContextProviding
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerPresentationContextProviding {
// Fornisce la finestra su cui verrà mostrata l'interfaccia di autenticazione
func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
return view.window! // È importante restituire una finestra NON nil
}
}
// TODO: Assicurati che YourViewController implementi i protocolli necessari.
- Gestire i dati ottenuti dopo un'autenticazione riuscita:
- Usa
userIdentifierper identificare univocamente l'utente Apple. fullNameeemailsono disponibili solo al primo accesso di quell'utente e della tua app. Salvali.- Invia
userIdentifier,identityToken(contiene informazioni per la verifica sul server) eauthorizationCodeal tuo server per verifica e creazione/vinculazione dell'account utente. - Il server deve verificare
"identityToken"con Apple per assicurare l'autenticità della richiesta.
- Usa
Oltre all'autenticazione principale, è importante implementare:
- Gestione dello stato di autorizzazione dell'utente (ad esempio, tramite
ASAuthorizationAppleIDProvider().getCredentialState). - La possibilità di revocare l'autorizzazione da parte dell'utente.
- L'interazione con il backend per creare/autenticare l'utente dopo un'autenticazione riuscita con Apple.
Nota: Sign In with Apple è disponibile solo su dispositivi con iOS 13 / macOS Catalina e versioni successive. Per versioni più vecchie, è necessario un meccanismo di autenticazione di riserva.