рдирдорд╕реНрдХрд╛рд░, рд╣реЗрдмреНрд░!
рдЗрд╕ рд╕рд╛рд▓ рдХреА рдЧрд░реНрдорд┐рдпреЛрдВ рдореЗрдВ, WWDC 2019 рд╕рдореНрдореЗрд▓рди рдореЗрдВ, Apple рдиреЗ
Apple рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреНрд░рдгрд╛рд▓реА рдХреЗ
рд╕рд╛рде рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛
рд╕рд╛рдЗрди рдЗрди рдХрд┐рдпрд╛ рдФрд░ рд╕реЛрд╢рд▓ рдореАрдбрд┐рдпрд╛ рд▓реЙрдЧрд┐рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдРрдк рд╕реНрдЯреЛрд░ рдХреЗ рд╕рднреА рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ
рдЕрдирд┐рд╡рд╛рд░реНрдп рдмрдирд╛ рджрд┐рдпрд╛ред рдЕрдкрд╡рд╛рдж рд╢реИрдХреНрд╖рд┐рдХ, рдХреЙрд░реНрдкреЛрд░реЗрдЯ, рд╕рд░рдХрд╛рд░ рдФрд░ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рд╣реИрдВ рдЬреЛ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред Apple рдХреЗ рд╕рд╛рде рд╕рд╛рдЗрди рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Apple рдиреЗ рдЙрдЪреНрдЪ-рдЧреБрдгрд╡рддреНрддрд╛ рд╡рд╛рд▓реЗ
рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдмрдирд╛рдП рд╣реИрдВ, рдФрд░ рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо CIAN рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд░реНрдгрди рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдЗрд╕реЗ рд╣рдорд╛рд░реА рд╕реЗрд╡рд╛ рдореЗрдВ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПред

Apple рдбреЗрд╡рд▓рдкрд░ рдЕрдХрд╛рдЙрдВрдЯ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
рдПрдХрддрд╛ рдХрд╛ рдХрд╛рдо рдПрдХ рдбреЗрд╡рд▓рдкрд░ рдЦрд╛рддреЗ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдЕрдкрдиреЗ рдРрдк рдЖрдИрдбреА рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрди рдЗрди рдРрдкреНрдкрд▓ рд╡рд┐рдХрд▓реНрдк рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП,
Apple рдбреЗрд╡рд▓рдкрд░ рдЦрд╛рддреЗ рдореЗрдВ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛рдУрдВ рдХреА
рд╕реВрдЪреА рдкрд░ рдЬрд╛рдПрдВ , рдЖрд╡рд╢реНрдпрдХ рдРрдк рдЖрдИрдбреА рдЪреБрдиреЗрдВ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рд╛рдЗрди рдЗрди рдРрдкреНрдкрд▓ рд╡рд┐рдХрд▓реНрдк рдХреЛ рд╕рдХреНрд╖рдо рдХрд░реЗрдВред
рдЕрдм рд╣рдо рд╕реЗрд╡рд╛ рдЖрдИрдбреА рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ - рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдЬрд┐рд╕реЗ рдЖрдкрдХреЛ рдРрдкреНрдкрд▓ рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╕рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдкреНрд░рддрд┐ рдРрдк рдЖрдИрдбреА рдкрд░ 5 рд╕реЗрд╡рд╛ рдЖрдИрдбреА рдмрдирд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рд╕реЗрд╡рд╛ рдЖрдИрдбреА рдЪреБрдиреЗрдВ, рдЖрд╡рд╢реНрдпрдХ рдлрд╝реАрд▓реНрдб рднрд░реЗрдВ рдФрд░ рд╕рд╛рдЗрди рдЗрди рдРрдкреНрдкрд▓ рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдПрдХ рдлреЙрд░реНрдо рдЦреБрд▓ рдЬрд╛рдПрдЧрд╛ рдЬрд╣рд╛рдВ рд╣рдо рд╕рд╣реА рдкреНрд░рд╛рдердорд┐рдХ рдРрдк рдЖрдИрдбреА рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рд╡реЗрдм рдбреЛрдореЗрди рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╕рдлрд▓ рд▓реЙрдЧрд┐рди рдХреЗ рдмрд╛рдж рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП URL рд╕реВрдЪреАрдмрджреНрдз рдХрд░рддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рд░рдЦреЗрдВ рдХрд┐ рдЖрдк рдХреЗрд╡рд▓ 10 рд░рд┐рдЯрд░реНрди URL рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рд╕рд╣реЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╣реЗрдЬреЗрдВ, рдЬрд╛рд░реА рд░рдЦреЗрдВ рдФрд░ рд░рдЬрд┐рд╕реНрдЯрд░ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рд╣рд╛рдВ, рдХрд┐рд╕реА рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рддреАрдиреЛрдВ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЕрдиреНрдпрдерд╛ рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рднрд╛рд╡реА рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред
рдЕрдм, рд╕реЗрд╡рд╛ рдЖрдИрдбреА рд╕реВрдЪреА рдореЗрдВ, рдмрдирд╛рдП рдЧрдП рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ рд╕рд╛рдЗрди рдЗрди рдРрдкреНрдкрд▓ рдлрд╝реАрд▓реНрдб рдореЗрдВ рдлрд┐рд░ рд╕реЗ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдЦреБрд▓рдиреЗ рд╡рд╛рд▓реА рд╡рд┐рдВрдбреЛ рдореЗрдВ, рд╡реЗрдм рдПрдбреНрд░реЗрд╕ рдлрд╝реАрд▓реНрдб рдХреЗ рдмрдЧрд▓ рдореЗрдВ, рд╣рдо рджреЛ рдирдП рдмрдЯрди рджреЗрдЦрддреЗ рд╣реИрдВ:

