๐Ÿ‘ทโ€โ™€๏ธ login tutorial using Kakao iOS SDK

Overview

KakaoLoginTutorial-iOS

๐Ÿ‘ทโ€โ™€๏ธ login tutorial using Kakao iOS SDK

๋ชฉ์ฐจ

๋””์ž์ธ ๊ฐ€์ด๋“œ

์• ํ”Œ ๋กœ๊ทธ์ธ๊ณผ ๋™์ผํ•˜๊ฒŒ ์นด์นด์˜ค๋„ ์—ญ์‹œ ๋””์ž์ธ ๊ฐ€์ด๋“œ๊ฐ€ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ PNG ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ๋‹ค.

Kakao Developers design-guide

๊ทธ๋Ÿฌ๋ฉด ๋ณธ๊ฒฉ์ ์œผ๋กœ ์‹œ์ž‘ํ•˜๊ธฐ์ „์— ์„ค์ •๋‹จ๊ณ„๋ฅผ ์•Œ์•„๋ณด์ž. ์•„๋ž˜์˜ ๋‚ด์šฉ๋“ค์€ ์นด์นด์˜ค ๊ฐœ๋ฐœ์ž๋ฌธ์„œ๋ฅผ ์š”์•ฝ + ์‹ค์Šต์ด๋‹ค.

์„ค์ •๋‹จ๊ณ„

1๏ธโƒฃ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋“ฑ๋ก

์นด์นด์˜ค API๋Š” ๊ฐœ๋ฐœ์ž ์›น์‚ฌ์ดํŠธ์— ๋“ฑ๋ก๋œ ๊ฐ๊ฐ์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(์ดํ•˜ ์•ฑ) ์ •๋ณด ๊ธฐ๋ฐ˜์œผ๋กœ ๋™์ž‘ํ•˜๋ฏ€๋กœ, ์นด์นด์˜ค API๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด ๊ฐœ๋ฐœ์ž ์›น์‚ฌ์ดํŠธ์— ์•ฑ์„ ๋“ฑ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์•ฑ ๋งŒ๋“ค๊ธฐ

์นด์นด์˜ค API ์‚ฌ์šฉ์„ ์œ„ํ•ด ๊ฐœ๋ฐœ์ž ์›น์‚ฌ์ดํŠธ์—์„œ ์•ฑ์„ ๋งŒ๋“ค๊ณ , ํ•ด๋‹น ์•ฑ์— ์„œ๋น„์Šค ์ด๋ฆ„๊ณผ ํšŒ์‚ฌ๋ช…, ์•„์ด์ฝ˜ ๋“ฑ ์ •๋ณด๋ฅผ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฑ ์ •๋ณด๋Š” ์„œ๋น„์Šค ์ด๋ฆ„, ์ œ3์ž ์ •๋ณด์ œ๊ณต๋™์˜ ๋“ฑ ๋ฒ•์ ์ธ ์‚ฌํ•ญ๊ณผ๋„ ๊ด€๋ จ์ด ์žˆ์œผ๋ฏ€๋กœ ์‹ค์ œ ์„œ๋น„์Šค์™€ ๊ฐ™์€ ๋‚ด์šฉ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ์ž ์›น์‚ฌ์ดํŠธ์—์„œ ๋กœ๊ทธ์ธํ•œ ํ›„, [๋‚ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜] > [์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ถ”๊ฐ€ํ•˜๊ธฐ]๋ฅผ ๋ˆŒ๋Ÿฌ ์•ฑ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์นด์นด์˜ค๊ณ„์ • ๋กœ๊ทธ์ธ

3

ํ‚ค ๊ฐ’ ํ™•์ธ

์•ฑ์„ ์ƒ์„ฑํ•˜๋ฉด ํ”Œ๋žซํผ๋ณ„ ์•ฑ ํ‚ค(App Key)๊ฐ€ ๋ฐœ๊ธ‰๋ฉ๋‹ˆ๋‹ค.

Kakao SDK for JavaScript(์ดํ•˜ JavaScript SDK)์—๋Š” JavaScript ํ‚ค, iOS์™€ Android์—๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ ํ‚ค, HTTP ์š”์ฒญ์ด๋‚˜ ์„œ๋ฒ„ ๊ธฐ๋Šฅ ๊ตฌํ˜„์—๋Š” REST API ํ‚ค๋ฅผ ๊ฐ๊ฐ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์•ฑ ํ‚ค์™€ ํ•จ๊ป˜ ์–ด๋“œ๋ฏผ ํ‚ค(Admin Key)๋„ ํ•จ๊ป˜ ๋ฐœ๊ธ‰๋ฉ๋‹ˆ๋‹ค. ์–ด๋“œ๋ฏผ ํ‚ค๋Š” ์‚ฌ์šฉ์ž ๋ชฉ๋ก ๊ฐ€์ ธ์˜ค๊ธฐ์™€ ๊ฐ™์€ ๊ด€๋ฆฌ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•  ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

4

ํ”Œ๋žซํผ ๋“ฑ๋ก

๋“ฑ๋กํ•œ ์•ฑ์—์„œ API๋ฅผ ํ˜ธ์ถœํ•˜๋ ค๋ฉด ์‚ฌ์šฉํ•˜๋ ค๋Š” ํ”Œ๋žซํผ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฐœ๋ฐœ์ž ์›น์‚ฌ์ดํŠธ์— ๋“ฑ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

