카카오/네이버 로그인 충돌

카카오 로그인 이슈

Flutter로 앱을 개발하다 보면 잘되는 기능이 갑자기 되지 않거나 디버깅도 잘 안되는 경우가 종종 있다.

이전에 개발할 때 IOS에서 에어브릿지 SDK가 카카오 SDK와 충돌을 일으켜서 카카오 로그인이 되지 않았던 상황이 생겼었다.

이번에도 충돌의 원인은 로그인 중 swift를 통해 Flutter에서 사용하는 SDK로 리턴 되어야 하는 값이 들어오지 않게 되면서 로그인이 성공하지 못하게 되는 이슈이다.

원인만 알면 해결방법은 매우 간단하다.

해결 방법은 swift 코드에서 원하는 SDK가 수신할 수 있도록 바로 리턴을 보내주면 된다.

AppDelegate.swift

먼저 swift 코드 상단에 라이브러리를 import해준다.

import NaverThirdPartyLogin

swift 코드에 보면 flutter쪽으로 데이터를 리턴 보내는 기본 코드가 작성되어 있다.

이 부분에서 해당 SDK가 원하는 타입으로 리턴을 보내면 된다.

이전에 작성한 글에서는 에어브릿지와 카카오 간의 딥링크 문제로 kakao prefix를 분기 처리하였지만 네이버와 카카오만 사용하는 경우에는 그냥 네이버 서드 파티 라이브러리만 분기해도 된다.

카카오 로그인 작동시 앱을 떠났다가 카카오 동의구성에서 버튼을 클릭하는 순간 딥링크를 통해서 앱을 다시 오픈하고 SDK에 딥링크 값을 전달하는 방식으로 로그인이 진행되다 보니 swift 코드에 카카오 라이브러리를 사용할 필요는 없다.
카카오 SDK 설정 중 IOS > Url Types에 값을 추가하라고 하는 이유가 앞서 설명한 딥링크를 사용하려고 등록을 시켜주는 것이다.

네이버는 작동방식이 조금 다른 것 같다.

  override func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
      if url.absoluteString.hasPrefix("kakao"){
         super.application(app, open:url, options: options)
         return true
      } else if url.absoluteString.contains("thirdPartyLoginResult") {
          NaverThirdPartyLoginConnection.getSharedInstance().application(app, open: url, options: options)
         return true
       } 
     }

Flutter 개발을 하다보면 IOS의 앱 간의 통신 방식이 안드로이드와는 다르게 작동되고 있는 부분이 있다.

이러한 이슈는 안드로이드에는 나오지 않은 이슈이다.

소셜 로그인을 진행하다 보면 안드로이드는 앱 위에 서드파티를 오픈하는데 IOS는 앱을 벗어나서 써드파티가 호출되고 앱으로 다시 돌아오면서 SDK 내부 또는 버튼안에 딥링크를 통해서 통신을 하다보니 발생되는 이슈이다.

다른 기능을 사용하다가도 앱이 에러도 없이 멈추거나 중단되는 경우에는 써드파티가 어떻게 앱으로 데이터를 보내는지를 확인해봐야 할 것이다.

딥링크가 작동되지 않거나 하는 이슈도 비슷한 이슈여서 시간날 때 딥링크에 관한 글도 작성할 예정이다.

profile
Flutter Developer

0개의 댓글