Sobes.tech
Middle+

Πώς υλοποιείται η αυθεντικοποίηση μέσω Apple σε μια εφαρμογή iOS;

sobes.tech AI

Απάντηση από AI

Για την υλοποίηση αυθεντικοποίησης μέσω Apple (Sign In with Apple) σε μια εφαρμογή iOS απαιτούνται τα εξής βήματα:

  1. Ρύθμιση της εφαρμογής στο Apple Developer Portal:

    • Ενεργοποίηση της δυνατότητας "Sign In with Apple" για το App ID σας.
    • Δημιουργία ή ενημέρωση του Provisioning Profile με ενεργοποιημένη τη δυνατότητα.
  2. Προσθήκη της δυνατότητας "Sign In with Apple" στο έργο Xcode.

  3. Χρήση του framework AuthenticationServices.

Παράδειγμα κώδικα για την έναρξη ενός αιτήματος αυθεντικοποίησης:

import AuthenticationServices

@available(iOS 13.0, *)
func performSignInWithApple() {
    let appleIDProvider = ASAuthorizationAppleIDProvider()
    let request = appleIDProvider.createRequest()
    request.requestedScopes = [.fullName, .email]
    let authorizationController = ASAuthorizationController(authorizationRequests: [request])
    authorizationController.delegate = self
    authorizationController.presentationContextProvider = self
    authorizationController.performRequests()
}

// Υλοποίηση delegate
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerDelegate {
    func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
        if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
            let userIdentifier = appleIDCredential.user
            let fullName = appleIDCredential.fullName
            let email = appleIDCredential.email
            print("User ID: \(userIdentifier)")
            print("Full Name: \(fullName?.givenName ?? "") \(fullName?.familyName ?? "")")
            print("Email: \(email ?? "")")
        } else if let passwordCredential = authorization.credential as? ASPasswordCredential {
            let username = passwordCredential.user
            let password = passwordCredential.password
            print("Username: \(username)")
            print("Password: \(password)")
        }
    }
    func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
        print("Sign in with Apple failed: \(error.localizedDescription)")
    }
}

// ASAuthorizationControllerPresentationContextProviding
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerPresentationContextProviding {
    func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
        return view.window!
    }
}

// Επεξεργασία των δεδομένων που λαμβάνονται μετά την επιτυχή αυθεντικοποίηση:
// Χρησιμοποιήστε το `userIdentifier` για μοναδική ταυτοποίηση του χρήστη Apple.
// Τα `fullName` και `email` διατίθενται μόνο κατά την πρώτη είσοδο και πρέπει να αποθηκευτούν.
// Στείλτε το `userIdentifier`, `identityToken` και `authorizationCode` στον διακομιστή σας για επαλήθευση.
// Ο διακομιστής πρέπει να επαληθεύσει το `identityToken` με την Apple.

Εκτός από την κύρια αυθεντικοποίηση, είναι σημαντικό να υλοποιήσετε:

* Έλεγχο της κατάστασης του χρήστη μέσω `ASAuthorizationAppleIDProvider().getCredentialState`.
* Δυνατότητα ανάκλησης της αυθεντικοποίησης από τον χρήστη.
* Αλληλεπίδραση με το backend σας για δημιουργία / αυθεντικοποίηση χρήστη.

Σημείωση: Το `Sign In with Apple` είναι διαθέσιμο μόνο σε συσκευές με iOS 13 / macOS Catalina και νεότερα. Για παλαιότερες εκδόσεις, απαιτείται εφεδρικός μηχανισμός αυθεντικοποίησης.