React Native cli Google 로그인 연동하기

2024. 7. 24. 18:06·React Native/JavaScript
반응형

Expo가 아닌 React Native cli 환경에서 네이버 구글 로그인을 구현하려고 한다. 

카카오 로그인 또는 네이버 로그인이 필요한 분은 각 링크를 참고해도 좋다. 

 

작업 환경은 iOS ( Macbook )으로 작업했다. 

 

환경 설치 

환경을 통일하면 아무래도 오류가 줄어들 것이기 때문에 시작부터 함께하자. 

공식 사이트의 without Framework에서 내용을 보고 설치하였다. 

npx @react-native-community/cli@latest init [프로젝트명]

 

프로젝트 구성이 끝나면 구글 로그인 라이브러리를 설치한다. 

yarn add @react-native-google-signin/google-signin

 

설치가 끝나면 iOS 환경 설정을 위해서 pod 라이브러리를 설치한다. 

npx pod-install

 

여기까지 진행한다면 프로젝트에 추가 설치할 부분은 없다. 

지금까지의 버전은 다음과 같다. 

"dependencies": {
  "@react-native-google-signin/google-signin": "^12.2.1",
  "react": "18.2.0",
  "react-native": "0.74.2"
},
"devDependencies": {
  "@babel/core": "^7.20.0",
  "@babel/preset-env": "^7.20.0",
  "@babel/runtime": "^7.20.0",
  "@react-native/babel-preset": "0.74.84",
  "@react-native/eslint-config": "0.74.84",
  "@react-native/metro-config": "0.74.84",
  "@react-native/typescript-config": "0.74.84",
  "@types/react": "^18.2.6",
  "@types/react-test-renderer": "^18.0.0",
  "babel-jest": "^29.6.3",
  "eslint": "^8.19.0",
  "jest": "^29.6.3",
  "prettier": "2.8.8",
  "react-test-renderer": "18.2.0",
  "typescript": "5.0.4"
},

 

환경 설정 - iOS

구글 로그인은 iOS 설정을 하면 된다. 

 

1. info.plist 설정

<key>GIDClientID</key>
<string>[구글 클라우드 콘솔 iOS 클라이언트 ID]</string>
<key>CFBundleURLTypes</key>
<array>
	<dict>
		<key>CFBundleURLSchemes</key>
		<array>
			<string>[REVERSED_CLIENT_ID]</string>
		</array>
	</dict>
</array>

 

ios폴더에 프로젝트명으로 작성된 폴더가 있을 것이다. 

여기서 info.plist에 코드를 추가해주면 된다. 

 

여기서 위 정보들은 

구글 클라우드 콘솔의 iOS OAuth의 상세 화면에 있는 클라이언트 ID와 iOS URL 스키마가 해당 정보들이다. 

( [구글 클라우드 콘솔 iOS 클라이언트 ID] = 클라이언트 ID, [REVERSED_CLIENT_ID] = iOS URL 스키마 )

 

2. AppDelegate에 URL 핸들링 로직 추가 

#import <GoogleSignIn/GoogleSignIn.h>

// ...
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options {
  return [GIDSignIn.sharedInstance handleURL:url];
}

 

구글 로그인만 하는 경우에는 따로 작성할 필요가 없지만 우린 카카오, 네이버 등 다양한 로그인 방식을 제공하기 때문에 

AppDelegate 설정을 추가해주었다. 

 

이렇게까지 작업하면 iOS 설정은 끝이다. 

 

환경 설정 - android 

android는 사실 특별하게 할 것은 없다. 하지만 사소한 문제 때문에 오랜시간 삽질을 했기 때문에 공유하려고 한다...

 

1. 패키지 이름 설정 

네이버나 카카오는 패키지 이름이 크게 중요하지 않았다. 하지만 Android OAuth를 만들 때 패키지 이름이 달라지면 로그인 후

사용자의 정보를 제대로 불러오지 못하고 DEVELOPER_ERROR가 발생한다. 

패키지 이름은 android폴더 아래에 있는 app폴더에 있는 bundle.gradle에서 확인할 수 있다. 

bundle.gradle 파일에 있는 namespace가 패키지 이름이다. 

 

2. SHA-1

패키지 이름을 입력하는 곳 바로 아래에 SHA-1를 입력하는 부분이 있다. 

명령어로 간단하게 처리할 수 있는데, 다음과 같이 입력할 수 있다 : 

./gradlew signingReport

 

프로젝트 android 경로에서 위 명령어를 입력하면 짜라락 코드가 나온다. 

거기서 SHA-1을 복사해서 넣어주면 된다. 

 

사용 방법 

원래 사용 방법 안알려줍니다. 너무 잘 나와있거든요. 

