-
iOS swift 네이버 프로필 api 샘플 코드iOS 2018. 7. 10. 18:06반응형
네이버의 경우, 프로필의 정보를 구하기 위해서는 request 를 직접 쏴줘야 합니다.
샘플 코드 java 로 안드로이드는 쉽게 구현 가능하지만, swift의 경우는 직접 리팩토링했습니다.
사용한 라이브러리는 Alamofire 입니다. NSURLSession으로도 비슷하게 가능할 듯.
구현하는 viewcontroller 가 NaverThirdPartyLoginConnectionDelegate를 상속해야 하고,
import NaverThirdPartyLogin
깔아 줍니다.
func oauth20ConnectionDidOpenInAppBrowser(forOAuth request: URLRequest!) {
}
func oauth20ConnectionDidFinishRequestACTokenWithAuthCode() {
verifyNaverLogin()
}
func oauth20ConnectionDidFinishRequestACTokenWithRefreshToken() {
verifyNaverLogin()
}
func oauth20ConnectionDidFinishDeleteToken() {
}
func oauth20Connection(_ oauthConnection: NaverThirdPartyLoginConnection!, didFailWithError error: Error!) {
handleAuthFail(.FAILED_LOGIN)
}
func verifyNaverLogin(_ tryRequest : Bool = false ) {
let naverConnection = NaverThirdPartyLoginConnection.getSharedInstance()
if let _ = naverConnection!.accessToken , let _ = naverConnection!.tokenType {
if naverConnection!.isValidAccessTokenExpireTimeNow(){
// 사용자 프로필 호출 API URL
guard let token = naverConnection!.accessToken else {
return
}
var header = [String: String]()
header["Authorization"] = "Bearer \(token)"
Alamofire.request(URL(string: "https://openapi.naver.com/v1/nid/me")!, method: HTTPMethod.get, parameters: nil, encoding: URLEncoding.default, headers: header)
.responseJSON {response in
switch(response.result){
case .success(let json):
guard response.response?.statusCode == 200 else {
self.handleAuthFail(.FAILED_LOGIN)
return
}
guard let jsonObject = json as? [String:Any] else{
self.handleAuthFail(.FAILED_LOGIN)
return
}
guard jsonObject["resultcode"] as! String == "00" else {
self.handleAuthFail(.FAILED_LOGIN)
return
}
guard let response = jsonObject["response"] as? [String: Any] else {
self.handleAuthFail(.FAILED_LOGIN)
return
}
guard let id = response["id"] as? String else {
self.handleAuthFail(.FAILED_LOGIN)
return
}
self.sendAuthResult(success: true, loginType: LoginType.naver ,id : id)
break
case .failure( _):
self.handleAuthFail(.FAILED_LOGIN)
break
}
}
} else {
// 리프레시가 필요한 경우, 리프레시를 해줍니다.
if (tryRequest == true){
naverConnection?.delegate = self
naverConnection?.requestAccessTokenWithRefreshToken()
}
}
}
}
반응형'iOS' 카테고리의 다른 글
Alamofire를 이용한 api service 설계 (0) 2018.08.12 UICollectionView서 헤더로 다이나믹하게 높이 계산하는 로직 (UITextView) 넣기 (0) 2018.07.25 [swift]WKWebview 스크롤 맨 아래로 정확하게 계산해서 내리기 (0) 2018.07.25 iOS Swift- 카카오링크 샘플코드 (0) 2018.07.10 WkWebview post 방식시 httpbody 씹는 문제 (iOS 10 이하 대응) 해결방안 (0) 2018.07.10