Middle+
Kaip įgyvendinti autorizaciją per Apple iOS programėlėje?
sobes.tech AI
Atsakymas iš AI
Apple (Sign In with Apple) prieigos įgyvendinimui iOS programėlėje reikalingi šie žingsniai:
-
Nustatykite programėlę Apple Developer Portal:
- Įjunkite "Sign In with Apple" galimybę savo App ID.
- Sugeneruokite arba atnaujinkite Provisioning Profile su šia galimybe.
-
Pridėkite "Sign In with Apple" galimybę į Xcode projektą.
-
Naudokite
AuthenticationServicesframework'ą.
Pavyzdinis kodas autorizacijos užklausai pradėti:
import AuthenticationServices
@available(iOS 13.0, *)
func performSignInWithApple() {
// Sukurkite teikėją
let appleIDProvider = ASAuthorizationAppleIDProvider()
// Sukurkite užklausas
let request = appleIDProvider.createRequest()
request.requestedScopes = [.fullName, .email] // Prašome naudotojo vardo ir el. pašto
// Sukurkite valdiklį užklausų apdorojimui
let authorizationController = ASAuthorizationController(authorizationRequests: [request])
// Nustatykite delegatus
authorizationController.delegate = self
authorizationController.presentationContextProvider = self
// Pradėkite autorizacijos procesą
authorizationController.performRequests()
}
// Delegatų įgyvendinimas
// ASAuthorizationControllerDelegate
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerDelegate {
// Sėkminga autorizacija
func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
let userIdentifier = appleIDCredential.user // Unikalus naudotojo identifikatorius
let fullName = appleIDCredential.fullName // Vardas
let email = appleIDCredential.email // El. paštas
// Čia galite siųsti šiuos duomenis į savo serverį
print("User ID: \(userIdentifier)")
print("Full Name: \(fullName?.givenName ?? "") \(fullName?.familyName ?? "")")
print("Email: \(email ?? "")")
} else if let passwordCredential = authorization.credential as? ASPasswordCredential {
// Naudotojas naudojo išsaugotus slaptažodžius iš iCloud Keychain
let username = passwordCredential.user
let password = passwordCredential.password
// Čia galite naudoti šiuos duomenis prisijungimui
print("Username: \(username)")
print("Password: \(password)")
}
}
// Klaidos apdorojimas
func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
print("Sign in with Apple failed: \(error.localizedDescription)")
// Čia apdorojame klaidas
}
}
// ASAuthorizationControllerPresentationContextProviding
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerPresentationContextProviding {
// Pateikia langą, kuriame bus rodomas autorizacijos interfeusas
func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
return view.window! // Svarbu grąžinti NE nil langą
}
}
// Pastaba: YourViewController turi įgyvendinti būtinus protokolus.
- Apdorokite duomenis, gautus po sėkmingos autorizacijos:
- Naudokite
userIdentifierunikaliam Apple naudotojo identifikavimui. fullNameiremailyra prieinami tik pirmojo prisijungimo metu ir juos išsaugokite.- Siųskite
userIdentifier,identityToken(informacija serverio patvirtinimui) irauthorizationCodeį savo serverį patvirtinimui ir naudotojo paskyros sukūrimui/susiejimui. - Serveris turi patvirtinti
identityTokensu Apple, kad įsitikintų užklausos autentiškumu.
- Naudokite
Be pagrindinės autorizacijos, taip pat svarbu įgyvendinti:
- Naudotojo autorizacijos būsenos valdymą (pavyzdžiui, per
ASAuthorizationAppleIDProvider().getCredentialState). - Galimybę naudotojui atšaukti autorizaciją.
- Sąveiką su jūsų backend'u naudotojo sukūrimui/autentifikacijai po sėkmingos autorizacijos.
Pastaba: Sign In with Apple yra prieinama tik įrenginiuose su iOS 13 / macOS Catalina ir naujesnėse versijose. Senesnėms OS versijoms reikės atsarginio autentifikacijos mechanizmo.