рдпрд╣ рдлрд╝рд╛рдЗрд▓ рдЖрдкрдХреЗ рд╕рдВрд╕рд╛рдзрди рдХреЛ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Apple рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╣реИред рдЗрд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдЕрдкрдиреЗ рд╕рдВрд╕рд╛рдзрди рдкрд░ рд░рдЦреЗрдВред рдЗрд╕рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж, рдЗрд╕ рдлрд┐рдВрдЯ рдиреЗ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд┐рдпрд╛: рдЬрдм рд╣рдорд╛рд░реЗ рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдиреЗ рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЬреЛрдбрд╝рд╛, рддрдм рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реНрдерд╛рди рдкрд░ рдкрдбрд╝реА рдлрд╝рд╛рдЗрд▓ рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ (302) рдирд┐рд░реНрджрд┐рд╖реНрдЯ url рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рдерд╛, рдФрд░ Apple рдиреЗ рдЗрд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдерд╛ред рддрдм рдореБрдЭреЗ URL (200) рджреНрд╡рд╛рд░рд╛ рд╕реАрдзреЗ рдПрдХреНрд╕реЗрд╕ рдХреЗ рд▓рд┐рдП рдлрд╛рдЗрд▓ рд░рдЦрдиреА рдереАред Apple рджреНрд╡рд╛рд░рд╛ рдлрд╝рд╛рдЗрд▓ рдХреА рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдбреЛрдореЗрди рд░реЛрд╢рдиреА рдХреЗ рдЖрдЧреЗ рдПрдХ рд╣рд░реЗ рд░рдВрдЧ рдХрд╛ рдЪреЗрдХрдорд╛рд░реНрдХ:

рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдЕрдиреБрднрд╛рдЧ рд╕реЗ, рдХреБрдВрдЬреА рдЕрдиреБрднрд╛рдЧ рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдПрдХ рдирдИ рдХреБрдВрдЬреА рдмрдирд╛рдПрдВред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдРрдкреНрдкрд▓ рдЪреЗрдХрдмреЙрдХреНрд╕ рдХреЗ рд╕рд╛рде рд╕рд╛рдЗрди рдЗрди рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдФрд░ рдРрдк рдЖрдИрдбреА рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдлрд┐рд░ рдЬрд╛рд░реА рд░рдЦреЗрдВ:

рдЕрдЧрд▓реА рд╕реНрдХреНрд░реАрди рдкрд░, рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдПрдХ рд╕реБрд░рдХреНрд╖рд┐рдд рд╕реНрдерд╛рди рдкрд░ рд╕рд╣реЗрдЬреЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рд╕реНрдХреНрд░реАрди рдХреЛ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рдХреБрдВрдЬреА рдбрд╛рдЙрдирд▓реЛрдб рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрдЧреАред рдЙрд╕реА рдкреГрд╖реНрда рдкрд░ рдЖрдк рдХреБрдВрдЬреА рдЖрдИрдбреА рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреА рд╣рдореЗрдВ рдЕрднреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:

