Middle+
Jak zaimplementować autoryzację przez Apple w aplikacji na iOS?
sobes.tech AI
Odpowiedź od AI
Aby zaimplementować uwierzytelnianie za pomocą Apple (Sign In with Apple) w aplikacji iOS, konieczne są następujące kroki:
-
Skonfiguruj aplikację w Apple Developer Portal:
- Włącz funkcję "Sign In with Apple" dla swojego App ID.
- Wygeneruj lub zaktualizuj Profil Provisioning z włączoną funkcją.
-
Dodaj funkcję "Sign In with Apple" do projektu Xcode.
-
Użyj frameworka
AuthenticationServices.
Przykład kodu do inicjacji żądania uwierzytelnienia:
import AuthenticationServices
@available(iOS 13.0, *)
func performSignInWithApple() {
// Utwórz dostawcę
let appleIDProvider = ASAuthorizationAppleIDProvider()
// Utwórz żądania
let request = appleIDProvider.createRequest()
request.requestedScopes = [.fullName, .email] // Żądaj imienia i e-mail użytkownika
// Utwórz kontroler do obsługi żądań
let authorizationController = ASAuthorizationController(authorizationRequests: [request])
// Ustaw delegatów do obsługi odpowiedzi
authorizationController.delegate = self
authorizationController.presentationContextProvider = self
// Rozpocznij proces uwierzytelniania
authorizationController.performRequests()
}
// Implementacja delegatów
// ASAuthorizationControllerDelegate
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerDelegate {
// Obsługa udanego uwierzytelnienia
func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
let userIdentifier = appleIDCredential.user // Unikalny identyfikator Apple
let fullName = appleIDCredential.fullName // Imię użytkownika
let email = appleIDCredential.email // E-mail użytkownika (dostępne tylko przy pierwszym logowaniu)
// Tutaj możesz wysłać userIdentifier i inne dane na swój serwer
print("User ID: \(userIdentifier)")
print("Full Name: \(fullName?.givenName ?? "") \(fullName?.familyName ?? "")")
print("Email: \(email ?? "")")
} else if let passwordCredential = authorization.credential as? ASPasswordCredential {
// Użytkownik użył zapisanych haseł z iCloud Keychain
let username = passwordCredential.user
let password = passwordCredential.password
// Tutaj możesz użyć tych danych do logowania
print("Username: \(username)")
print("Password: \(password)")
}
}
// Obsługa błędu uwierzytelnienia
func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
print("Nieudane logowanie przez Apple: \(error.localizedDescription)")
// Obsłuż błędy tutaj
}
}
// ASAuthorizationControllerPresentationContextProviding
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerPresentationContextProviding {
// Zapewnia okno, na którym będzie wyświetlany interfejs uwierzytelniania
func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
return view.window! // Ważne, aby zwrócić OKNO NIE-nulowe
}
}
// TODO: Upewnij się, że YourViewController implementuje niezbędne protokoły.
- Przetwarzaj dane otrzymane po udanym uwierzytelnieniu:
- Użyj
userIdentifierdo unikalnej identyfikacji użytkownika Apple. fullNameiemailsą dostępne tylko przy pierwszym logowaniu tego użytkownika i twojej aplikacji. Zapisz je.- Wyślij
userIdentifier,identityToken(zawiera informacje do weryfikacji na serwerze) iauthorizationCodena swój serwer do weryfikacji i tworzenia/łączenia konta użytkownika. - Serwer musi zweryfikować
"identityToken"z Apple, aby upewnić się o autentyczności żądania.
- Użyj
Poza głównym uwierzytelnieniem, ważne jest również zaimplementowanie:
- Zarządzania stanem autoryzacji użytkownika (np. przez
ASAuthorizationAppleIDProvider().getCredentialState). - Możliwości odwołania autoryzacji przez użytkownika.
- Interakcji z twoim backendem w celu tworzenia/uwierzytelniania użytkownika po udanym uwierzytelnieniu przez Apple.
Uwaga: Sign In with Apple jest dostępny tylko na urządzeniach z iOS 13 / macOS Catalina i nowszych. Dla starszych wersji wymagana jest alternatywna metoda uwierzytelniania.