iOS
[iOS] SNS 로그인 연동 개발
[iOS] SNS 로그인 연동 개발
요구사항
- Facebook 로그인
- Google 로그인
- Apple 로그인
- Kakao 로그인
Third party 설치
# https://firebase.google.com/docs/auth/ios/google-signin?hl=ko
def googleAuth
pod 'Firebase/Auth'
pod 'GoogleSignIn'
end
# https://developers.kakao.com/docs/latest/ko/getting-started/sdk-ios
def kakaoAuth
pod 'KakaoSDKCommon' # 필수 요소를 담은 공통 모듈
pod 'KakaoSDKAuth' # 사용자 인증
pod 'KakaoSDKUser' # 카카오 로그인, 사용자 관리
end
# https://developers.facebook.com/docs/facebook-login/ios/?sdk=cocoapods
def facebookAuth
pod 'FBSDKLoginKit'
end
프로젝트 설정
- 프로젝트에 third party 로 부터 발급받은 id 를 적용하고 SDK를 초기화합니다.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil) -> Bool
-
Info.plist에 LSApplicationQueriesSchemes 을 등록합니다.
- AppDelegate 의 openURL 을 등록합니다.
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool
- 로그인을 구현하고 accessToken 을 확인합니다.
로그인 구현
GoogleLogIn
Apple 플랫폼에서 Google 로그인을 사용하여 인증 Google Sign-In for iOS
import GoogleSignIn
import Firebase
let clientID = FirebaseApp.app()?.options.clientID
// Create Google Sign In configuration object.
let config = GIDConfiguration(clientID: clientID)
GIDSignIn.sharedInstance.signIn(with: config, presenting: presenting) { user, error in
if let error = error {
// Error
return
}
guard
let authentication = user?.authentication,
let idToken = authentication.idToken
else {
// Error
return
}
// 성공
}
AppleLogIn
import AuthenticationServices
@available(iOS 13.0, *)
let appleIDProvider = ASAuthorizationAppleIDProvider()
let request = appleIDProvider.createRequest()
request.requestedScopes = [.email]
let authorizationController = ASAuthorizationController(authorizationRequests: [request])
authorizationController.delegate = self
authorizationController.presentationContextProvider = self
authorizationController.performRequests()
@available(iOS 13.0, *)
extension AppleLogIn: ASAuthorizationControllerDelegate {
/// - Tag: did_complete_authorization
@available(iOS 13.0, *)
func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {
switch authorization.credential {
case let appleIDCredential as ASAuthorizationAppleIDCredential:
if let identityToken = appleIDCredential.identityToken,
let appleIdToken = String(data: identityToken, encoding: .utf8) {
// 성공
}
default:
// Error
}
}
/// - Tag: did_complete_error
@available(iOS 13.0, *)
func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {
// Cencel
}
}
@available(iOS 13.0, *)
extension AppleLogIn: ASAuthorizationControllerPresentationContextProviding {
/// - Tag: provide_presentation_anchor
@available(iOS 13.0, *)
func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {
return UIApplication.shared.keyWindow!
}
}
KakaoLogIn
import KakaoSDKUser
if UserApi.isKakaoTalkLoginAvailable() {
UserApi.shared.loginWithKakaoTalk { (oauthToken, error) in
if let error = error {
// Error
} else if let oauthToken = oauthToken {
// 성공
}
}
} else {
UserApi.shared.loginWithKakaoAccount(prompts: [.Login]) { (oauthToken, error) in
if let error = error
// Error
} else if let oauthToken = oauthToken {
// 성공
}
}
}
FacebookLogIn
iOS용 Facebook SDK 시작하기 iOS용 Facebook 로그인 - 빠른 시작
import FBSDKLoginKit
let loginManager = LoginManager()
loginManager.logIn(permissions: ["email"], from: self.target) { result, error in
// Process result or error
if let error = error {
// Error
} else if let result = result {
if result.isCancelled {
// Cancel
} else if let token = result.token {
// 성공
}
}
}
댓글남기기