카카오 로그인 플랫폼 스킴 설정으로 실기기 인증 완성
목차
카카오 로그인 연동의 마지막 퍼즐 조각을 맞췄다. KakaoSdk.init 호출과 플랫폼별 스킴 등록까지 완성해서 드디어 실기기에서 실제 카카오 로그인 플로우가 동작하기 시작했음.
왜 이 작업이 늦어졌나
소셜 로그인 연동은 "API 키 하나 넣으면 되는 거 아냐?"라는 인식이 팀 내에 은근히 있었다. 실제로 해보면 전혀 아니다. 특히 카카오 SDK 같은 경우 Flutter 앱 레이어 + 네이티브 플랫폼 설정 + 카카오 개발자 콘솔 등록 이 세 가지가 동시에 맞아야 동작한다. 어느 하나라도 빠지면 침묵하거나, 애매한 에러 코드를 뱉거나, 아예 카카오톡 앱으로 전환조차 안 된다.
이번에 손댄 파일이 딱 세 개다.
| 파일 | 역할 | 이번 변경 의미 |
|---|---|---|
AndroidManifest.xml |
Android 앱 컴포넌트/인텐트 선언 | 카카오 리다이렉트 스킴 인텐트 필터 등록 |
Info.plist |
iOS 앱 메타데이터 | LSApplicationQueriesSchemes + URL Schemes 등록 |
main.dart |
Flutter 앱 진입점 | KakaoSdk.init(nativeAppKey: ...) 호출 |
세 파일이 각각 다른 레이어를 담당하는데, 하나라도 누락되면 "왜 안 되지?"를 반복하며 디버깅 시간을 날리게 된다.
플랫폼 스킴이 왜 중요한가
카카오 로그인의 흐름을 간단히 그리면 이렇다.
앱 → 카카오톡(or 웹뷰) → 인증 완료 → 딥링크로 앱 복귀 → 토큰 수신
여기서 "딥링크로 앱 복귀" 단계가 바로 플랫폼 스킴 등록이 필요한 지점이다. iOS는 Info.plist에 kakao{앱키} 형태의 URL Scheme을 등록해야 하고, Android는 AndroidManifest.xml에 해당 스킴을 받을 인텐트 필터를 달아줘야 한다. 이걸 안 하면 카카오 인증은 완료됐는데 앱으로 돌아오지 못하는 황당한 상황이 생긴다.
<!-- AndroidManifest.xml 핵심 패턴 -->
<activity android:name="com.kakao.sdk.flutter.AuthCodeCustomTabsActivity" ...>
<intent-filter android:label="flutter_web_auth">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="kakao{NATIVE_APP_KEY}" android:host="oauth"/>
</intent-filter>
</activity>
<!-- Info.plist 핵심 패턴 -->
<key>LSApplicationQueriesSchemes</key>
<array>
<string>kakaokompassauth</string>
<string>storeservices</string>
</array>
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>kakao{NATIVE_APP_KEY}</string>
</array>
</dict>
</array>
그리고 main.dart에서 runApp 직전에 SDK를 초기화하는 것이 공식 가이드의 권장 순서다.
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await KakaoSdk.init(nativeAppKey: '...');
runApp(const MyApp());
}
ensureInitialized() 없이 KakaoSdk.init을 비동기로 호출하면 플랫폼 채널이 준비되지 않아 런타임 에러가 날 수 있다. 이 순서는 꼭 지켜야 한다.
팀 관점 회고
이 작업을 내가 직접 끝까지 붙잡고 완성한 이유가 있다. 플랫폼별 네이티브 설정은 Flutter 경험이 짧은 팀원에게 넘기면 "왜 이 파일을 건드려야 하는지"부터 설명해야 하는 컨텍스트 비용이 생긴다. 이번엔 내가 먼저 완성본을 만들고, PR에 주석과 함께 각 설정이 왜 필요한지를 설명해두는 방식을 택했음.
- Android/iOS 네이티브 설정이 얽힌 작업은 완성 후 문서화까지 세트로 처리
- 스킴 값은 환경변수 또는 별도 설정 파일로 분리해 하드코딩 방지
- 신규 팀원 온보딩 때 "소셜 로그인 연동 체크리스트"로 재활용 가능한 형태로 남겨둠
소셜 로그인 하나가 "간단한 작업"처럼 보여도, 플랫폼 설정이 얽힌 순간 디버깅 사이클이 길어지기 쉽다. 처음부터 세 레이어를 한 번에 정확히 맞추는 것이 훨씬 낫다는 걸 이번에 다시 확인했다.
끝.
🛒 이 글과 어울리는 추천 상품
*위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.
댓글 0
첫 댓글 달아줘.