Naver Developers [https://developers.naver.com] 참고하여 로그인 연동하기
1. 일단 iOS용 네이버 라이브러리를 다운받는다.
폴더를 하나 생성하여 다 넣어버린다.
나의 경우에는 아래처럼 넣어버렸다.
2. 그리고 Bridging-Header 를 만든다.
Naver SDK는 현재 오브젝티브 씨 기반으로 되어있는데,
내가 사용하는 언어는 Swift이기때문에.. 한 프로젝트 내에서 오브젝티브 씨와 Swift를 함께 사용하기 위해 만드는 파일이다.
이 파일은 오브젝티브씨로 된 파일을 스위프트로 변형(?)하여 스위프트 파일 내에서 사용할 수 있다.
브릿징 헤더 만드는 법은 다른 블로그에도 친절히 설명되어있으니 ! 참고하시길!
http://seorenn.blogspot.kr/2014/07/swift-objective-c.html
그리고 브릿징 헤더 내의 내용은 이렇다.
#ifndef HarlequinIOS_Bridge_Header_h
#define HarlequinIOS_Bridge_Header_h
#import "NaverThirdPartyConstantsForApp.h"
#import "NaverThirdPartyLoginConnection.h"
#import "NLoginThirdPartyOAuth20InAppBrowserViewController.h"
#endif
3. AppDelegate에서 설정
위까지 다 잘따라왔다면 Appdelegate에서 import를 해보자
import FacebookCore // 페이스북 연동관련 코어 라이브러리
import FacebookLogin // 페이스북 로그인 관련 라이브러리
cmd + b를 눌러 빌드를 하고 Success가 되었다면 이제 Swift 파일 내에서 오브젝티브씨로 된 파일을 사용할수있다!
그것도 스위프트 문법으로!!
이제 AppDelegate내에서 설정을 해주자
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
/* 네이버 */
let naverConnection = NaverThirdPartyLoginConnection.getSharedInstance()
naverConnection?.isNaverAppOauthEnable = true
naverConnection?.isInAppOauthEnable = true
naverConnection?.setOnlyPortraitSupportInIphone(true)
naverConnection?.appName = Bundle.main.infoDictionary![kCFBundleNameKey as String] as! String // 앱이름
naverConnection?.serviceUrlScheme = // 콜백을 받을 url scheme
naverConnection?.consumerKey = // 애플리케이션에서 사용하는 클라이언트 아이디
naverConnection?.consumerSecret = // 애플리케이션에서 사용하는 클라이언트 시크릿
}
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
guard let scheme = url.scheme else {
return false
}
if scheme == [url scheme] {
let result = NaverThirdPartyLoginConnection.getSharedInstance().receiveAccessToken(url)
if result == CANCELBYUSER {
// 여러 응답에 관한 처리를 해준다.
}
return true
}
return false
}
주석으로 처리해 둔 곳은 네이버에 앱을 등록할때 입력하는 값들이다!
아! 앱을 등록할때 url Scheme을 받기 위해 앱스토어 주소를 입력해야되는데, 이때 출시가 안된 앱일 경우에는
아이튠즈커넥트를 들어가서 앱 아이디를 받아 주소를 생성하면 된다.
https://itunes.apple.com/app/id + [AppleID] + ?mt=8
이렇게 주소를 알수있다!!
4. info.plist 업데이트!
이런식으로 추가 해주어야 한다! 안하면 에러남 ㅜㅜ
*** 201717.5.17 추가 수정 !!***
네이버 앱을 설치 했을 경우 앱을 통해서 로그인을 하는데, 이때 로그인 성공 후 네이버 메인 홈으로만 이동되고 기존 앱으로 돌아오지 않았다..
application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool
appdelegate의 위의 함수도 호출되지 않았다.. 힝
한 6시간 삽질후에 알았는데..
info.plist의 url type을 설정해 주지 않았기 때문이다..
이런식으로 앱 등록할때 입력했던 url Scheme을 추가해 주어야 한다.. 나는 멍청이었다 히이이우ㅜ
5. 해당 버튼에 이벤트 넣어주기!
해당 뷰 컨트롤러에 import와 델리게이트 설정을 해준다.
import FacebookCore
import FacebookLogin
class LoginMainVC: UIViewController, NaverThirdPartyLoginConnectionDelegate {
이제부터는 쉽다.
@IBAction private func onBtnNaverLoginDidTouch(_ sender: UIButton) {
/* Naver SDK 사용합니다. */
let naverConnection = NaverThirdPartyLoginConnection.getSharedInstance()
naverConnection?.delegate = self
naverConnection?.requestThirdPartyLogin()
}
func oauth20ConnectionDidFinishRequestACTokenWithAuthCode() {
// 로그인이 성공했을 경우 호출
}
func oauth20Connection(_ oauthConnection: NaverThirdPartyLoginConnection!, didFailWithError error: Error!) {
/* 로그인 실패시에 호출되며 실패 이유와 메시지 확인 가능합니다. */
}
func oauth20ConnectionDidOpenInAppBrowser(forOAuth request: URLRequest!) {
// 네이버 앱이 설치되어있지 않은 경우에 인앱 브라우저로 열리는데 이때 호출되는 함수
let naverInappBrower = NLoginThirdPartyOAuth20InAppBrowserViewController(request: request)
naverInappBrower?.modalPresentationStyle = .overFullScreen
self.present(naverInappBrower!, animated: true, completion: nil)
}
func oauth20ConnectionDidFinishRequestACTokenWithRefreshToken() {
// 이미 로그인이 되어있는 경우 access 토큰을 업데이트 하는 경우
}
func oauth20ConnectionDidFinishDeleteToken() {
// 로그아웃이나 토큰이 삭제되는 경우
}
6. 네이버 회원 정보 조회를 원할 경우
private func naverSDKDidLoginSuccess() {
/* 네이버 회원 정보 조회 */
let naverConnection = NaverThirdPartyLoginConnection.getSharedInstance()
guard let token = naverConnection!.accessToken else {
return
}
var header = [String: String]()
header["Authorization"] = "Bearer \(token)"
// alamofire를 응용하여 만든 struct이다. 아마 비슷한 방법으로 넘기면 될것이다.
ApiRequest.request(
"https://openapi.naver.com/v1/nid/me",
method: .get,
headers: header,
successHandler: {
apiResponse in
guard let code = apiResponse.responseJSON?["resultcode"] as? String,
code == "00" else {
return
}
guard let json = apiResponse.responseJSON?["response"] as? [String: String],
let email = json["email"],
let id = json["id"] else {
return
}
// 네이버로 로그인 성공!
},
failureHandler: {
apiResponse in
print("\(#function) is Fail")
})
}
히이,, 까먹을까봐 올린당,,
'개발 > swift' 카테고리의 다른 글
[iOS/Swift] 파일, 폴더 용량 계산하기 (0) | 2017.05.25 |
---|---|
[iOS/Swift] 페이스북 아이디로 로그인 하기 (1) | 2017.05.17 |
UILabel 안에 아이콘 넣기 (0) | 2016.11.18 |
String의 부분 속성 바꾸기 : NSMutableAttribueString (0) | 2016.10.24 |
버튼 이벤트 다른 컨트롤러의 func 불러오기 (0) | 2016.10.21 |
댓글