5

iOS ํ”Œ๋žซํผ์—๋Š” ๋‹ค์Œ ์ •๋ณด๋ฅผ ๋“ฑ๋กํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฒˆ๋“ค ID(Bundle ID): iOS ์•ฑ์˜ ๊ณ ์œ  ๊ฐ’์ž…๋‹ˆ๋‹ค. Xcode์˜ ํ”„๋กœ์ ํŠธ ์ •๋ณด์— ์„ค์ •๋œ Bundle Identifier ๊ฐ’๊ณผ ๋™์ผํ•œ ๊ฐ’์„ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
  • ์•ฑ์Šคํ† ์–ด ID(Appstore ID): ์• ํ”Œ ์•ฑ์Šคํ† ์–ด ๋“ฑ๋ก ์‹œ ๋ฐœ๊ธ‰๋ฐ›์€ ์•ฑ ID์ž…๋‹ˆ๋‹ค.
  • ๋งˆ์ผ“ URL(Market URL): ์‚ฌ์šฉ์ž์˜ ๊ธฐ๊ธฐ์—์„œ ์•ฑ์„ ์‹คํ–‰์‹œํ‚ฌ ๋•Œ, ์‚ฌ์šฉ์ž์˜ ๊ธฐ๊ธฐ์— ํ•ด๋‹น ์•ฑ์ด ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š์„ ๊ฒฝ์šฐ ์ด๋™ํ•  ์•ฑ์Šคํ† ์–ด ์ฃผ์†Œ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๊ฐ€ ์นด์นด์˜ค๋งํฌ API๋‚˜ ์นด์นด์˜คํ†ก ๋ฉ”์‹œ์ง€ API๋ฅผ ํ†ตํ•ด ์ „์†ก๋œ ๋ฉ”์‹œ์ง€์—์„œ ์•ฑ์„ ์‹คํ–‰์‹œํ‚ค๋Š”ย ๋งํฌ๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ, ์•ฑ ์‹คํ–‰์„ ์š”์ฒญํ•œ ์‚ฌ์šฉ์ž์˜ ๊ธฐ๊ธฐ์— ํ•ด๋‹น ์•ฑ์ด ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด ์ง€์ •ํ•œ ๋งˆ์ผ“ URL ์ฃผ์†Œ๋กœ ์ด๋™ํ•˜์—ฌ ํ•ด๋‹น ์•ฑ์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์•ฑ์Šคํ† ์–ด ID๋ฅผ ์ž…๋ ฅํ•˜๋ฉด ๋งˆ์ผ“ URL์ด ์ž๋™์œผ๋กœ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ :

Kakao Developers getting-started/app

2๏ธโƒฃ CocoaPods ํ†ตํ•ด ๋ชจ๋“ˆ ์„ค์น˜

# ์ „์ฒด ์ถ”๊ฐ€
pod 'KakaoSDK'

# or

# ํ•„์š”ํ•œ ๋ชจ๋“ˆ ์ถ”๊ฐ€
pod 'KakaoSDKCommon'  # ํ•„์ˆ˜ ์š”์†Œ๋ฅผ ๋‹ด์€ ๊ณตํ†ต ๋ชจ๋“ˆ
pod 'KakaoSDKAuth'  # ์‚ฌ์šฉ์ž ์ธ์ฆ
pod 'KakaoSDKUser'  # ์นด์นด์˜ค ๋กœ๊ทธ์ธ, ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ
pod 'KakaoSDKTalk'  # ์นœ๊ตฌ, ๋ฉ”์‹œ์ง€(์นด์นด์˜คํ†ก)
pod 'KakaoSDKStory'  # ์นด์นด์˜ค์Šคํ† ๋ฆฌ 
pod 'KakaoSDKLink'  # ๋ฉ”์‹œ์ง€(์นด์นด์˜ค๋งํฌ)
pod 'KakaoSDKTemplate'  # ๋ฉ”์‹œ์ง€ ํ…œํ”Œ๋ฆฟ 
pod 'KakaoSDKNavi'  # ์นด์นด์˜ค๋‚ด๋น„

์ด๋ฟ๋งŒ ์•„๋‹ˆ๋ผ RxSwift ๋„ ์ง€์›ํ•œ๋‹ค.

๋กœ๊ทธ์ธ์„ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ •ํ™•ํžˆ ์–ด๋– ํ•œ ๋ชจ๋“ˆ์ด ํ•„์š”ํ•œ์ง€ ํ—ท๊ฐˆ๋ ค์„œ pod 'KakaoSDKUser' ๋งŒ ์ ์–ด์ฃผ์—ˆ๋”๋‹ˆ ์ด๊ฒƒ ์™ธ์—๋„ ์ž๋™์œผ๋กœ ํ•„์š”ํ•œ ๋ชจ๋“ˆ์ด install ๋˜์—ˆ๋‹ค. ๋‚˜์™€ ๊ฐ™์€ ๊ณ ๋ฏผ์œผ๋กœ ๊ฑฑ์ •ํ•˜์ง€ ์•Š์•„๋„ ๋  ๊ฒƒ ๊ฐ™๋‹ค.

1

3๏ธโƒฃ Info.plist ์„ค์ •

์•ฑ ์‹คํ–‰ ํ—ˆ์šฉ ๋ชฉ๋ก ๋“ฑ๋กํ•˜๊ธฐ