하지만 구글 로그인의 경우 실수할 수 있기 때문에 함께 공유할 생각이다. 

 

프로젝트를 실행해서 로그인을 해야하는 곳에서 구글 로그인 설정을 초기화 시켜줘야 하는데, useEffect를 사용하면 된다. 

  useEffect(() => {
    GoogleSignin.configure({
      webClientId:
        '420832022478-td4cevb0r3qq474fgpamonksjanl0u4h.apps.googleusercontent.com',
      iosClientId:
        '420832022478-ej1j8u8n83d6trooa266n0e71g9plcae.apps.googleusercontent.com',
    });
  }, []);

 

좋은 개발자이신 여러분들은 Key는 .env처리를 하실 거라고 생각됩니다. 

여기서 특이사항은 webClientId는 android의 클라이언트 ID가 아니고 Web 애플리케이션의 클라이언트 ID입니다. 

 

즉, Android, iOS 로그인 처리를 위해서는 Android, iOS, Web Application 3개를 만들어야 한다. 

그리고 iOS 환경이 필요없다면 iosClientId는 없어도 전혀 문제가 없다. 

 

 const onGoogleButtonPress = async () => {
    try {
      const userInfo = await GoogleSignin.signIn();

      setUserInfo(userInfo);
    } catch (error) {
      console.error(error);
    }
  };

  const onSignOutButton = async () => {
    try {
      await GoogleSignin.signOut();
      setUserInfo(null); 
    } catch (error) {
      console.error(error);
    }
  };

  const getCurrentUser = async () => {
    const currentUser = await GoogleSignin.getCurrentUser();
    console.log(currentUser);
  };

 

이제 필요에 따라 로그인 시 signIn, 로그아웃 시 signOut, 프로필 정보는 getCurrentUser 함수를 사용해서 구현이 가능하다. 

반응형
저작자표시 비영리 변경금지 (새창열림)

'React Native > JavaScript' 카테고리의 다른 글

React Native cli Apple 로그인 연동하기  (1) 2024.08.03
React Native cli Naver & Kakao 연동하기  (1) 2024.07.20
React Native cli Naver 로그인 연동하기  (2) 2024.07.17
React Native cli Kakao 로그인 연동하기  (2) 2024.07.14
React Native 개발 환경 구성하기  (2) 2024.05.27
'React Native/JavaScript' 카테고리의 다른 글
  • React Native cli Apple 로그인 연동하기
  • React Native cli Naver & Kakao 연동하기
  • React Native cli Naver 로그인 연동하기
  • React Native cli Kakao 로그인 연동하기
잉여개발자
잉여개발자
풀스택 개발자를 목표로 잉여롭게 개발 공부도 하면서 다양한 취미 생활도 즐기고 있는 잉여 개발자입니다.
  • 잉여개발자
    잉여로운 개발일지
    잉여개발자
    • 분류 전체보기 (789)
      • 개발정보 (36)
      • 개발환경 (7)
      • 개발생활 (19)
      • React (141)
        • 이론 (23)
        • 기능 (12)
        • 실험실 (88)
        • 버그 (6)
        • 패스트캠퍼스 (9)
        • Npm (3)
      • React Native (28)
        • 공통 (6)
        • TypeScript (3)
        • JavaScript (18)
        • 버그 (1)
      • Next.js (30)
        • 이론 (13)
        • 실험실 (13)
        • 버그 (3)
      • Web (35)
      • 알고리즘 (202)
        • 풀이 힌트 (39)
      • JavaScript (47)
      • TypeScript (29)
        • 기초 (27)
        • 실험실 (2)
      • Node.js (13)
        • 이론 (0)
        • 기능 (3)
        • 실험실 (9)
        • 버그 (1)
      • 도커 (4)
      • CCNA (22)
        • 이론 (4)
        • 문제 (18)
      • 취미생활 (167)
        • 잉여로운 칵테일 (2)
        • 잉여의 식물키우기 (130)
        • 잉여로운 여행기 (11)
        • 잉여의 제2외국어 (21)
        • 잉여로운 책장 (2)
      • Java (1)
        • Java의 정석 (1)
      • 꿀팁 공유 (3)
  • 태그

    CSS
    ChatGPT
    redux
    Node.js
    CCNA
    덤프
    Docker
    webpack
    식물
    리얼클래스
    바질
    프로그래머스
    영어독학
    next.js
    typescript
    다이소
    리액트
    영어회화
    네트워크
    네이버 부스트캠프
    react
    타일러영어
    알고리즘
    바질 키우기
    자바스크립트
    타입스크립트
    ReactNative
    리얼학습일기
    javascript
    Babel
  • hELLO· Designed By정상우.v4.10.1
잉여개발자
React Native cli Google 로그인 연동하기
상단으로

티스토리툴바