Middle+
Чӣ гуна имконпазир кардани тасдиқ via 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 // Apple кулланучысының уникаль идентификаторы
let fullName = appleIDCredential.fullName // Кулланучының исеме
let email = appleIDCredential.email // Кулланучының электрон почтасы (беренче керүдә генә бар)
// Монда userIdentifier һәм башка мәгълүматны серверга җибәрергә мөмкин
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аша). - Кулланучы авторизацияне кире кайтару мөмкинлеген тәэмин итү.
- Уңышлы авторизациядән соң кулланучыны теркәү/авторизацияләү өчен backend белән эшләү.
Искәрмә: Sign In with Apple фәкать iOS 13 / macOS Catalina һәм яңа версияле җайланмаларда гына бар. Иске ОС версияләре өчен резерв механизм кирәк.