iOS 9.0 ์ด์ƒ์—์„œ iOS SDK๋ฅผ ํ†ตํ•ด ์นด์นด์˜คํ†ก์ด๋‚˜ ์นด์นด์˜ค์Šคํ† ๋ฆฌ, ์นด์นด์˜ค๋‚ด๋น„ ๋“ฑ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(์ดํ•˜ ์•ฑ)์„ ์‹คํ–‰์‹œํ‚ค๋Š” ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜๋ ค๋ฉด Info.plist ํŒŒ์ผ์— ์„ค์ •์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ปค์Šคํ…€ ์Šคํ‚ด ์ •๋ณด๋ฅผ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

(์•ฑ์—์„œ ์นด์นด์˜คํ†ก์•ฑ์„ ์‹คํ–‰์‹œ์ผœ ๋กœ๊ทธ์ธ ํ•˜๋Š” ๊ฒƒ๊ณผ ์›น์„ ํ†ตํ•ด ์นด์นด์˜ค ๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ ํ•˜๋Š” ๊ฒƒ ๋‘˜๋‹ค ํ•ด๋ณผ ๊ฒƒ์ด๋‹ค.)

[Info] > [Custom iOS Target Properties]์— Array ํƒ€์ž… ํ‚ค(Key)์ธ LSApplicationQueriesSchemes๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ , ํ•ด๋‹น ํ‚ค์˜ 'Item'์œผ๋กœ ์ปค์Šคํ…€ ์Šคํ‚ด์— ์‚ฌ์šฉํ•  ๊ฐ’์ธ 'kakaokompassauth', 'kakaolink'๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

5

์œ„ ์„ค์ •์€ Info.plist ๋ฅผ ์ง์ ‘ ์ˆ˜์ •ํ•ด์„œ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

<key>LSApplicationQueriesSchemeskey>
  <array>
      
      <string>kakaokompassauthstring>
      
      <string>kakaolinkstring>
  array>

URL Schemes ์„ค์ •ํ•˜๊ธฐ

์นด์นด์˜ค๊ณ„์ •์„ ํ†ตํ•œ ์ธ์ฆ๊ณผ ์นด์นด์˜คํ†ก ๋ฉ”์‹œ์ง€๋ฅผ ํ†ตํ•œ ์•ฑ ์‹คํ–‰์„ ์œ„ํ•ด URL Schemes ์„ค์ •์„ ํ•ฉ๋‹ˆ๋‹ค.

[Info] > [URL Types] > [URL Schemes] ํ•ญ๋ชฉ์— ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ ํ‚ค(Native App Key)๋ฅผ kakao{NATIVE_APP_KEY} ํ˜•์‹์œผ๋กœ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

(์•ฑ ๋“ฑ๋กํ•  ๋•Œ ๋ฐœ๊ธ‰๋ฐ›์•˜๋˜ ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ ํ‚ค๋ฅผ ๋„ฃ์œผ๋ฉด ๋œ๋‹ค.)

6

4๏ธโƒฃ ์ดˆ๊ธฐํ™”

iOS ์•ฑ์—์„œ iOS SDK๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๋ฉด iOS SDK ํŒŒ์ผ์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์ž„ํฌํŠธ(import)ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•ด iOS SDK๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. AppDelegate.swift์— Kakao SDK๋ฅผ ์ดˆ๊ธฐํ™”ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

import KakaoSDKCommon

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

  ...
  KakaoSDKCommon.initSDK(appKey: "NATIVE_APP_KEY")
  ...

}

์ถœ์ฒ˜ :

Kakao Developers getting-started/sdk-ios

์‹œ์ž‘ํ•˜๊ธฐ ์ „

๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•์œผ๋กœ ๋กœ๊ทธ์ธ์„ ํ•œ๋‹ค๊ณ  ์˜ˆ๊ณ ํ–ˆ๋Š”๋ฐ ์ž์„ธํžˆ ์•Œ์•„๋ณด์ž.

์นด์นด์˜คํ†ก์œผ๋กœ ๋กœ๊ทธ์ธ

์นด์นด์˜คํ†ก์œผ๋กœ ๋กœ๊ทธ์ธํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์นด์นด์˜คํ†ก์— ์—ฐ๊ฒฐ๋œ ์นด์นด์˜ค๊ณ„์ • ๋ฐ ์ธ์ฆ ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์นด์นด์˜ค๊ณ„์ • ์ •๋ณด๋ฅผ ์ง์ ‘ ์ž…๋ ฅํ•˜์ง€ ์•Š์•„๋„ ๊ฐ„ํŽธํ•˜๊ฒŒ ๋กœ๊ทธ์ธํ•  ์ˆ˜ ์žˆ์–ด ๋ณด๋‹ค ๊ถŒ์žฅ๋˜๋Š” ์ธ์ฆ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

๊ธฐ๋ณธ ์›น ๋ธŒ๋ผ์šฐ์ €(Default Browser)๋ฅผ ํ†ตํ•ด ์นด์นด์˜ค๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ

