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:
-
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.
-
Ajouter la capacité "Se connecter avec Apple" dans le projet Xcode.
-
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.
- Traiter les données obtenues après une authentification réussie:
- Utilisez
userIdentifierpour identifier de manière unique l'utilisateur Apple. fullNameetemailne 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) etauthorizationCodeà 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.
- Utilisez
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.