تقديم تسجيل الدخول باستخدام Apple في تطبيق iOS الخاص بك

في WWDC 2019 ، أزعجت Apple مرة أخرى راحة مطوري iOS - عرض نظام ترخيص مستخدم جديد تسجيل الدخول باستخدام Apple. الآن يجب أن تنفذ جميع تطبيقات iOS التي تستخدم أنظمة ترخيص الجهات الخارجية (Facebook و Twitter وغيرها) بالضرورة تسجيل الدخول باستخدام Apple ، وإلا سيتم طردها من AppStore. قررنا عدم إغراء القدر وركضنا لتنفيذ هذه الميزة. كيف بالضبط فعلنا هذا - اكتشف تحت الخفض.

نكتب خدمة الترخيص من خلال Apple


في عملنا ، نستخدم بنية VIPER + SOA ، لذلك قدمنا ​​تفويضًا من خلال Apple كخدمة منفصلة. أولاً ، نلف البيانات في التعداد من أجل توسيع أنواع التراخيص بسهولة (Facebook ، VK ، Google ، إلخ):

enum AuthToken { case apple(code: String, name: String) } 

سنقوم بتمرير النتيجة باستخدام أداة الملاحظة من RxSwift :

 protocol AuthProviderProtocol { var authResult: Observable<AuthToken> { get } func login() func logout() } 

تنفيذ البروتوكول:

 import AuthenticationServices import Foundation import RxSwift @available(iOS 13.0, *) class AppleAuthService: AuthProviderProtocol { private let authResultSubject = PublishSubject<AuthToken>() var authResult: Observable<AuthToken> { return authResultSubject.asObservable() } func login() { let appleIDProvider = ASAuthorizationAppleIDProvider() let request = appleIDProvider.createRequest() request.requestedScopes = [.fullName, .email] let authorizationController = ASAuthorizationController(authorizationRequests: [request]) authorizationController.delegate = self authorizationController.performRequests() } } @available(iOS 13.0, *) extension AppleAuthService: ASAuthorizationControllerDelegate { func authorizationController( controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization ) { guard let credential = authorization.credential as? ASAuthorizationAppleIDCredential, let tokenData = credential.authorizationCode, let token = String(data: tokenData, encoding: .utf8) else { return } let firstName = credential.fullName?.givenName let lastName = credential.fullName?.familyName authResultSubject.onNext(.apple(code: token, name: firstName + lastName)) } } 

الفروق الدقيقة في معرفة


  1. لا يحتوي تسجيل الدخول باستخدام Apple على وظيفة تسجيل خروج بالمعنى التقليدي للكلمة. لا تخزن المكتبة أي بيانات ، على عكس مكتبات الإدخال الأخرى ، لذلك ليست هناك حاجة لمسح البيانات التي يتم تلقيها عن طريق تسجيل الدخول.
  2. تسجيل الدخول باستخدام Apple يتلقى الأسماء الأولى والأخيرة للمستخدم مرة واحدة فقط عند تسجيل الدخول الأول. لا يملك الخادم حق الوصول إلى هذه البيانات. في محاولات تسجيل الدخول اللاحقة ، سوف تتلقى فقط AuthorizationCode من ASAuthorizationAppleIDCredential . لذلك ، من جانب العميل ، نقوم بتخزين اسم المستخدم ولقبه حتى ينجح التسجيل على الخادم.
  3. يسمح تسجيل الدخول باستخدام Apple للمستخدم باستبدال بريده الإلكتروني. يمكنك الكتابة إلى بريد إلكتروني مضلل فقط من تلك المجالات التي تحددها في الإعدادات على developer.apple.com

  4. توضح هذه المقالة كيفية تطبيق الجزء الخلفي.

تبين أن المقالة صغيرة ، لكننا نأمل أن تكون مفيدة لك.

شكرا لاهتمامكم!

Source: https://habr.com/ru/post/ar467231/


All Articles