๊ธฐ๋ณธ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ์นด์นด์˜ค๊ณ„์ • ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ๋กœ๊ทธ์ธํ•  ๊ฒฝ์šฐ, ์‚ฌ์šฉ์ž๊ฐ€ ์นด์นด์˜ค๊ณ„์ • ์ •๋ณด๋ฅผ ์ง์ ‘ ์ž…๋ ฅํ•˜๋Š” ๋‹จ๊ณ„๋ฅผ ๊ฑฐ์นฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ๋ฒ•์€ ์‚ฌ์šฉ์ž๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์นด์นด์˜ค๊ณ„์ •์„ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋น„์Šค๋‚˜ ์นด์นด์˜คํ†ก์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋””๋ฐ”์ด์Šค์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๊ฐ ์ธ์ฆ ๋ฐฉ๋ฒ•์˜ ํŠน์ง•๊ณผ ์„œ๋น„์Šค์˜ ์‚ฌ์šฉ์ž ๋กœ๊ทธ์ธ ๋™์„ ์„ ๊ณ ๋ คํ•˜์—ฌ ์–ด๋Š ์ธ์ฆ ๋ฐฉ๋ฒ•์ด ์ ํ•ฉํ•œ์ง€ ํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋‘ ๊ฐ€์ง€ ์ธ์ฆ ๋ฐฉ๋ฒ•์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธ์ฆ ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ํ•„์š”ํ•œ ์„ค์ •์ด๋‚˜ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ์— ์ฐจ์ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

โ—๏ธ ์นด์นด์˜คํ†ก์œผ๋กœ ๋กœ๊ทธ์ธ์„ ์œ„ํ•œ ์„ค์ •

์นด์นด์˜คํ†ก์œผ๋กœ ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ํ•„์ˆ˜ ์„ค์ •์ž…๋‹ˆ๋‹ค.

์นด์นด์˜คํ†ก์œผ๋กœ ๋กœ๊ทธ์ธ์€ ์„œ๋น„์Šค ์•ฑ์—์„œ ์นด์นด์˜คํ†ก์œผ๋กœ ์ด๋™ํ•œ ํ›„, ์‚ฌ์šฉ์ž๊ฐ€ [๋™์˜ํ•˜๊ณ  ๊ณ„์†ํ•˜๊ธฐ] ๋ฒ„ํŠผ ๋˜๋Š” ๋กœ๊ทธ์ธ ์ทจ์†Œ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด ๋‹ค์‹œ ์นด์นด์˜คํ†ก์—์„œ ์„œ๋น„์Šค ์•ฑ์œผ๋กœ ์ด๋™ํ•˜๋Š” ๊ณผ์ •์„ ๊ฑฐ์นฉ๋‹ˆ๋‹ค.

  • SceneDelegate.swift ํŒŒ์ผ์— handleOpenUrl()์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
import KakaoSDKAuth
...

class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    ...
    func scene(_ scene: UIScene, openURLContexts URLContexts: Set) {
        if let url = URLContexts.first?.url {
            if (AuthApi.isKakaoTalkLoginUrl(url)) {
                _ = AuthController.handleOpenUrl(url: url)
            }
        }
    }
    ...
}

์‹œ์ž‘ํ•˜๊ธฐ

  • Main.storyboard

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์Šคํ† ๋ฆฌ๋ณด๋“œ์—์„œ ์‹ค์Šตํ•  ๊ฒƒ์ด๋‹ค.

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2021-08-16 แ„‹แ…ฉแ„’แ…ฎ 3 41 51

๐Ÿ“Œ ์นด์นด์˜คํ†ก์œผ๋กœ ๋กœ๊ทธ์ธ

1๏ธโƒฃ ๊ธฐ๋Šฅ๊ตฌํ˜„

// โœ… ๋ชจ๋“ˆ ์ถ”๊ฐ€
import KakaoSDKUser

// ...

// โœ… ์นด์นด์˜ค๋กœ๊ทธ์ธ ์ด๋ฏธ์ง€์— UITapGestureRecognizer ๋ฅผ ๋“ฑ๋กํ•  ๋•Œ ์‚ฌ์šฉํ•  @objc ๋ฉ”์„œ๋“œ.
// โœ… ์นด์นด์˜คํ†ก์œผ๋กœ ๋กœ๊ทธ์ธ
    @objc
    func loginKakao() {
        print("loginKakao() called.")
        
        // โœ… ์นด์นด์˜คํ†ก ์„ค์น˜ ์—ฌ๋ถ€ ํ™•์ธ
        if (UserApi.isKakaoTalkLoginAvailable()) {
            UserApi.shared.loginWithKakaoTalk {(oauthToken, error) in
                if let error = error {
                    print(error)
                }
                else {
                    print("loginWithKakaoTalk() success.")
                    
                    // โœ… ํšŒ์›๊ฐ€์ž… ์„ฑ๊ณต ์‹œ oauthToken ์ €์žฅ๊ฐ€๋Šฅํ•˜๋‹ค
                    // _ = oauthToken
                    
                    // โœ… ์‚ฌ์šฉ์ž์ •๋ณด๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ๊ฐ€์ ธ์˜ค๋ฉด ํ™”๋ฉด์ „ํ™˜ ํ•œ๋‹ค.
                    self.getUserInfo()
                }
            }
        }
        // โœ… ์นด์นด์˜คํ†ก ๋ฏธ์„ค์น˜
        else {
            print("์นด์นด์˜คํ†ก ๋ฏธ์„ค์น˜")
        }
    }

