๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŽ iOS/iOS

[iOS] Swift๋กœ Apple๋กœ๊ทธ์ธ ๊ตฌํ˜„ํ•˜๊ธฐ

by Fomagran ๐Ÿ’ป 2020. 11. 15.
728x90
๋ฐ˜์‘ํ˜•

์•ˆ๋…•ํ•˜์„ธ์š” Foma ์ž…๋‹ˆ๋‹ค!!

 

2019 WWDC์—์„œ ๋ฐœํ‘œํ•œ Sign in with apple์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณผ๊ฑด๋ฐ์š”.

 

๋ฐœํ‘œ์™€ ๋™์‹œ์— Apple์€ ์ƒˆ๋กœ์šด ๊ฐ€์ด๋“œ ๋ผ์ธ์„ ์ถ”๊ฐ€ํ–ˆ๋Š”๋ฐ

 

๋ฐ”๋กœ ํƒ€์‚ฌ ์†Œ์…œ ๋กœ๊ทธ์ธ์ด ์žˆ๋‹ค ๋ฉด Apple ๋กœ๊ทธ์ธ์„ ํ•„์ˆ˜๋กœ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด์ฃ ! 

 

๊ทธ๋Ÿฌ๋‹ˆ๊น "ํƒ€์‚ฌ ๋กœ๊ทธ์ธ์„ ์ง€์›ํ• ๊ฑฐ๋ฉด ์šฐ๋ฆฌ๊บผ๋„ ๋ฌด์กฐ๊ฑด ์ง€์›ํ•ด!! " ๋ผ๋Š” ๊ฒƒ์ด์ฃ .

 

 

๊ทธ๋Ÿฌ๋ฉด ๊ตฌํ˜„ํ•˜๊ธฐ์— ์•ž์„œ ๊ฐ€์žฅ ๋จผ์ € ํ•„์š”ํ•œ ๊ฒƒ์€ ์• ํ”Œ ๊ฐœ๋ฐœ์ž ๊ณ„์ •์ž…๋‹ˆ๋‹ค.

 

์• ํ”Œ ๊ฐœ๋ฐœ์ž ๊ณ„์ •์ด ์žˆ์–ด์•ผ Sign in with apple ๊ถŒํ•œ์„ ์–ป์„ ์ˆ˜ ์žˆ์–ด์š” ใ… 

 

๊ฐœ๋ฐœ์ž ๊ณ„์ • ๋“ฑ๋ก๋ฐฉ๋ฒ•์€ ์•„๋ž˜ ์‚ฌ์ดํŠธ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!

 

 

Apple Developer ์•ฑ์—์„œ ๊ณ„์ • ๋“ฑ๋ก ๋ฐ ๊ด€๋ฆฌํ•˜๊ธฐ - ์ง€์› - Apple Developer

๋ฌธ์˜ํ•˜๊ธฐ ์–ด๋–ป๊ฒŒ ๋„์™€๋“œ๋ฆด ์ˆ˜ ์žˆ๋Š”์ง€ ์•Œ๋ ค์ฃผ์‹œ๋ฉด ํ•ธ๋“œํฐ์ด๋‚˜ ์ด๋ฉ”์ผ์„ ํ†ตํ•ด ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์ฐพ์•„๋“œ๋ฆฝ๋‹ˆ๋‹ค. ์ง€์›๋ฐ›๊ธฐ

developer.apple.com

 

๊ฐœ๋ฐœ์ž ๊ณ„์ • ๋“ฑ๋ก์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด Xcode๋กœ ์ด๋™ํ•ด์ฃผ์„ธ์š”

 

Xcode


ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์˜ Targets - Signing & Capabilities๋กœ ์ด๋™ํ•ด์ค๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋ฉด ์•„๋ž˜ ๋…ธ๋ž€์ƒ‰์œผ๋กœ ํ‘œ์‹œํ•ด๋†“์€ ๊ฒƒ์ฒ˜๋Ÿผ +Capability๊ฐ€ ๋ณด์ผ๊ฑด๋ฐ ์ด๊ฒƒ์„ ๋ˆ„๋ฅด๊ณ  Sign in with Apple์„ ์„ ํƒํ•ด ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค.

์ถ”๊ฐ€๊ฐ€ ๋˜์—ˆ๋‹ค๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ Sign in with Apple์ด ์ƒ๊ธธ๊ฑฐ์—์š”!

StoryBoard


StoryBoard๋กœ ์ด๋™ํ•ด์„œ Apple Login Button ์—ญํ• ์„ ํ•  Button์„ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.

 

 Button์˜ ํด๋ž˜์Šค๋Š” ASAuthorizationAppleIDButton ์œผ๋กœ ์„ค์ •ํ•ด์ค๋‹ˆ๋‹ค.

ViewController


ViewController์— ๋ฒ„ํŠผ์„ ์—ฐ๊ฒฐ์‹œ์ผœ์ฃผ๊ณ  AuthenticationServices๋ฅผ importํ•ด์ค๋‹ˆ๋‹ค.

์•„ ๊ทธ๋ฆฌ๊ณ  ์ค‘์š”ํ•œ ๊ฑด ์• ํ”Œ๋กœ๊ทธ์ธ์€ iOS 13.0๋ฒ„์ „ ์ดํ›„๋ถ€ํ„ฐ ์ง€์›ํ•˜๋ฏ€๋กœ ViewController์— ๋ฐ˜๋“œ์‹œ @available(iOS 13.0,*)์„ ๋„ฃ์–ด์ค˜์•ผํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณค AppleLogin ๋”œ๋ฆฌ๊ฒŒ์ดํŠธ๋ฅผ ๋จผ์ € ๋งŒ๋“ค์–ด์ค์‹œ๋‹ค!

 

