Sobes.tech
Middle+

iOS dasturida Apple orqali autentifikatsiyani qanday amalga oshirish mumkin?

sobes.tech AI

AIdan javob

Apple bilan identifikatsiya qilish (Sign In with Apple) ni iOS ilovasida amalga oshirish uchun quyidagi bosqichlar talab etiladi:

  1. Apple Developer Portalida ilovani sozlang:

    • App ID uchun "Sign In with Apple" imkoniyatini yoqing.
    • Ruxsat etilgan yoki yangilangan Provisioning Profile ni yarating yoki yangilang.
  2. Xcode loyihasiga "Sign In with Apple" imkoniyatini qo'shing.

  3. AuthenticationServices framework'idan foydalaning.

Autentifikatsiya so'rovini boshlash uchun kod misoli:

import AuthenticationServices

@available(iOS 13.0, *)
func performSignInWithApple() {
    // Ta'minlovchini yarating
    let appleIDProvider = ASAuthorizationAppleIDProvider()

    // So'rovlarni yarating
    let request = appleIDProvider.createRequest()
    request.requestedScopes = [.fullName, .email] // Foydalanuvchi nomi va emailini so'rash

    // So'rovlarni boshqarish uchun controller yarating
    let authorizationController = ASAuthorizationController(authorizationRequests: [request])

    // Javoblarni boshqarish delegatlarini o'rnating
    authorizationController.delegate = self
    authorizationController.presentationContextProvider = self

    // Autentifikatsiya jarayonini boshlang
    authorizationController.performRequests()
}

// Delegatlarni amalga oshirish
// ASAuthorizationControllerDelegate
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerDelegate {
    // Muvaffaqiyatli autentifikatsiya
    func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
        if let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential {
            let userIdentifier = appleIDCredential.user // Unikal Apple foydalanuvchi identifikatori
            let fullName = appleIDCredential.fullName // Foydalanuvchi ismi
            let email = appleIDCredential.email // Foydalanuvchi emaili (faqat birinchi kirishda mavjud)

            // Bu yerda userIdentifier va boshqa ma'lumotlarni serveringizga yuboring
            print("User ID: \(userIdentifier)")
            print("Full Name: \(fullName?.givenName ?? "") \(fullName?.familyName ?? "")")
            print("Email: \(email ?? "")")
        } else if let passwordCredential = authorization.credential as? ASPasswordCredential {
            // Foydalanuvchi iCloud Keychain'dan saqlangan parollarni ishlatdi
            let username = passwordCredential.user
            let password = passwordCredential.password
            // Bu ma'lumotlarni kirish uchun ishlatishingiz mumkin
            print("Username: \(username)")
            print("Password: \(password)")
        }
    }

    // Xatolikni boshqarish
    func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
        print("Apple bilan kirish muvaffaqiyatsiz: \(error.localizedDescription)")
        // Bu yerda xatoliklarni boshqaring
    }
}

// ASAuthorizationControllerPresentationContextProviding
@available(iOS 13.0, *)
extension YourViewController: ASAuthorizationControllerPresentationContextProviding {
    // Autentifikatsiya interfeysini ko'rsatadigan oynani taqdim etadi
    func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
        return view.window! // Noto'g'ri bo'lmagan oynani qaytarish muhim
    }
}

// Kerakli protokollarni YourViewController amalga oshirayotganiga ishonch hosil qiling.
  1. Muvaffaqiyatli autentifikatsiyadan so'ng olingan ma'lumotlarni qayta ishlash:
    • userIdentifier ni Apple foydalanuvchisini yagona tarzda aniqlash uchun foydalaning.
    • fullName va email faqat birinchi kirishda mavjud bo'ladi. Ularni saqlang.
    • userIdentifier, identityToken (serverda tekshirish uchun ma'lumotlar) va authorizationCode ni serveringizga yuboring.
    • Server "identityToken" ni Apple bilan tekshirmog'i va so'rovning haqiqiyligini tasdiqlash uchun.

Bundan tashqari, quyidagilarni amalga oshirish muhim:

  • Foydalanuvchining autorizatsiya holatini boshqarish (masalan, ASAuthorizationAppleIDProvider().getCredentialState yordamida).
  • Foydalanuvchi tomonidan autorizatsiyani bekor qilish imkoniyati.
  • Apple orqali muvaffaqiyatli autentifikatsiyadan so'ng foydalanuvchini yaratish/tekshirish uchun backend bilan hamkorlik.

Eslatma: Sign In with Apple faqat iOS 13 / macOS Catalina va undan yuqori versiyali qurilmalarda mavjud. Eski versiyalar uchun zaxira autentifikatsiya mexanizmi talab etiladi.