ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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()

                    }

                }

            }

        }



Designed by Tistory.