์นด์นด์˜คํ†ก์ด ์„ค์น˜๋˜์žˆ์ง€ ์•Š์œผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์˜ค๋ฅ˜๋ฅผ ๋ณด์—ฌ์ค€๋‹ค. ํ•ธ๋“œํฐ์— ์—ฐ๊ฒฐํ•ด์„œ ์‹ค์Šตํ•ด์•ผํ•œ๋‹ค.

7

2๏ธโƒฃ ํ•ธ๋“œํฐ์—์„œ ๋นŒ๋“œ

์ฒ˜์Œ์— ์‹œ๋„ํ•˜๋ฉด ์ด๋Ÿฐ ํ™”๋ฉด์ด ๋‚˜์˜ฌํ…๋ฐ Kakao developers ์˜ [๋‚ด ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜] > [์ œํ’ˆ์„ค์ •] > [์นด์นด์˜ค ๋กœ๊ทธ์ธ] ์—์„œ ์นด์นด์˜ค ๋กœ๊ทธ์ธ์„ ํ™œ์„ฑํ™”๋ฅผ ํ•ด์ฃผ์–ด์•ผ๋งŒ ์‹ค์ œ ์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

10

์ด์™€ ๊ฐ™์ด ํ™œ์„ฑํ™”๋ฅผ ํ•ด์ฃผ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋กœ๊ทธ์ธ ํ™”๋ฉด์ด ๋ณด์—ฌ์ง„๋‹ค.

๐Ÿ“Œ ์นด์นด์˜ค๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ

1๏ธโƒฃ ๊ธฐ๋Šฅ๊ตฌํ˜„

// โœ… ๋ชจ๋“ˆ ์ถ”๊ฐ€
import KakaoSDKUser

// ...

// โœ… ์นด์นด์˜ค๋กœ๊ทธ์ธ ์ด๋ฏธ์ง€์— UITapGestureRecognizer ๋ฅผ ๋“ฑ๋กํ•  ๋•Œ ์‚ฌ์šฉํ•  @objc ๋ฉ”์„œ๋“œ.
// โœ… ์นด์นด์˜ค๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ
    @objc
    func loginKakaoAccount() {
        print("loginKakaoAccount() called.")
        
        // โœ… ๊ธฐ๋ณธ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ๊ทธ์ธ ์ง„ํ–‰.
        UserApi.shared.loginWithKakaoAccount {(oauthToken, error) in
            if let error = error {
                print(error)
            }
            else {
                print("loginWithKakaoAccount() success.")
                
                // โœ… ํšŒ์›๊ฐ€์ž… ์„ฑ๊ณต ์‹œ oauthToken ์ €์žฅ
                // _ = oauthToken
                
                // โœ… ์‚ฌ์šฉ์ž์ •๋ณด๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ๊ฐ€์ ธ์˜ค๋ฉด ํ™”๋ฉด์ „ํ™˜ ํ•œ๋‹ค.
                self.getUserInfo()
            }
        }
    }

์นด์นด์˜ค๊ณ„์ •์œผ๋กœ ๋กœ๊ทธ์ธ๋„ ์ž˜๋˜๋Š”์ง€ ํ™•์ธํ•ด๋ณด๊ฒ ๋‹ค.

๐Ÿ“Œ ๋™์˜ ํ•ญ๋ชฉ ์„ค์ •

์ฒ˜์Œ์—๋Š” ๋™์˜ํ•ญ๋ชฉ์ด ํ•˜๋‚˜๋„ ์„ค์ •๋˜์–ด ์žˆ์ง€ ์•Š์€ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฒƒ์€ Kakao Developer ์—์„œ ์„ค์ •๊ฐ€๋Šฅํ•˜๋‹ค.

แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2021-08-16 แ„‹แ…ฉแ„’แ…ฎ 3 09 40

์ด๋ฉ”์ผ ๊ฒฝ์šฐ๋Š” ํ•„์ˆ˜๋™์˜๋ฅผ ๋ฐ›๊ธฐ์œ„ํ•ด์„œ๋Š” ๊ฒ€์ˆ˜๋ฅผ ํ•„์š”ํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‹‰๋„ค์ž„์€ ํ•„์ˆ˜๋™์˜, ์ด๋ฉ”์ผ์€ ์„ ํƒ๋™์˜๋กœ ๋™์˜๋ฅผ ๋ฐ›์•„๋ณด๊ฒ ๋‹ค.

๐Ÿ“Œ ๋กœ๊ทธ์•„์›ƒ & ์—ฐ๊ฒฐ ๋Š๊ธฐ

  • ๋กœ๊ทธ์•„์›ƒ : ๋กœ๊ทธ์•„์›ƒ API๋Š” ํ† ํฐ์„ ์‚ญ์ œํ•˜์—ฌ, ๋” ์ด์ƒ ํ•ด๋‹น ์‚ฌ์šฉ์ž ์ •๋ณด๋กœ ์นด์นด์˜ค API๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.

  • ์—ฐ๊ฒฐ๋Š๊ธฐ : ์—ฐ๊ฒฐ ๋Š๊ธฐ API๋Š” ์นด์นด์˜ค ํ”Œ๋žซํผ ์•ˆ์—์„œ ์•ฑ๊ณผ ์‚ฌ์šฉ์ž ์นด์นด์˜ค๊ณ„์ •์˜ ์—ฐ๊ฒฐ ์ƒํƒœ๋ฅผ ํ•ด์ œํ•ฉ๋‹ˆ๋‹ค.

  • LogoutViewController.swift

