Middle+
Hoe implementeer je authenticatie via Apple in een iOS-app?
sobes.tech AI
Antwoord van AI
Voor het implementeren van authenticatie via Apple (Sign In with Apple) op een iOS-app zijn de volgende stappen nodig:
-
Configureer de app in het Apple Developer Portal:
- Schakel de Capability "Sign In with Apple" in voor je App ID.
- Genereer of werk het Provisioning Profile bij met ingeschakelde Capability.
-
Voeg de Capability "Sign In with Apple" toe aan het Xcode-project.
-
Gebruik het framework
AuthenticationServices.
Voorbeeldcode voor het initiëren van een authenticatieverzoek:
import AuthenticationServices
@available(iOS 13.0, *)
func performSignInWithApple() {
// Maak een provider
let appleIDProvider = ASAuthorizationAppleIDProvider()
// Maak verzoeken
let request = appleIDProvider.createRequest()
request.requestedScopes = [.fullName, .email] // Vraag naam en e-mail van de gebruiker
// Maak een controller voor het verwerken van verzoeken
let authorizationController = ASAuthorizationController(authorizationRequests: [request])
// Stel de delegates in voor het verwerken van antwoorden
authorizationController.delegate = self
authorizationController.presentationContextProvider = self
// Start het authenticatieproces
authorizationController.performRequests()
}
// Implementatie van delegates
// ASAuthorizationControllerDelegate
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerDelegate {
// Verwerking van succesvolle authenticatie
func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
let userIdentifier = appleIDCredential.user // Unieke identifier van Apple-gebruiker
let fullName = appleIDCredential.fullName // Naam van de gebruiker
let email = appleIDCredential.email // E-mail van de gebruiker (alleen bij eerste login)
// Hier kun je userIdentifier en andere gegevens naar je server sturen voor verificatie en accountcreatie/-koppeling
print("User ID: \(userIdentifier)")
print("Full Name: \(fullName?.givenName ?? "") \(fullName?.familyName ?? "")")
print("Email: \(email ?? "")")
} else if let passwordCredential = authorization.credential as? ASPasswordCredential {
// Gebruiker heeft opgeslagen wachtwoorden uit iCloud Keychain gebruikt
let username = passwordCredential.user
let password = passwordCredential.password
// Hier kun je deze gegevens gebruiken voor login
print("Username: \(username)")
print("Password: \(password)")
}
}
// Verwerking van fout bij authenticatie
func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
print("Sign in with Apple mislukt: \(error.localizedDescription)")
// Hier verwerk je fouten (bijvoorbeeld gebruiker annuleert authenticatie)
}
}
// ASAuthorizationControllerPresentationContextProviding
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerPresentationContextProviding {
// Biedt het venster waarop de authenticatie-interface wordt weergegeven
func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
return view.window! // Belangrijk: retourneer NIET nil window
}
}
// TODO: Zorg dat YourViewController de benodigde protocollen implementeert.
- Verwerk de gegevens die na succesvolle authenticatie zijn verkregen:
- Gebruik
userIdentifiervoor unieke identificatie van de Apple-gebruiker. fullNameenemailzijn alleen beschikbaar bij de eerste login van deze gebruiker en jouw app. Sla ze op.- Stuur
userIdentifier,identityToken(bevat verificatie-informatie voor de server) enauthorizationCodenaar je server voor verificatie en accountkoppeling. - De server moet
"identityToken"verifiëren met Apple om de authenticiteit van het verzoek te bevestigen.
- Gebruik
Naast de hoofdverificatie is het ook belangrijk om:
- De status van de gebruiker te controleren via
ASAuthorizationAppleIDProvider().getCredentialState. - Mogelijkheid tot intrekken van de authenticatie door de gebruiker.
- Interactie met je backend voor het aanmaken / authenticeren van de gebruiker na succesvolle authenticatie via Apple.
Opmerking: Sign In with Apple is alleen beschikbaar op apparaten met iOS 13 / macOS Catalina en nieuwer. Voor oudere versies van het OS is een fallback authenticatiemechanisme vereist.