본문 바로가기
개발/swift

[iOS/Swift] 페이스북 아이디로 로그인 하기

by 꼬마상어 2017. 5. 17.
반응형

* 페이스북 개발자 사이트 [https://developers.facebook.com/docs/facebook-login/ios/] 참고!


히이 페이스북도 어렵다데스..  stackoverflow에는 죄다 영어로 쏼라쏼라 


여러시간 삽질하다가 이것도 잊어먹을까봐 포스팅 고고고!!


1. 일단 Facebook SDK를 설치한다.

다행이도 이것은 swift 버전이 존재한다!!  할렐루야~~

일단 Podfile에  sdk를 추가하고 pod install 한다!


target 'AppName' do

pod 'FacebookCore'

pod 'FacebookLogin'

pod 'FacebookShare'

end


post_install do |installer|

installer.pods_project.targets.each do |target|

target.build_configurations.each do |config|

config.build_settings['SWIFT_VERSION'] = '3.0'

end

end

end


2. 그리고 info.plist 파일을 수정한다!

<key>CFBundleURLTypes</key>

<array>

<dict>

<key>CFBundleURLSchemes</key> // 여기는 url scheme을 입력하는 부분!

<array>

<string>fb + 앱아이디 </string>

</array>

</dict>

</array>

<key>FacebookAppID</key>

<string>앱아이디</string>

<key>FacebookDisplayName</key>

<string>표시될 이름</string>

<key>LSApplicationQueriesSchemes</key>

<array>

<string>fbapi</string>

<string>fb-messenger-api</string>

<string>fbauth2</string>

<string>fbshareextension</string>

</array>



info.plist 파일을 마우스 오른쪽 버튼을 클릭하여 소스코드로 보기 하여 </dict> 바로 위에 저 코드를 넣는다

이때, 저기 파란색으로 표시된 부분에는 facebook에 앱을 등록후 받은 앱아이디를 입력하고, 표시될 이름은 앱 이름을 입력해준다!


아 그리고 하단에 LSApplicationQueriesSchemes  부분에는 최신버전으로 Sdk를 받았다면 따로 추가해야 될 부분이 없다!

( 삽질하다가 sdk버전이 3.x.x버전일 경우에는 추가로 입력해 주어야 하는 부분이 있다는 것을 발견했다..힝 삽질햇어 )


3. Appdelegate 설정하기!


import FacebookCore

import FacebookLogin


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

SDKApplicationDelegate.shared.application(application, didFinishLaunchingWithOptions: launchOptions)

return true

}


func applicationDidBecomeActive(_ application: UIApplication) {

AppEventsLogger.activate(application)

}



func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {

guard let scheme = url.scheme else {

return false

}


       if scheme.hasPrefix("fb\(SDKSettings.appId)") {

return SDKApplicationDelegate.shared.application(app, open: url, options: options)

}

return false

}


이것을 코드에 추가한다!

이부분은 페이스북 어플이 깔려있을 경우 페이스북 앱으로 native하게 로그인 후 개발중인 앱으로 진입햇을 경우 scheme을 통해 구분하는 부분이다!


4. 버튼에 이벤트 연결해주기!

기존에 페이스북에서 제공하는 로그인 버튼을 이용할 수도 있고, custom해서 사용할 수도 있다!



@IBAction private func onBtnFacebookLoginDidTouch(_ sender: UIButton) {

/* Facebook SDK 사용합니다. */

let facebookManager = LoginManager.init()

facebookManager.loginBehavior = .native // .web, .brower, .systemAccount

facebookManager.logIn([ReadPermission.email, ReadPermission.publicProfile], viewController: UIApplication.shared.keyWindow?.rootViewController) {

(result) in

switch result {

case .failed(let error):

print(error)

case .cancelled:

/* 사용자에 의해 취소됨 */

case .success(let grantedPermissions, _, _):

if grantedPermissions.contains(Permission(name: "email")) && grantedPermissions.contains(Permission(name: "public_profile")) {

GraphRequest(graphPath: "me",

            parameters: ["fields": "id, email"]).start { (response, results) -> Void in

switch results {

case .failed:

case .success(let response):

guard let id = response.dictionaryValue?["id"] as? String, let email = response.dictionaryValue?["email"] as? String else {

return

}

                                                                               // 사용자 정보 조회 성공!

}

}

}

}

}

}



이런식으로 로그인 후, 앱에서  AccessToken으로 사용자의 정보도 조회할 수 있다!


여기서 제일 삽질했던 부분은 viewcontoller부분인데..

facebookManager.loginBehavior = .web이었을 경우에는 정상적으로 작동되었는데,

페이스북 앱이 깔려잇을 경우에 깔려있는 앱에서 로그인하는 부분이 안됬다 ㅜㅜ 

사파리 웹에서 아무것도 보여주지 않았어.. blank ..


페이스북 앱이 있을 경우에 페이스북 앱을 열도록 하고 싶다면 facebookManager.loginBehavior = .native로 하고,

viewController: UIApplication.shared.keyWindow?.rootViewController  로 설정한다..

뷰 컨트롤러를 self로 했더니 빈페이지만 표시됬다 제길 ㅜㅜ


이걸로 끝!! 







반응형

댓글