Middle+
Πώς υλοποιείται η αυθεντικοποίηση μέσω Apple σε μια εφαρμογή iOS;
sobes.tech AI
Απάντηση από AI
Για την υλοποίηση αυθεντικοποίησης μέσω Apple (Sign In with Apple) σε μια εφαρμογή iOS απαιτούνται τα εξής βήματα:
-
Ρύθμιση της εφαρμογής στο Apple Developer Portal:
- Ενεργοποίηση της δυνατότητας "Sign In with Apple" για το App ID σας.
- Δημιουργία ή ενημέρωση του Provisioning Profile με ενεργοποιημένη τη δυνατότητα.
-
Προσθήκη της δυνατότητας "Sign In with Apple" στο έργο Xcode.
-
Χρήση του 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 και νεότερα. Για παλαιότερες εκδόσεις, απαιτείται εφεδρικός μηχανισμός αυθεντικοποίησης.