Middle+
iOS тиркемесинде Apple аркылуу авторизацияны кантип ишке ашыруу керек?
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" мүмкүнчүлүгүн кошуңуз.
-
AuthenticationServicesframework'ин колдонуңуз.
Авторизация суранышын баштоо үчүн код мисалы:
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! // Мөөнөттүү: терезе нөл эмес болушу керек
}
}
// Эскертүү: YourViewController керек болгон протоколдорду ишке ашырышы керек.
- Ийгиликтүү авторизациядан кийин алынган маалыматтарды иштетүү:
userIdentifierколдонуп, колдонуучуну уникалдуу аныктооfullNameжанаemailбиринчи кирүүдө гана жеткиликтүү жана сактоо керекuserIdentifier,identityToken(серверде текшерүү үчүн маалыматтар камтылган) жанаauthorizationCodeсерверге жөнөтүңүз- Сервер
identityToken-ду Apple менен текшериши керек, суроонун чындыкка дал келүүсүн камсыздоо үчүн
Негизги авторизациядан тышкары, ошондой эле:
- Колдонуучунун авторизация абалын иштетүү (мисалы,
ASAuthorizationAppleIDProvider().getCredentialStateаркылуу) - Колдонуучунун авторизацияны кайтаруу мүмкүнчүлүгүн камсыздоо
- Сиздин бэкенд менен иштөө, авторизация ийгиликтүү өткөндөн кийин колдонуучуну түзүү/текшерүү үчүн
Эскертүү: Sign In with Apple гана iOS 13 / macOS Catalina жана андан кийинки версияларда жеткиликтүү. Эски версиялар үчүн резервдүү механизм керек.