import UIKit
import KakaoSDKUser

class LogoutViewController: UIViewController {
    
    // ...
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // ...
    }

    @IBAction func logoutClicked(_ sender: Any) {
        
        // โœ… ๋กœ๊ทธ์•„์›ƒ : ๋กœ๊ทธ์•„์›ƒ์€ API ์š”์ฒญ์˜ ์„ฑ๊ณต ์—ฌ๋ถ€์™€ ๊ด€๊ณ„์—†์ด ํ† ํฐ์„ ์‚ญ์ œ ์ฒ˜๋ฆฌํ•œ๋‹ค๋Š” ์ ์— ์œ ์˜ํ•ฉ๋‹ˆ๋‹ค.
        UserApi.shared.logout {(error) in
            if let error = error {
                print(error)
            }
            else {
                print("logout() success.")
                
                // โœ… ๋กœ๊ทธ์•„์›ƒ ์‹œ ๋ฉ”์ธ์œผ๋กœ ๋ณด๋ƒ„
                self.navigationController?.popViewController(animated: true)
            }
        }
    }
    @IBAction func unlinkClicked(_ sender: Any) {
        
        // โœ… ์—ฐ๊ฒฐ ๋Š๊ธฐ : ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง€๋ฉด ๊ธฐ์กด์˜ ํ† ํฐ์€ ๋” ์ด์ƒ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ, ์—ฐ๊ฒฐ ๋Š๊ธฐ API ์š”์ฒญ ์„ฑ๊ณต ์‹œ ๋กœ๊ทธ์•„์›ƒ ์ฒ˜๋ฆฌ๊ฐ€ ํ•จ๊ป˜ ์ด๋ค„์ ธ ํ† ํฐ์ด ์‚ญ์ œ๋ฉ๋‹ˆ๋‹ค.
        UserApi.shared.unlink {(error) in
            if let error = error {
                print(error)
            }
            else {
                print("unlink() success.")
                
                // โœ… ์—ฐ๊ฒฐ๋Š๊ธฐ ์‹œ ๋ฉ”์ธ์œผ๋กœ ๋ณด๋ƒ„
                self.navigationController?.popViewController(animated: true)
            }
        }
    }
}

extension LogoutViewController {
    // ...
}

๐Ÿ“Œ ์‚ฌ์šฉ์ž ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ

๋‹‰๋„ค์ž„(user.kakaoAccount.profile.nickname)๊ณผ ์ด๋ฉ”์ผ(user.kakaoAccount.email)์„ ๊ฐ€์ ธ์™€ ๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

extension LoginViewController {

// โœ… ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ์„ฑ๊ณต์ ์œผ๋กœ ๊ฐ€์ ธ์˜ค๋ฉด ํ™”๋ฉด์ „ํ™˜ ํ•œ๋‹ค.
    private func getUserInfo() {

        // โœ… ์‚ฌ์šฉ์ž ์ •๋ณด ๊ฐ€์ ธ์˜ค๊ธฐ
        UserApi.shared.me() {(user, error) in
            if let error = error {
                print(error)
            }
            else {
                print("me() success.")
                
                // โœ… ๋‹‰๋„ค์ž„, ์ด๋ฉ”์ผ ์ •๋ณด
                let nickname = user?.kakaoAccount?.profile?.nickname
                let email = user?.kakaoAccount?.email
                
                guard let nextVC = self.storyboard?.instantiateViewController(withIdentifier: "LogoutViewController") as? LogoutViewController else { return }
                
                // โœ… ์‚ฌ์šฉ์ž ์ •๋ณด ๋„˜๊ธฐ๊ธฐ
                nextVC.nickname = nickname
                nextVC.email = email

                // โœ… ํ™”๋ฉด์ „ํ™˜
                self.navigationController?.pushViewController(nextVC, animated: true)
            }
        }
    }
}

๊ฐ ํ•ญ๋ชฉ์˜ ์ž๋ฃŒํ˜• ๋“ฑ์€ ์•„๋ž˜๋ฅผ ์ฐธ๊ณ ํ•ด์„œ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

Kakao Developers

๐Ÿ“Œ ํ† ํฐ ์กด์žฌ ์—ฌ๋ถ€ ํ™•์ธํ•˜๊ธฐ

ํ† ํฐ์˜ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•ด์„œ ์•ฑ ์‹คํ–‰ ์‹œ ํšŒ์›๊ฐ€์ž…์„ ์‹œํ‚ฌ์ง€ ๋ฉ”์ธํ™”๋ฉด์œผ๋กœ ๋ณด๋‚ผ์ง€ ๋ถ„๊ธฐ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋ทฐ๊ฐ€ ๋‹ค ๋ณด์—ฌ์ง„ ํ›„ ํ† ํฐ์„ ๊ฒ€์‚ฌํ•ด์„œ ์œ ํšจ์„ฑ์ด ํ™•์ธ๋˜๋ฉด ๋กœ๊ทธ์ธ๋œ ํ™”๋ฉด์œผ๋กœ ์ „ํ™˜ํ•ด์ฃผ์—ˆ๋‹ค. (AppDelegate.swift ์—์„œ ์•ฑ ์‹คํ–‰ ์‹œ ์ฒซ ํ™”๋ฉด์˜ ๋ถ„๊ธฐ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ•ด์ฃผ์–ด๋„ ๋œ๋‹ค.)
import UIKit
// โœ… ๋ชจ๋“ˆ ์ถ”๊ฐ€
import KakaoSDKUser
import KakaoSDKAuth
import KakaoSDKCommon

