Sobes.tech
Middle+

Comment implémenter l'authentification via Apple dans une application iOS?

sobes.tech IA

Réponse de l'IA

Pour implémenter l'authentification avec Apple (Se connecter avec Apple) dans une application iOS, les étapes suivantes sont nécessaires:

  1. Configurer l'application dans le portail Apple Developer:

    • Activer la capacité "Se connecter avec Apple" pour votre App ID.
    • Générer ou mettre à jour le profil d'approvisionnement avec la capacité activée.
  2. Ajouter la capacité "Se connecter avec Apple" dans le projet Xcode.

  3. Utiliser le framework AuthenticationServices.

Exemple de code pour initier la demande d'authentification:

import AuthenticationServices

@available(iOS 13.0, *)
func performSignInWithApple() {
    // Créer le fournisseur
    let appleIDProvider = ASAuthorizationAppleIDProvider()

    // Créer les requêtes
    let request = appleIDProvider.createRequest()
    request.requestedScopes = [.fullName, .email] // Demander le nom et l'email de l'utilisateur

    // Créer le contrôleur pour gérer les requêtes
    let authorizationController = ASAuthorizationController(authorizationRequests: [request])

    // Définir les délégués pour gérer les réponses
    authorizationController.delegate = self
    authorizationController.presentationContextProvider = self

    // Démarrer le processus d'authentification
    authorizationController.performRequests()
}

// Implémentation des délégués
// ASAuthorizationControllerDelegate
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerDelegate {
    // Gérer l'authentification réussie
    func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
        if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
            let userIdentifier = appleIDCredential.user // Identifiant unique Apple
            let fullName = appleIDCredential.fullName // Nom de l'utilisateur
            let email = appleIDCredential.email // Email de l'utilisateur (disponible uniquement lors de la première connexion)

            // Ici, vous pouvez envoyer userIdentifier et autres données à votre serveur pour vérification et création/vinculation de compte
            print("User ID: \(userIdentifier)")
            print("Full Name: \(fullName?.givenName ?? "") \(fullName?.familyName ?? "")")
            print("Email: \(email ?? "")")
        } else if let passwordCredential = authorization.credential as? ASPasswordCredential {
            // L'utilisateur a utilisé des mots de passe enregistrés dans iCloud Keychain
            let username = passwordCredential.user
            let password = passwordCredential.password
            // Ici, vous pouvez utiliser ces données pour la connexion
            print("Username: \(username)")
            print("Password: \(password)")
        }
    }

    // Gérer l'erreur d'authentification
    func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
        print("Échec de la connexion avec Apple: \(error.localizedDescription)")
        // Ici, gérer les erreurs (par exemple, l'utilisateur a annulé)
    }
}

// ASAuthorizationControllerPresentationContextProviding
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerPresentationContextProviding {
    // Fournit la fenêtre sur laquelle l'interface d'authentification sera affichée
    func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
        return view.window! // Important de retourner une fenêtre NON nulle
    }
}

// TODO: Assurez-vous que YourViewController implémente les protocoles nécessaires.
  1. Traiter les données obtenues après une authentification réussie:
    • Utilisez userIdentifier pour identifier de manière unique l'utilisateur Apple.
    • fullName et email ne sont disponibles que lors de la première connexion pour cet utilisateur et votre application. Enregistrez-les.
    • Envoyez userIdentifier, identityToken (contient des informations pour la vérification sur le serveur) et authorizationCode à votre serveur pour vérification et création/vinculation du compte utilisateur dans votre système.
    • Le serveur doit vérifier "identityToken" avec Apple pour assurer l'authenticité de la requête.

En plus de l'authentification principale, il est également important d'implémenter:

  • La gestion de l'état d'autorisation de l'utilisateur (par exemple, via ASAuthorizationAppleIDProvider().getCredentialState).
  • La possibilité de révoquer l'autorisation par l'utilisateur.
  • L'interaction avec votre backend pour créer/authentifier l'utilisateur après une authentification réussie avec Apple.

Remarque : Sign In with Apple n'est disponible que sur les appareils avec iOS 13 / macOS Catalina et versions ultérieures. Pour les versions plus anciennes, un mécanisme d'authentification de secours est nécessaire.