React Native 네이버 로그인 연동: Expo부터 심사까지
React Native(Expo/Bare)에서 네이버 로그인 붙이는 방법. @react-native-seoul/naver-login 4.x, iOS URL Scheme, Android 설정, 네이버 개발자 센터 앱 등록과 검수 요청까지 실전 정리.
React Native(Expo/Bare)에서 네이버 로그인 붙이는 방법. @react-native-seoul/naver-login 4.x, iOS URL Scheme, Android 설정, 네이버 개발자 센터 앱 등록과 검수 요청까지 실전 정리.
KR 로그인 SDK
네이버 로그인 React Native 연동 실전 가이드. Expo Config Plugin, iOS URL Scheme, Android Proguard, 네이버 개발자 센터 검수 요청까지 한 번에 정리했습니다.
한 줄 답: React Native에서 네이버 로그인은 @react-native-seoul/naver-login 4.x + EAS Build + Config Plugin으로 연동하고, 프로덕션 배포 전 반드시 네이버 개발자 센터 검수를 완료해야 합니다.
Boaz · Product Engineer
네이버 로그인은 카카오만큼 자주 쓰이지만, 공식 문서가 Objective-C 기준이라 React Native에 적용할 때 막히는 부분이 한두 군데가 아닙니다. 특히 iOS에서 네이버 앱이 설치된 경우와 없는 경우 동작이 달라지고, Android는 Release 빌드에서 Proguard 설정을 빠뜨리면 프로덕션에서만 조용히 깨집니다.
Expo에서 네이버 로그인은 카카오와 마찬가지로 EAS Build 또는 Bare Workflow가 필요합니다. Expo Go에서는 동작하지 않습니다.
코드를 건드리기 전에 네이버 개발자 센터에서 애플리케이션을 먼저 등록해야 합니다.
com.yourcompany.yourapp)com.yourcompany.yourapp) + 마켓 URL (선택)여기서 나오는 Client ID가 consumerKey, Client Secret이 consumerSecret입니다. 헷갈리기 쉬운 네이밍이라 한 번은 바꿔 입력해서 인증 실패를 겪습니다.
최신 버전은 4.2.4(2026년 1월 기준)입니다.
yarn add @react-native-seoul/naver-login
Expo 프로젝트라면 app.config.ts에 플러그인을 추가합니다.
import { ExpoConfig, ConfigContext } from 'expo/config';
export default ({ config }: ConfigContext): ExpoConfig => ({
...config,
plugins: [
[
'@react-native-seoul/naver-login',
{
urlScheme: 'naverlogin-yourapp',
},
],
],
});
urlScheme 값은 다른 앱과 겹치지 않도록 앱 패키지명을 변형해서 쓰는 게 좋습니다.
App.tsx 또는 최상위 컴포넌트에서 네이버 로그인을 초기화합니다. 로그인 버튼을 렌더링하기 전에 반드시 호출해야 합니다.
import NaverLogin, { NaverLoginResponse } from '@react-native-seoul/naver-login';
import { useEffect } from 'react';
const NAVER_URL_SCHEME = 'naverlogin-yourapp';
export default function App() {
useEffect(() => {
NaverLogin.initialize({
appName: '내 앱 이름',
consumerKey: process.env.NAVER_CLIENT_ID ?? '',
consumerSecret: process.env.NAVER_CLIENT_SECRET ?? '',
serviceUrlSchemeIOS: NAVER_URL_SCHEME,
disableNaverAppAuthIOS: false,
});
}, []);
const handleLogin = async () => {
const { successResponse, failureResponse }: NaverLoginResponse = await NaverLogin.login();
if (successResponse) {
const profile = await NaverLogin.getProfile(successResponse.accessToken);
console.log('이름:', profile.response.name);
}
};
}
Release 빌드에서 R8 코드 압축을 사용한다면 네이버 SDK 클래스가 난독화되면서 런타임에 ClassNotFoundException이 발생합니다. android/app/proguard-rules.pro에 추가합니다.
-keep public class com.navercorp.nid.** { *; }
개발 중에는 debug 빌드를 사용하니 이 문제가 안 보이다가 Play Store 배포 후 처음 알게 되는 경우가 많습니다. 미리 Release 빌드로 테스트해두세요.
네이버 로그인은 개발 단계에서는 등록한 네이버 계정으로만 테스트가 됩니다. 실제 서비스를 위해서는 검수를 통과해야 합니다.
심사에서 가장 자주 거절되는 이유는 불필요한 개인정보 권한 요청입니다. 서비스에 꼭 필요한 항목만 요청하세요.
| 에러 / 증상 | 원인 | 해결 방법 |
|---|---|---|
| 로그인 후 앱으로 돌아오지 않음 (iOS) | AppDelegate URL 핸들러 미설정 | openURL:options: 핸들러에 NaverThirdPartyLoginConnection 추가 |
The operation couldn't be completed (iOS) |
URL Scheme 불일치 | Info.plist의 CFBundleURLSchemes와 serviceUrlSchemeIOS 값 일치 확인 |
| 프로덕션에서 ClassNotFoundException (Android) | Proguard 설정 누락 | -keep public class com.navercorp.nid.** { *; } 추가 |
| 개발 계정 외 로그인 불가 | 검수 미완료 | 네이버 개발자 센터에서 검수 요청 제출 |
disableNaverAppAuthIOS: false로 설정하면 네이버 앱이 설치된 경우 앱 연동으로, 없으면 웹뷰로 인증합니다. 두 경우 모두 동작하려면 LSApplicationQueriesSchemes에 naversearchapp과 naversearchthirdlogin이 모두 등록되어 있어야 합니다.
네이버 개발자 센터에서 앱을 등록한 계정은 검수 없이도 로그인 테스트가 가능합니다. 팀원 계정으로 테스트하려면 개발자 센터 내 애플리케이션 설정에서 멤버를 추가해야 합니다.
Release 빌드에서 R8 코드 압축으로 네이버 SDK 클래스가 난독화되어 발생하는 ClassNotFoundException입니다. android/app/proguard-rules.pro에 -keep public class com.navercorp.nid.** { *; } 를 추가하세요.
AppDelegate.mm의 application:openURL:options: 메서드에 NaverThirdPartyLoginConnection 핸들러가 없거나, Info.plist의 CFBundleURLSchemes 값과 NaverLogin.initialize()의 serviceUrlSchemeIOS 값이 다를 때 발생합니다. 두 값이 정확히 일치하는지 확인하세요.
가장 흔한 거절 사유는 불필요한 개인정보 권한 요청입니다. 서비스에서 실제로 사용하지 않는 생년월일, 성별, 전화번호 등을 필수로 요청하면 거절됩니다. 이메일과 닉네임만 요청하는 경우 심사 통과율이 높습니다.
React Native + NestJS + Supabase + AI 에이전트 17개. 1회 결제로 끝나는 인디해커 시스템입니다.