class LoginViewController: UIViewController {

// ...

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        
        // โœ… ์œ ํšจํ•œ ํ† ํฐ ๊ฒ€์‚ฌ
        if (AuthApi.hasToken()) {
            UserApi.shared.accessTokenInfo { (_, error) in
                if let error = error {
                    if let sdkError = error as? SdkError, sdkError.isInvalidTokenError() == true  {
                        //๋กœ๊ทธ์ธ ํ•„์š”
                    }
                    else {
                        //๊ธฐํƒ€ ์—๋Ÿฌ
                    }
                }
                else {
                    //ํ† ํฐ ์œ ํšจ์„ฑ ์ฒดํฌ ์„ฑ๊ณต(ํ•„์š” ์‹œ ํ† ํฐ ๊ฐฑ์‹ ๋จ)
                    // โœ… ์‚ฌ์šฉ์ž ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๊ณ  ํ™”๋ฉด์ „ํ™˜์„ ํ•˜๋Š” ์ปค์Šคํ…€ ๋ฉ”์„œ๋“œ
                    self.getUserInfo()
                }
            }
        }
        else {
            //๋กœ๊ทธ์ธ ํ•„์š”
        }
    }
}

์ถœ์ฒ˜ :

Kakao Developers kakaologin/ios

You might also like...
Login screen using Swift language
Login screen using Swift language

Login Screens Design iOS login Screens, with SwiftUI Designs inspired by Project

Simple Login Screen Project using Swift UI.

Simple Login Screen Simple Login Screen Project using Swift UI. Jump to: Prerequisites: Tutorial uploading XCode project on Github Some Xcode Swift UI

Tutorial GraphQL + Node Express + MySQL, and sample for Android / iOS client

GraphQL-tutorial Tutorial for GraphQL + Node Express + MySQL, and sample for Android / iOS client Blog NeoRoman's GraphQL-tutorial (Korean) Materials

TDD-Albums-II is a new hands-on tutorial for iOS engineers learning Test-Driven Development.

TDD-Albums-II Welcome! The TDD-Albums-II tutorial is a sequel to the original TDD-Albums library from 2015. The TDD-Albums library started as a hands-

DEVOTE In this SwiftUI tutorial, we will develop a task manager iOS application with Core Data integration.

DEVOTE In this SwiftUI tutorial, we will develop a task manager iOS application with Core Data integration. This is not a project with a boring user interface. This iOS and iPadOS application provides a personal touch and feel.

SimpleAuth is designed to do the hard work of social account login on iOS

SimpleAuth is designed to do the hard work of social account login on iOS. It has a small set of public APIs backed by a set of "providers"

A simple way to implement Facebook and Google login in your iOS apps.

Simplicity Simplicity is a simple way to implement Facebook and Google login in your iOS apps. Simplicity can be easily extended to support other exte

LoginKit is a quick and easy way to add a Login/Signup UX to your iOS app.
LoginKit is a quick and easy way to add a Login/Signup UX to your iOS app.

LoginKit About LoginKit is a quick and easy way to add Facebook and email Login/Signup UI to your app. If you need to quickly prototype an app, create

Plug-n-Play login system for iOS written in Swift
Plug-n-Play login system for iOS written in Swift

Prounounced Cell-Lee Celyโ€™s goal is to add a login system into your app in under 30 seconds! Overview Requirements Usage API Installation License Over

Px-mobile-sdk-demo-app - PerimeterX Mobile SDK - Demo App
Px-mobile-sdk-demo-app - PerimeterX Mobile SDK - Demo App

About PerimeterX PerimeterX is the leading provider of application security solu

Alter SDK is a cross-platform SDK consisting of a real-time 3D avatar system, facial motion capture, and an Avatar Designer component built from scratch for web3 interoperability and the open metaverse.
Alter SDK is a cross-platform SDK consisting of a real-time 3D avatar system, facial motion capture, and an Avatar Designer component built from scratch for web3 interoperability and the open metaverse.

Alter SDK is a cross-platform SDK consisting of a real-time 3D avatar system, facial motion capture, and an Avatar Designer component built from scratch for web3 interoperability and the open metaverse.

Awesome tool for create tutorial walkthrough or coach tour
Awesome tool for create tutorial walkthrough or coach tour

AwesomeSpotlightView is a nice and simple library for iOS written on Swift 5. It's highly customizable and easy-to-use tool. Works perfectly for tutor

๐Ÿคจ Apple Push Notification service tutorial
๐Ÿคจ Apple Push Notification service tutorial

APNsTutorial-iOS ๐Ÿคจ Apple Push Notification service tutorial ๋‹จ์ˆœํžˆ ์ˆœ์„œ๋ฅผ ๋”ฐ๋ผ์„œ ๊ฐ€๋ฉด ๋  ์ค„ ์•Œ์•˜๋Š”๋ฐ ์•Œ์•„์•ผํ•  ๊ฒƒ๋„ ์žˆ์—ˆ๊ณ  ๊ฒฝ์šฐ์— ๋”ฐ๋ผ์„œ ์š”๊ตฌํ•˜๋Š” ํŒŒ์ผ๋„ ๋‹ฌ๋ž๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ ์ฒœ์ฒœํžˆ ์ฝ์–ด์ฃผ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๋จผ์ € ์–ด๋–ค ์„œ๋ฒ„ ํ™˜๊ฒฝ