рд╕рд╛рдЗрди рдЗрди рдХрд░реЗрдВ Apple рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЛрдирд╕ рд╣реИ: рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рдирдХрд▓реА рдИ-рдореЗрд▓ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдЖрдк рдХреЗрд╡рд▓ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рдкрддреЗ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЕрдзрд┐рдХ рдЕрдиреБрднрд╛рдЧ рдЦреЛрд▓реЗрдВ, Apple рдЕрдиреБрднрд╛рдЧ рдХреЗ рд╕рд╛рде рд╕рд╛рдЗрди рдЗрди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ рдФрд░ рдЕрдкрдирд╛ URL рджрд░реНрдЬ рдХрд░реЗрдВ:

IOS рдРрдк рдХреЗ рд╕рд╛рде рд╕рд╛рдЗрди рдЗрди рдРрдк рдмрдЯрди рдХреЛ рдЬреЛрдбрд╝реЗрдВред
CIAN рддреАрди рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: iOS, Android, Webред IOS рдХреЗ рд▓рд┐рдП рдПрдХ рджреЗрд╢реА рдПрд╕рдбреАрдХреЗ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:

IOS рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ Apple рдХреЗ рд╕рд╛рде рд╕рд╛рдЗрди рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, ASAuthorizationAppleIDButton рдмрдЯрди рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдЙрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рд╣реИрдВрдбрд▓рд░ рд▓рдЯрдХрд╛рдПрдВ:
let appleIDProvider = ASAuthorizationAppleIDProvider() let request = appleIDProvider.createRequest() request.requestedScopes = [.fullName, .email] let authorizationController = ASAuthorizationController(authorizationRequests: [request]) authorizationController.delegate = self authorizationController.presentationContextProvider = self authorizationController.performRequests()
ASAuthorizationAppleIDProvider рдХреЗ рдЕрд▓рд╛рд╡рд╛, ASAuthorizationPasswordProvider рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдЬреЛ рдЖрдкрдХреЛ рдХрд┐рдЪреЗрди рд╕реЗ "рд▓реЙрдЧрд┐рди-рдкрд╛рд╕рд╡рд░реНрдб" рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рдЕрдм рд╣рдо ASAuthorizationControllerPresentationContextProviding рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ:
func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor { return self.view.window! }
ASAuthorizationControllerDelegate рдкреНрд░рддрд┐рдирд┐рдзрд┐ рдмрдирд╛рдПрдВ рдЬреЛ рд╕рдлрд▓рддрд╛ рдпрд╛ рддреНрд░реБрдЯрд┐ рдХреА рд░рд┐рдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ:
public func authorizationController( controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization ) { guard let appleIDCredential = authorization.credential as? ASAuthorizationAppleIDCredential, let code = appleIDCredential.authorizationCode, let codeStr = String(data: code, encoding: .utf8) else {
рд╣рдо рд╕рд░реНрд╡рд░ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдкреНрд░рд╛рдзрд┐рдХрд░рдг рднреЗрдЬрддреЗ рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреА рд╕рдлрд▓рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмреИрдХрдПрдВрдб рд╕реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рд╣реИрдВред
рд╣рдо рд╡реЗрдм рдФрд░ Android рдХреЗ рд▓рд┐рдП Apple рдХреЗ рд╕рд╛рде рд╕рд╛рдЗрди рдЗрди рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ
рдЕрдЪрд╛рдирдХ, Android рдФрд░ рд╡реЗрдм рдХреЗ рд▓рд┐рдП, Apple рдПрдХ SDK рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рджреЛрдиреЛрдВ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЖрдкрдХреЛ Apple рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдкреГрд╖реНрда рдЦреЛрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдФрд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЕрд▓рдЧ рд╣реЛрдЧреА:

рд▓реЙрдЧрд┐рди рдкреГрд╖реНрда рдХрд╛ URL рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
https:
рдЗрд╕рдХреЗ рдорд╛рдкрджрдВрдбреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
- client_id - рд╕реЗрд╡рд╛ рдЖрдИрдбреА рдЬреЛ рдКрдкрд░ рджрд░реНрдЬ рдХреА рдЧрдИ рдереАред
- redirect_uri - URI рдЬрд╣рд╛рдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ AppleID рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рдлрд▓ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЗ рдмрд╛рдж рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред рд╣рдордиреЗ Apple рдбреЗрд╡рд▓рдкрд░ рд╕реЗрдЯ рдХрд░рддреЗ рд╕рдордп рдЗрд╕ URI рдХреЛ рдКрдкрд░ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдерд╛ред
- рд░рд╛рдЬреНрдп - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд╛ рд╕рддреНрд░ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдЬрд┐рд╕реЗ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдиреЗ рдкрд░ Apple рд╡рд╛рдкрд╕ рдЖрдПрдЧрд╛, рддрд╛рдХрд┐ рд╣рдо рдкреНрд░реЗрд╖рдХ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХреЗрдВред рдЖрдк рдЗрд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕реНрд╡рдпрдВ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдирд┐рдпрдо рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд╕реНрдЯреНрд░рд┐рдВрдЧред
- рдЧреБрдВрдЬрд╛рдЗрд╢ - рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реЗ рдХреНрдпрд╛ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдирд╛рдо, рдИрдореЗрд▓, рдпрд╛ рджреЛрдиреЛрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣реИред
- response_type - рдпрд╣ рдкреИрд░рд╛рдореАрдЯрд░ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рд░реВрдк рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдХреЛрдб рдпрд╛ id_token рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк id_token рдХрд╛ рдЪрдпрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЙрд╕реЗ response_mode рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд╕рд╛рде рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдХреНрд╡реЗрд░реА, рдЯреБрдХрдбрд╝рд╛ рдФрд░ form_post рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
AppleID рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЛ-рдХрд╛рд░рдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рд╕рдлрд▓ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, Apple рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ рдФрд░ рд░рд╛рдЬреНрдп рдФрд░ рдХреЛрдб рдкреИрд░рд╛рдореАрдЯрд░ рдкрд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛:
curl -X POST \ 'https:
рдХреЛрдб рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ, рдПрдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдХреЛрдб рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ 5 рдорд┐рдирдЯ рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рд╣реЛрддрд╛ рд╣реИред рд░рд╛рдЬреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ, рд╕рддреНрд░ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рднреЗрдЬрд╛ рдЧрдпрд╛ рдерд╛ рдЬрдм рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдлрд╝реЙрд░реНрдо рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреИрд░рд╛рдореАрдЯрд░, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдореЗрдВред
рдбреЗрдЯрд╛ рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐
рд╕рднреА рдЧреНрд░рд╛рд╣рдХреЛрдВ рдкрд░, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ Apple рд╕реЗ access_token рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкрд╣рд▓реЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг_рдХреЛрдб рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ:
curl -X POST https:
рдЗрд╕ рдЕрдиреБрд░реЛрдз рдореЗрдВ:
- client_id рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ iOS рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП AppID рдХреЗ рд▓рд┐рдП рдмрдирд╛рдИ рдЧрдИ ServiceID рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред
- рдХреЛрдб - рд╣рдореЗрдВ iOS рдХреНрд▓рд╛рдЗрдВрдЯ рд╕реЗ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдпрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХреЗ рдмрд╛рдж рдЙрдЪреНрдЪрддрд░ рдкреНрд░рд╛рдкреНрдд рд╣реБрдЖ
- рдЕрдиреБрджрд╛рди_рдкреНрд░рдХрд╛рд░ рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ, рд╣рдо рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВ: рдкреНрд░рд╛рдзрд┐рдХрд░рдг (рдкреНрд░рд╛рдзрд┐рдХрд░рдг_рдХреЛрдб) рдпрд╛ рдЯреЛрдХрди рдХрд╛ рдирд╡реАрдиреАрдХрд░рдг (рд░рд┐рдлреНрд░реЗрд╢_рдЯреЛрдХрди)
- client_secret рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ - JSON рд╡реЗрдм рдЯреЛрдХрди рдЖрд╡реЗрджрди рдкрдВрдЬреАрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рдкреНрд░рд╛рдкреНрдд рдЧреБрдкреНрдд рдХреБрдВрдЬреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ред
рдЖрдк рдкрд╛рдпрдерди рдореЗрдВ JSON рд╡реЗрдм рдХреИрдо рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:
claims = { 'iss': APPLEID_TEAM_ID, 'aud': 'https://appleid.apple.com', 'sub': client_id, 'iat': current_timestamp, 'exp': current_timestamp + expire_period, } headers = {'kid': 'APPLEID_KEY_ID', 'alg': 'ES256'} client_secret = jwt.encode(payload=claims, key=secret_key, algorithm='ES256', headers=headers).decode('utf-8')
рдпрджрд┐ рд╕рдм рдХреБрдЫ рдареАрдХ рд░рд╣рд╛, рддреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЖрдПрдВрдЧреЗ:
{ "access_token":"ufhzch", "token_type":"Bearer", "expires_in":3600, "refresh_token":"some_refresh_token", "id_token":"some_long_signed_jwt_token" }
рд╣реБрд░реНрд░реЗ, рдпрд╣рд╛рдБ access_token рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реА рд░рд┐рдлреНрд░реЗрд╢_рдЯреЛрдХрди рдЖрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдиреЗ рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЬрд╛рдирдХрд╛рд░реА id_token рдлрд╝реАрд▓реНрдб рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХреА рдЬрд╛рддреА рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдбреАрдХреЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛:
public_key = jwt.algorithms.RSAAlgorithm.from_jwk( json.dumps(apple_public_key) ) data = jwt.decode( id_token, public_key, algorithm="RS256", verify=True, audience=client_id, )
Apple_public_key рдПрдХ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рд╣реИ рдЬрд┐рд╕реЗ
рд▓рд┐рдВрдХ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
редрдбрд┐рдХреЛрдбрд┐рдВрдЧ рдХреЗ рдмрд╛рдж рд╣рдореЗрдВ рдорд┐рд▓рддрд╛ рд╣реИ:
data = { "iss": "https://appleid.apple.com", "aud": client_id, "exp": 1570379521, "iat": 1570378921, "sub": " ", "at_hash": "8ZDF6j786IQf9mA", "email": "someemail@gmail.com", "email_verified": "true", "auth_time": 1570378804 }
рдИрдореЗрд▓ рдХреЗрд╡рд▓ рдПрдХ рдмрд╛рд░ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкрд╣рд▓реА рдмрд╛рд░ рдЖрдкрдХреА рд╕реЗрд╡рд╛ рдореЗрдВ рд╕рд╛рдЗрди рдЗрди рдПрдкреНрдкрд▓ рдХреЗ рд╕рд╛рде рд▓реЙрдЧ рдЗрди рдХрд░рддрд╛ рд╣реИред рдЕрдЧрд▓реА рдмрд╛рд░, Apple рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдХреЗрд╡рд▓ рддрднреА рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдЧрд╛ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрдкрдХреЗ рдЖрд╡реЗрджрди рдХреЛ рдЕрдкрдиреЗ рджрдо рдкрд░ рдмрдВрдж рдХрд░ рджреЗрдЧрд╛ред Apple рдХрд╛ рдпрд╣ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЕрдиреНрдп рд╕реЗрд╡рд╛рдУрдВ рд╕реЗ рднрд┐рдиреНрди рд╣реИ рдЬрд╣рд╛рдВ рдбреЗрдЯрд╛ рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рд╣рдореЗрдВ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдирд╣реАрдВ рдорд┐рд▓реА рдХрд┐ рд╡реЗ рдЗрд╕рдХреЗ рдмрд╛рдж рд╕реЗ рдХреБрдЫ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред
рдЗрд╕ рдЙрддреНрддрд░ рдореЗрдВ, рд╣рдореЗрдВ рдЙрди рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдЙрдк рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬреЛ рд╣рд░ рдмрд╛рд░ рдФрд░ рдИрдореЗрд▓ рд╕реЗ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╕рдлрд▓ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд▓рд╛рднред
рдкрд╣рд▓рд╛ рдкрд░рд┐рдгрд╛рдо
рдПрдкреНрдкрд▓ рдХреЗ рд╕рд╛рде рд╕рд╛рдЗрди рдЗрди рдХреЗ рд╕рд╛рде CIAN рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХреА рд░рд┐рд▓реАрдЬрд╝ рдХреЗ рдмрд╛рдж, рджрд┐рди рдХреЗ рдкрд╣рд▓реЗ рджрд┐рди рдпрд╣ iOS 13 рдХреЗ рд▓рд┐рдП рдирдП рдкрдВрдЬреАрдХрд░рдгреЛрдВ рдХреЗ рдПрдХ рддрд┐рд╣рд╛рдИ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдерд╛, рдФрд░ рдЕрдм рдпрд╣ iOS рдХреЗ рд╕рднреА рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рджреВрд╕рд░рд╛ рд╕реНрдерд╛рди рд▓реЗрддрд╛ рд╣реИ, рдХреЗрд╡рд▓ VK рдХреЗ рд▓рд┐рдП рджреВрд╕рд░рд╛ред AppleID рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рд╛рдЗрдЯ рдкрд░ рдХреБрдЫ рдкрдВрдЬреАрдХрд░рдг рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдХреА рд╕рдВрдЦреНрдпрд╛ рдзреАрд░реЗ-рдзреАрд░реЗ рдмрдврд╝ рд░рд╣реА рд╣реИред рдФрд░ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ Android рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкрд░ AppleID рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ, рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХрд┐рддрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдореБрд╢реНрдХрд┐рд▓ рддрд░реАрдХреЗ рд╕реЗ рдкрдВрдЬреАрдХрд░рдг рдХрд░реЗрдВрдЧреЗред