토스 iOS SDK를 위한 모노레포입니다.
토스 iOS SDK를 설치하기 전에 최소 요구 사항을 확인하세요.
- iOS 13.0 이상
- Swift 5.7 이상
Xcode에서 아래 토스 iOS SDK의 레포지토리(Repository) URL를 검색 후 추가하세요.
https://github.com/toss/toss-sdk-ios.git
토스앱을 열 수 있는지 확인할 수 있게 Info.plist
파일에 Array 타입 키(Key)인 LSApplicationQueriesSchemes
를 추가하고, 해당 키의 [Item]으로 "supertoss"
를 추가하세요.
추가하지 않으면 토스앱이 열리지 않아요.
로그인 후 서비스 앱으로 돌아오기 위해, [Info] > [URL Types] > [URL Schemes]
에 toss${APP_KEY}
를 추가하세요.
예를 들어 앱 키가 "AB12CD34EF56GH78"이라면 [URL Schemes]에 "tossAB12CD34EF56GH78"를 입력하세요.
AppDelegate.swift
에 앱 키를 사용해 SDK를 초기화하는 과정이 필요해요.
import TossFoundation
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
...
TossSDK.shared.initSDK(appKey: "${APP_KEY}")
...
}
토스로 로그인을 하기 위한 설정이에요.
사용자가 토스앱에서 [동의하기] 버튼 또는 [닫기] 버튼을 누르면 토스앱에서 서비스앱으로 이동해요.
서비스앱으로 돌아왔을 때 정상적으로 완료하기 위해 AppDelegate.swift
또는 SceneDelegate.swift
파일에 handleOpenUrl(_:)
을 추가하세요.
AppDelegate.swift:
import TossLogin
...
class AppDelegate: UIResponder, UIApplicationDelegate {
...
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
if TossLoginController.shared.isCallbackURL(url) {
return TossLoginController.shared.handleOpenUrl(url)
}
return false
}
...
}
SceneDelegate.swift:
import TossLogin
...
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
...
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
if let url = URLContexts.first?.url, TossLoginController.shared.isCallbackURL(url) {
_ = TossLoginController.shared.handleOpenUrl(url)
}
}
...
}
토스로 로그인을 하기 위해, login(policy:completion:)
을 호출하세요.
isLoginAvailable
변수로 토스앱 실행 가능 여부를 확인할 수 있어요.
사전 설정의
앱 실행 허용 목록 설정
을 하지 않으면 토스앱이 설치되어 있어도, 토스앱을 실행할 수 없어요.
토스앱이 설치되어있지 않아 실행이 불가능하면, moveToBridgePageForNoApp()
를 호출해 앱 설치를 유도하는 웹화면으로 이동할 수 있어요.
guard TossLoginController.shared.isLoginAvailable else {
TossLoginController.shared.moveToBridgePageForNoApp()
return
}
TossLoginController.shared.login(completion: { result in
switch result {
case let .success(authCode):
// authCode 를 통해 accessToken을 발급받으세요.
break
case let .error(error):
print("error code : \(error.code), error message: \(error.message)")
case .cancelled:
// 사용자가 취소했어요.
break
}
})