Middle+
როგორ განვახორციელოთ ავტორიზაცია Apple-ის მეშვეობით iOS აპლიკაციაში?
sobes.tech AI
პასუხი AI-სგან
Apple (Sign In with Apple) аша авторизацияне iOS кушымтасында тормышка ашыру өчен түбәндәге адымнар кирәк:
-
Кушымтаны Apple Developer Portal-та көйләгез:
- "Sign In with Apple" мөмкинлеген App ID өчен активлагыз.
- Provisioning Profile-ны бу мөмкинлек белән генерлагыз яки яңартыгыз.
-
Xcode проектында "Sign In with Apple" мөмкинлеген өстәгез.
-
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()
}
// Делегатларны тормышка ашыру
// ASAuthorizationControllerDelegate
@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! // Мөһим: window-ны nil түгел итеп кайтарырга
}
}
// Игелекле: YourViewController кирәкле протоколларны тормышка ашырырга тиеш.
- Уңышлы авторизациядан соң алынган мәгълүматны эшкәртү:
userIdentifierкулланучының уникаль идентификациясе өчен кулланыгыз.fullNameһәмemailбу кулланучы өчен беренче керүдә генә бар һәм сезнең кушымтада саклагыз.userIdentifier,identityToken(серверда верификация өчен мәгълүматларны үз эченә ала) һәмauthorizationCodeсерверга җибәрегез.- Сервер
identityToken-ны Apple белән верификацияләргә тиеш, соравның чынлыкка туры килүен тәэмин итү өчен.
Төп авторизациядән тыш, шулай ук:
- Кулланучының авторизация хәлен эшкәртү (мәсәлән,
ASAuthorizationAppleIDProvider().getCredentialStateаша) - Кулланучы авторизацияне кире кайтару мөмкинлеген тәэмин итү
- Сезнең бэкенд белән эшләү, авторизация уңышлы үткәннән соң кулланучыны теркәү/авторизацияләү өчен
Искәрмә: Sign In with Apple фәкать iOS 13 / macOS Catalina һәм яңа версияле җайланмаларда гына бар. Иске ОС версияләре өчен запас механизм кирәк.