๋‘๊ฐ€์ง€ ํ•จ์ˆ˜๊ฐ€ ํ•„์š”ํ•œ๋ฐ ํ•˜๋‚˜๋Š” ๋กœ๊ทธ์ธ์ด ์„ฑ๊ณตํ–ˆ์„ ๋•Œ์™€ ์—๋Ÿฌ๊ฐ€ ์žˆ์„ ๋•Œ ์ž…๋‹ˆ๋‹ค.

 

didCompleteWithAuthorization ํ•จ์ˆ˜๋Š” ๋กœ๊ทธ์ธ์ด ์„ฑ๊ณตํ–ˆ์„ ๋•Œ ํ˜ธ์ถœ๋˜๋Š”๋ฐ ์—ฌ๊ธฐ์„œ Crendential์„ ๋งŒ๋“ค์–ด์ฃผ๊ณ  ์œ ์ €์ด๋ฆ„๊ณผ ์ด๋ฉ”์ผ์„ ๋ฐ›์•„์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค!

 

didCompleteWithError ํ•จ์ˆ˜๋Š” error๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.

๊ทธ ๋‹ค์Œ์œผ๋ก  ASAuthorizationControllerPresentationContextProviding๋ผ๋Š” ๋”œ๋ฆฌ๊ฒŒ์ดํŠธ๋ฅผ ๋งŒ๋“ค์–ด์ค˜์•ผํ•˜๋Š”๋ฐ์š”.

 

์ด๊ฒƒ์€ ๋ฐ”๋กœ AppleLogin๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ์•„๋ž˜์— ๋œจ๋Š” ์•Œ๋ฆผ์ฐฝ๊ฐ™์€๊ฑฐ ๋ณด์…จ์ฃ ? ๋ฐ”๋กœ ๊ทธ๊ฑฐ์ž…๋‹ˆ๋‹ค.

 

์ด ์•Œ๋ฆผ์ฐฝ์˜ Anchor๋ฅผ ํ˜„์žฌ view์˜ window๋กœ ์„ค์ •ํ•ด์ค์‹œ๋‹ค.

์ž ์ด์ œ ๋”œ๋ฆฌ๊ฒŒ์ดํŠธ๋ฅผ ๋ชจ๋‘ ๋๋งˆ์ณค๋‹ค๋ฉด ๊ทธ ๋‹ค์Œ์œผ๋ก  appleLogin ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ์–ด๋–ค ๊ฒƒ์„ ํ•ด์•ผํ• ์ง€ ๊ตฌํ˜„ํ•ด์ค˜์•ผํ•˜๊ฒ ์ฃ ?

 

appleLoginButton์— addTarget์„ ๋‹ฌ์•„์ฃผ๊ณ  @objc๋ฉ”์†Œ๋“œ๋กœ appleLogInButtonTapped()์„ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.

 

๊ฐ„๋‹จํ•˜๊ฒŒ ์„ค๋ช…๋“œ๋ฆฌ๋ฉด addTarget์€ ์ด ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ์„ค์ •ํ•œ #selector(@objc ๋ฉ”์†Œ๋“œ)๋ฅผ ์‹คํ–‰์‹œ์ผœ์ค˜๋ผ๊ณ  ์ดํ•ดํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค!

 

appleLoginButtonTapped() ์ฆ‰ appleLogin๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ์„ค์ •ํ•ด์ค˜์•ผ ํ•  ๊ฒŒ ๋ช‡๊ฐ€์ง€ ์žˆ์–ด์š”

 

์ฒซ๋ฒˆ์งธ๋กœ authorizationProvider๋ฅผ ๋งŒ๋“ค์–ด์„œ ์š”์ฒญ์„ ํ•ด์•ผํ•ด์š”.

 

์›ํ•˜๋Š” ์ •๋ณด๋„ ๊ฐ™์ด ๋„ฃ์–ด์ค์‹œ๋‹ค. (email์ด๋‚˜ name ๋“ฑ)

 

๊ทธ ๋‹ค์Œ์œผ๋กœ authorizationController๋ฅผ ๋งŒ๋“ค์–ด์ค€๋’ค delegate๋ฅผ ํ˜„์žฌ ViewController๋กœ ํ•ด์ฃผ๊ณ  ์•„๊นŒ ๋งŒ๋“ค์–ด์ค€

 

presentationContextProvider ๋”œ๋ฆฌ๊ฒŒ์ดํŠธ ๋˜ํ•œ ํ˜„์žฌ ViewController๋กœ ์„ค์ •ํ•ด์ค€ ๋’ค performRequests()๋ฅผ ํ•ด์ค๋‹ˆ๋‹ค.

 

GIF


 

๋ชจ๋“  ์„ค์ •์ด ๋๋‚˜๊ณ  ์‹คํ–‰์‹œ์ผœ์ฃผ๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ์• ํ”Œ๋กœ๊ทธ์ธ์ด ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™๋˜๋Š”๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 

์ด๋ฉ”์ผ๋„ ์ •์ƒ์ ์œผ๋กœ ์ถœ๋ ฅ๋˜๋Š”๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

Source Code


 

fomagran/AppleLoginExample

์• ํ”Œ๋กœ๊ทธ์ธ๊ตฌํ˜„. Contribute to fomagran/AppleLoginExample development by creating an account on GitHub.

github.com

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€