рдЕрдкрдиреЗ iOS рдРрдк рдореЗрдВ Apple рдХреЗ рд╕рд╛рде рд╕рд╛рдЗрди рдЗрди рдХрд░реЗрдВ

WWDC 2019 рдореЗрдВ, Apple рдиреЗ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ iOS рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреА рд╢рд╛рдВрддрд┐ рдХреЛ рднрдВрдЧ рдХрд░ рджрд┐рдпрд╛ - Apple рдХреЗ рд╕рд╛рде рдПрдХ рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕рд┐рд╕реНрдЯрдо рд╢реБрд░реВ рдХрд┐рдпрд╛ред рдЕрдм рд╕рднреА iOS рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЬреЛ рддреГрддреАрдп-рдкрдХреНрд╖ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕рд┐рд╕реНрдЯрдо (рдлреЗрд╕рдмреБрдХ, рдЯреНрд╡рд┐рдЯрд░, рдЖрджрд┐) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ Apple рдХреЗ рд╕рд╛рде рд╕рд╛рдЗрди рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрдиреНрдпрдерд╛ рдЙрдиреНрд╣реЗрдВ AppStore рд╕реЗ рдирд┐рд╖реНрдХрд╛рд╕рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рдордиреЗ рднрд╛рдЧреНрдп рдХреЛ рд▓реБрднрд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреМрдбрд╝ рдкрдбрд╝реЗред рд╣рдордиреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ - рдХрдЯ рдХреЗ рдиреАрдЪреЗ рдкрддрд╛ рдХрд░реЗрдВред

рд╣рдо Apple рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рд╕реЗрд╡рд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ


рд╣рдорд╛рд░реЗ рдХрд╛рдо рдореЗрдВ, рд╣рдо VIPER + SOA рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ Apple рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдЕрд▓рдЧ рд╕реЗрд╡рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдмрдирд╛рдпрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдкреНрд░рдХрд╛рд░ (рдлреЗрд╕рдмреБрдХ, рд╡реАрдХреЗ, 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. рдРрдкреНрдкрд▓ рдХреЗ рд╕рд╛рде рд╕рд╛рдЗрди рдореЗрдВ рд╢рдмреНрдж рдХреЗ рд╢рд╛рд╕реНрддреНрд░реАрдп рдЕрд░реНрде рдореЗрдВ рдПрдХ рд▓реЙрдЧрдЖрдЙрдЯ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИред рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЕрдиреНрдп рдЗрдирдкреБрдЯ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдХрд┐рд╕реА рднреА рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд▓реЙрдЧрд┐рди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдбреЗрдЯрд╛ рдХреЛ рдорд┐рдЯрд╛рдиреЗ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред
  2. Apple рдХреЗ рд╕рд╛рде рд╕рд╛рдЗрди рдЗрди рдХрд░рдиреЗ рдкрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдкрд╣рд▓рд╛ рдФрд░ рдЖрдЦрд┐рд░реА рдирд╛рдо рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рд▓реЙрдЧрд┐рди рдкрд░ рд╣реА рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рд╕рд░реНрд╡рд░ рдХреЗ рдкрд╛рд╕ рдЗрд╕ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рдирд╣реАрдВ рд╣реИред рдмрд╛рдж рдХреЗ рд▓реЙрдЧрд┐рди рдкреНрд░рдпрд╛рд╕реЛрдВ рдкрд░, рдЖрдкрдХреЛ рдХреЗрд╡рд▓ ASAuthorizationAppleIDCredential рд╕реЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рдХреНрд▓рд╛рдЗрдВрдЯ рдкрдХреНрд╖ рдкрд░, рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рдирд╛рдо рдФрд░ рдЙрдкрдирд╛рдо рд╕реНрдЯреЛрд░ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рддрдХ рдХрд┐ рд╕рд░реНрд╡рд░ рдкрд░ рдкрдВрдЬреАрдХрд░рдг рд╕рдлрд▓ рди рд╣реЛред
  3. Apple рдХреЗ рд╕рд╛рде рд╕рд╛рдЗрди рдЗрди рдХрд░рдиреЗ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреЗ рдИ-рдореЗрд▓ рдХреЛ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдЖрдк рдХреЗрд╡рд▓ рдЙрди рдбреЛрдореЗрди рд╕реЗ рдПрдХ рд╕реНрдкреВрдл рдИ-рдореЗрд▓ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдк developer.apple.com рдкрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ

  4. рдпрд╣ рдЖрд▓реЗрдЦ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдордиреЗ рдмреИрдХ-рдПрдВрдб рднрд╛рдЧ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ред

рд▓реЗрдЦ рдЫреЛрдЯрд╛ рдирд┐рдХрд▓рд╛, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рдерд╛ред

рдЖрдкрдХрд╛ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

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


All Articles