Sobes.tech
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:

  1. 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.
  2. Aggiungere la capacità "Accedi con Apple" nel progetto Xcode.

  3. 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.
  1. Gestire i dati ottenuti dopo un'autenticazione riuscita:
    • Usa userIdentifier per identificare univocamente l'utente Apple.
    • fullName e email sono disponibili solo al primo accesso di quell'utente e della tua app. Salvali.
    • Invia userIdentifier, identityToken (contiene informazioni per la verifica sul server) e authorizationCode al tuo server per verifica e creazione/vinculazione dell'account utente.
    • Il server deve verificare "identityToken" con Apple per assicurare l'autenticità della richiesta.

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.