Sobes.tech
Middle+

Wie implementiert man die Authentifizierung über Apple in einer iOS-App?

sobes.tech KI

Antwort von AI

Um eine Authentifizierung mit Apple (Anmelden mit Apple) in einer iOS-Anwendung zu implementieren, sind die folgenden Schritte erforderlich:

  1. Konfigurieren Sie die Anwendung im Apple Developer Portal:

    • Aktivieren Sie die Fähigkeit "Mit Apple anmelden" für Ihre App ID.
    • Generieren oder aktualisieren Sie das Provisioning Profile mit aktivierter Fähigkeit.
  2. Fügen Sie die Fähigkeit "Mit Apple anmelden" im Xcode-Projekt hinzu.

  3. Verwenden Sie das Framework AuthenticationServices.

Beispielcode zum Starten der Authentifizierungsanfrage:

import AuthenticationServices

@available(iOS 13.0, *)
func performSignInWithApple() {
    // Erstellen Sie den Anbieter
    let appleIDProvider = ASAuthorizationAppleIDProvider()

    // Erstellen Sie Anfragen
    let request = appleIDProvider.createRequest()
    request.requestedScopes = [.fullName, .email] // Name und E-Mail des Benutzers anfordern

    // Erstellen Sie den Controller zur Verarbeitung der Anfragen
    let authorizationController = ASAuthorizationController(authorizationRequests: [request])

    // Legen Sie Delegierte zur Verarbeitung der Antworten fest
    authorizationController.delegate = self
    authorizationController.presentationContextProvider = self

    // Starten Sie den Authentifizierungsprozess
    authorizationController.performRequests()
}

// Implementierung der Delegierten
// ASAuthorizationControllerDelegate
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerDelegate {
    // Erfolgreiche Authentifizierung verarbeiten
    func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
        if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
            let userIdentifier = appleIDCredential.user // Eindeutiger Apple-Benutzerkennung
            let fullName = appleIDCredential.fullName // Benutzername
            let email = appleIDCredential.email // Benutzer-E-Mail (nur beim ersten Login verfügbar)

            // Hier können Sie userIdentifier und andere Daten an Ihren Server zur Verifizierung und Kontenerstellung/-bindung senden
            print("User ID: \(userIdentifier)")
            print("Full Name: \(fullName?.givenName ?? "") \(fullName?.familyName ?? "")")
            print("Email: \(email ?? "")")
        } else if let passwordCredential = authorization.credential as? ASPasswordCredential {
            // Der Benutzer hat gespeicherte Passwörter aus iCloud Keychain verwendet
            let username = passwordCredential.user
            let password = passwordCredential.password
            // Hier können Sie diese Daten für die Anmeldung verwenden
            print("Username: \(username)")
            print("Password: \(password)")
        }
    }

    // Fehler bei der Authentifizierung verarbeiten
    func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
        print("Fehler bei der Anmeldung mit Apple: \(error.localizedDescription)")
        // Hier Fehler behandeln (z.B. Benutzer hat die Authentifizierung abgebrochen)
    }
}

// ASAuthorizationControllerPresentationContextProviding
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerPresentationContextProviding {
    // Gibt das Fenster an, in dem die Authentifizierungsoberfläche angezeigt wird
    func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
        return view.window! // Wichtig: KEIN nil-Fenster zurückgeben
    }
}

// TODO: Stellen Sie sicher, dass YourViewController die erforderlichen Protokolle implementiert.
  1. Verarbeiten Sie die nach erfolgreicher Authentifizierung erhaltenen Daten:
    • Verwenden Sie userIdentifier, um den Apple-Benutzer eindeutig zu identifizieren.
    • fullName und email sind nur beim ersten Login für diesen Benutzer und Ihre Anwendung verfügbar. Speichern Sie sie.
    • Senden Sie userIdentifier, identityToken (enthält Informationen zur Verifizierung auf dem Server) und authorizationCode an Ihren Server zur Verifizierung und Kontenerstellung/-bindung.
    • Der Server muss "identityToken" mit Apple verifizieren, um die Echtheit der Anfrage sicherzustellen.

Neben der Hauptauthentifizierung ist es auch wichtig:

  • Den Authentifizierungsstatus des Benutzers zu verwalten (z.B. mit ASAuthorizationAppleIDProvider().getCredentialState).
  • Die Möglichkeit, die Autorisierung durch den Benutzer zu widerrufen.
  • Die Interaktion mit Ihrem Backend zur Erstellung/Authentifizierung des Benutzers nach erfolgreicher Apple-Authentifizierung.

Hinweis: Sign In with Apple ist nur auf Geräten mit iOS 13 / macOS Catalina und neueren Versionen verfügbar. Für ältere Versionen ist ein alternativer Authentifizierungsmechanismus erforderlich.