This is a sample project that supplements the tutorial written over at my blog on 'Building a music recognization app in SwiftUI with ShazamKit'
This is a sample project that supplements the tutorial written over at my blog on 'Building a music recognization app in SwiftUI with ShazamKit'

Shazam-Kit-Tutorial This is a sample project that supplements the tutorial written over at my blog on 'Building a music recognization app in SwiftUI w

๐ŸฅบPinterest Layout Tutorial
๐ŸฅบPinterest Layout Tutorial

PinterestTutorial-iOS ๐Ÿฅบ Pinterest Layout Tutorial ์ด๋ฏธ์ง€ ํฌ๊ธฐ์— ๋”ฐ๋ผ์„œ ๋™์ ์œผ๋กœ ์…€์˜ ๋ ˆ์ด์•„์›ƒ์„ ์„ค์ •ํ•˜๋Š” ํ•€ํ„ฐ๋ ˆ์ŠคํŠธ ๋ ˆ์ด์•„์›ƒ ๊ตฌํ˜„ํ•ด ๋ณด์•˜๋‹ค. ์™„์„ฑ ์ฝ”๋“œ UICollectionViewDelegateFlowLayout ์˜ ์„œ๋ธŒํด๋ž˜์Šค

๐Ÿ make QRcode and QRcode Reader Tutorial
๐Ÿ make QRcode and QRcode Reader Tutorial

QRCodeReaderTutorial-iOS ๐Ÿ make QRcode and QRcode Reader Tutorial QR์ฝ”๋“œ์™€ ๋ฆฌ๋”๊ธฐ๋ฅผ ๋งŒ๋“œ๋Š” ์˜คํ”ˆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์žˆ์ง€๋งŒ ์ž์ฒด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•ด์„œ ๋งŒ๋“ค์–ด๋ณด๊ธฐ๋กœ ํ–ˆ๋‹ค. ๋ชฉ์ฐจ QR์ฝ”๋“œ ๋งŒ๋“ค๊ธฐ QR์ฝ”๋“œ Reader ๋งŒ๋“ค๊ธฐ

GoodAsOldPhones is the demo app of Swift tutorial on code school.
GoodAsOldPhones is the demo app of Swift tutorial on code school.

GoodAsOldPhones GoodAsOldPhones is the demo app of Swift tutorial on code school. This app demonstates basic use and implementation of tab bar control

Starter Project for YT tutorial
Starter Project for YT tutorial

Hey there Foodee is an app for food lovers build in SwiftUI. The YT tutorials can be found on my channel. Figma and bonus video on my Patreon page. Ab

Coordinators Essential tutorial
Coordinators Essential tutorial

ApplicationCoordinator A lot of developers need to change navigation flow frequently, because it depends on business tasks. And they spend a huge amou

Owner
Hyungyu Kim
๋‚˜๋Š” ํ˜„๊ทœ๋‹ค
Hyungyu Kim
Plug-n-Play login system for iOS written in Swift

Prounounced Cell-Lee Celyโ€™s goal is to add a login system into your app in under 30 seconds! Overview Requirements Usage API Installation License Over

null 164 Nov 15, 2022
Customizable login screen, written in Swift ๐Ÿ”ถ

LFLoginController Customizable login screen, written in Swift Creating Login screens is boring and repetitive. What about implementing and customizing

Awesome Labs 152 Oct 30, 2022
Login-screen-UI - A simple iOS login screen written in Swift 5

This project has been updated to Swift 5 and Xcode 11.2 About This is a simple i

Kushal Shingote 2 Feb 4, 2022
Custom MacBook login screen and pam modules using multipeer connectivity and usb hardware checks with iOS app for sign in.

Custom MacBook login screen and pam modules using multipeer connectivity and usb hardware checks with iOS app for sign in.

null 2 Aug 17, 2022
A tutorial for using Lottie animation with watchOS in SwiftUI

A tutorial for using Lottie animation with watchOS in SwiftUI

Evandro Harrison Hoffmann 7 Sep 19, 2022
ScrumdingerTCA - Appleโ€™s tutorial app recreated using The Composable Architecture

ScrumdingerTCA Appleโ€™s tutorial app recreated using The Composable Architecture

Pat Brown 9 Nov 29, 2022
Basic app to show how to login with Facebook, Google, Twitter. Created for learning purpose :) using Xcode 9 and Swift 4.0

Social Logins iOS Basic app to show how to login with Facebook, Google, Twitter. Created for learning purpose :) using Xcode 9 and Swift 4.0 Note: Bef

Jogendra 12 Nov 4, 2022
An poc to make a login using Auth0 in Swift

Swift-Auth0-poc This app is an poc to make a login using Auth0. If you want to try it yourself here is a small tutorial on how to do it. 1. Configure

Sem de Wilde 1 Jan 21, 2022
SwiftUI-MSALSample - Sample project to login with MSAL using SwiftUI

SwiftUI-MSALSample I could not find a good walkthrough on how to implement MSAL

Rob Evans 10 Nov 7, 2022
Login-screen-using-Swift - Firebase Apple Open Source Development

Firebase Apple Open Source Development This repository contains all Apple platfo

Kushal Shingote 1 Feb 3, 2022