๐ ์ ๊ฐ ์ง์ ์ด์์ค์ธ ์ดํ "๋ฃจ๋น"์ ๋ค์ด๋ฐ์๋ณด์ธ์! (๋ฃจํด ๊ด๋ฆฌ ์ดํ)
๐ฐ ๋ฃจ๋น ํํ์ด์ง
๊ทธ๋ผ ์ด์ ์นด์นด์ค ๋ก๊ทธ์ธ ์์ํ๊ฒ ์ต๋๋ค!
ํ๊ฒฝ
react-native: 0.63.4
@react-native-seoul/kakao-login: 3.0.3
๋ผ์ด๋ธ๋ฌ๋ฆฌ
https://github.com/react-native-seoul/react-native-kakao-login
์ค์น
yarn add @react-native-seoul/kakao-login@3.0.3
cd ios && pod install
iOS & Android Post Installation
github.com/react-native-seoul/react-native-kakao-login#post-installation
- Post Installation์ ๋ฐ๋ผ๊ฐ์ฃผ์ธ์.
- Bridging Header ํ์ผ์ ์ถ๊ฐํด์ผํ๋ 4๋ฒ ์ถ๊ฐ์ค๋ช
- XCode > File > New File > Header File ํด๋ฆญ
- ์ด๋ฆ์ YourApp-Bridging-Header.h ์ด๋ ๊ฒ ์ ์ฅ. YourApp ๋ถ๋ถ์ด ์ฑ์ ์ด๋ฆ ๋ถ๋ถ์ ๋๋ค.
- Project - Build Settings - Objective-C Bridging Header - YourApp-Bridging-Header.h ์ ๋ ฅ.
- 1๋ฒ ์ถ๊ฐ์ค๋ช
- Pod์์ iOS deployment target์ด 11.0 ์ด์์ด์ด์ผ ํฉ๋๋ค.
- Podfile์์ ```platform: ios, '10.0'``` ์ด๋ถ๋ถ์ 11.0์ผ๋ก ๊ณ ์ณ์ค๋ค.
- ์ฌ๊ธฐ์ ์ฃผ์ํ ์ ! Project - General Deployment Info๋ 11.0์ผ๋ก ๋ง์ถฐ์ค์ผํ๋ค. (์ด๋ฏธ์ง1 ์ฐธ๊ณ )
- Debug ๋๋ ๊ด์ฐฎ์๋ฐ, Archiveํ ๋ ์ค๋ฅ๊ธฐ ๋๋ฌธ์ ๊ผญ ๋ง์ถฐ์ฃผ๊ธฐ!
- ์ฐธ๊ณ : ์ด๋ฏธ์ง2 (stackoverflow.com/questions/55675694/how-to-fix-cocoapod-modulemap-file-not-found)
- Bridging Header ํ์ผ์ ์ถ๊ฐํด์ผํ๋ 4๋ฒ ์ถ๊ฐ์ค๋ช
- Usage
- ์ด ๋งํฌ๋ฅผ ์ฐธ๊ณ ํด ์ฝ๋๋ฅผ ์์ฑํ ํ ๋น๋ํด์ฃผ์ธ์.
https://github.com/react-native-seoul/react-native-kakao-login/blob/master/KakaoLoginExample/src/components/pages/Intro.tsx - ์ฐธ๊ณ
// ์ ์์์ ๊ฐ์ด, line1๋ก importํ๊ฑฐ๋ ์ด๋ ๊ฒ ์ฌ์ฉํ๊ฑฐ๋
import { login as loginKakao } from '@react-native-seoul/kakao-login'; // line 1 (O)
// line2์ฒ๋ผ * as KakaoLogins ์ผ๋ก import ํด์ผํฉ๋๋ค.
import * as KakaoLogins from '@react-native-seoul/kakao-login'; // line 2 (O)
// line3์ฒ๋ผ import ํ ์ KakaoLogins.login ์ด ์๋ํ์ง ์์ต๋๋ค.
import KakaoLogins from '@react-native-seoul/kakao-login'; // line 3 (X)
- ์๋ฌ1: ํคํด์
ํด์ํค๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ ์๋ ๋ธ๋ก๊ทธ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
์ด ๋ฐฉ๋ฒ์ผ๋ก ํด์ํค๋ฅผ ๊ฐ์ ธ์ค๋ฉด logcat์ ๋จ๊ฒ ๋ฉ๋๋ค.
** logcat ํ์ธํ๋ ๋ฐฉ๋ฒ
1) ์๋๋ก์ด๋ ์คํ๋์ค๋ฅผ ์ผ๊ณ vscode์์ react-native run-android๋ฅผ ํ๋ค.
2) ์๋ ์ฌ์ง์์ ์ข์ธก ์๋จ์ ์๋ ๊ธฐ๊ธฐ ์ ํ ๋๋กญ๋ค์ด์ ํด๋ฆญํด์ ํ์ฌ ์ฐ๊ฒฐ๋ ๊ธฐ๊ธฐ๋ฅผ ํด๋ฆญํ๊ณ ์ฐ์ธก์๋จ์ฒ๋ผ KeyHash๋ก ๊ฒ์ํ๋ฉด ํด์ํค๊ฐ ๋์จ๋ค!
logcat์ ๋ฌ ํด์ํค๋ฅผ ์๋ ๋ณด๋ผ์ ๋ค๋ชจ๋ก ๊ฐ๋ฆฐ ๋ถ๋ถ์ ์ถ๊ฐํด์ค๋๋ค.
- ์๋ฌ2: ๋ฆด๋ฆฌ์ฆ์ฉ ํคํด์๋ ๋ฐ๋ก ์๋ค
์์์ ์ป์ ํคํด์๋ ๋๋ฒ๊ทธ์ฉ์ด๊ณ , ๋ฆด๋ฆฌ์ฆ๋ฒ์ ์ ์ํ ํคํด์๋ ๋ฐ๋ก ์์ต๋๋ค.
๊ทธ๋์ apk ๋ฝ๊ณ ํ ์คํธ ํด๋ณด๋ฉด
invalid android_key_hash or ios_bundle_id or web_site_url
์ด ์๋ฌ๋ฌ๊ฐ ๋์ฌ ๊ฒ์ ๋๋ค.
์๋ ๋งํฌ๋ก ๋ค์ด๊ฐ์ '๋ฆด๋ฆฌ์ฆ ํคํด์' ๋ถ๋ถ์ ๋ฐ๋ผํ๋ฉด ๋ฉ๋๋ค.
vscode ํฐ๋ฏธ๋์์ ํ๋ก์ ํธ/android ์์น์์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด ๋ฉ๋๋ค.
https://developers.kakao.com/docs/latest/ko/getting-started/sdk-android-v1#key-hash
keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64
์ถ๊ฐ)
https://devtalk.kakao.com/t/invalid-android-key-hash-or-ios-bundle-id-or-web-site-url/77068
์ด๊ณณ์ ๋ณด๋ฉด ์์ฒ๋ผ '๋ฆด๋ฆฌ์ฆ ํคํด์'๋ฅผ ๋ฐ๋ผํด๋ ํ๋ ์ด์คํ ์ด์ ์ถ์ํ๋ ์๊ฐ ์นด์นด์ค๋ก๊ทธ์ธ์ด ์๋จนํ๋ ๊ฒฝ์ฐ๊ฐ ์์ต๋๋ค. ์ ๋ ์คํ ์ด์ ์ถ์ํ๋๋ฐ ์๋ผ์ ๊ต์ฅํ ๋นํฉํ์ด์ ๐ญ
ํ๋ ์ด์คํ ์ด์ ์ฌ๋ผ๊ฐ๋ ํค๋ ๊ตฌ๊ธ์์ ๋ฐ๋ก ๋ง๋ ๊ฑฐ๋ผ์ ๊ทธ๋ ์ต๋๋ค.
๊ทธ๋์ ์๋ ๋ธ๋ก๊ทธ1,2๋ฅผ ์ฐธ๊ณ ํ๋ฉด ํด๊ฒฐ ๊ฐ๋ฅํฉ๋๋ค.
๋ธ๋ก๊ทธ1
๋ธ๋ก๊ทธ2
์ป์ ํคํด์๋ฅผ ์นด์นด์ค ๋๋ฒจ๋กํผ ํ์ด์ง์ ์ถ๊ฐํด์ฃผ์ธ์.
=> ๋๋ฒ๊ทธ / ๋ฆด๋ฆฌ์ฆ / ํ๋ ์ด์คํ ์ด - ์ด 3๊ฐ์ ํด์๊ฐ ์์ด์ผ ํ๋ค.
ํ์ง๋ง ํฌ๊ฒ ๊ฐ์กฐํ์ง ์์์ ๋ชฐ๋๋ ๊ฐ๋ฐ์๋ค์ด ๊ณ ์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค,,, ๊ผญ ์ฐธ๊ณ ํด์ฃผ์ธ์!
- ์๋ฌ3: ์นด์นด์ค ๊ณ์ ๋ก๊ทธ์ธ์ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ฌ์ฉ์ ๊ด๋ฆฌ๋ฅผ ์ค์ ํด์ผ ํฉ๋๋ค.
ํ์ฑํ ์ค์ ์ํ๊ฐ OFF์ฌ์ ์ด๋ค ON์ผ๋ก ๋ฐ๊ฟ์ฃผ์ธ์.
- ์๋ฌ4: iOS์์ ๋ก๊ทธ์ธ ์ธ์ฆ์๋จ ์ ํ ํ๋ฉด์ด ๋จ์ง ์๋๋ค. - v2 ๊ด๋ จ ์๋ฌ
์ ์ฝ๋๋ ์ด๋ฌํ์ต๋๋ค.
const result = await KakaoLogins.login();
์ด ์ฝ๋๋ฅผ ์คํ์ํค๋ฉด, ์๋๋ก์ด๋์์๋ ๊ฐํธ๋ก๊ทธ์ธ๊ณผ ๊ณ์ ์ ์ง์ ์ ๋ ฅํด์ ๋ก๊ทธ์ธํ๋ 2๊ฐ์ง ๋ฐฉ์์ด ๋ด๋๋ฐ,
iOS์์๋ ๊ณ์ ์ ์ง์ ์ ๋ ฅํ๋ ๋ฐฉ์๋ฐ์ ๋จ์ง ์์๋๋ฐ, ์ด์๋ฅผ ์ฐพ์๋ณด๋ ๋์ ๊ฐ์ ๋ฌธ์ ๋ฅผ ๊ฒช์ ์ฌ๋์ด ์์์ต๋๋ค.
github.com/react-native-seoul/react-native-kakao-login/issues/168#issuecomment-680868420
์์ธ: ํ์ดํธ๋ฆฌ์คํธ ์ค์ ์ ์ํด์ค์
๋ฐ๋ผ์ ์๋๊ณผ ๊ฐ์ด ์ฝ๋๋ฅผ ๋ณ๊ฒฝํด์ฃผ์ธ์.
// info.plist
<string>kakao0123~9</string>
<string>kakaokompassauth</string>
// ๋ก๊ทธ์ธ ๋ค๋ฃจ๋ ํ์ผ
import KakaoLogins, { KAKAO_AUTH_TYPES } from '@react-native-seoul/kakao-login';
const result = await KakaoLogins.login([KAKAO_AUTH_TYPES.Talk, KAKAO_AUTH_TYPES.Account]);
- v3 ๊ด๋ จ ์ฐธ๊ณ
v3 (3.0.3)์์๋ ์๋์ ๊ฐ์ ๋ก๊ทธ์ธ ์ธ์ฆ ์๋จ ์ ํ ํ๋ฉด์ด ๋จ์ง ์๊ณ , ๋ฐ๋ก ๊ฐํธ๋ก๊ทธ์ธ์ด ์ ํ๋ ์ฑ๋ก ๋ก๊ทธ์ธ์ด ์งํ๋ฉ๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ฐ๋ฐ์๋์ด v3๋ถํฐ๋ ์ถ๊ฐํ์ง ์์ผ์ จ๊ธฐ ๋๋ฌธ์ ๋๋ค.
ํ์ฌ ์ด์๋ก ์ฌ๋ ค๋์ ์ถ๊ฐ๋๋ค๋ฉด ์ข์ ๊ธฐ๋ฅ์ผ ๊ฒ ๊ฐ์ต๋๋ค! (v2์์ ์ ์ฐ๊ณ ์๋ ๊ธฐ๋ฅ)
์ ๋ฐ์ดํธ๋๋๋๋ก ์ด ๊ธ์๋ ๋ฐ์ํด๋๊ฒ ์ต๋๋ค!
- ์ด์: github.com/react-native-seoul/react-native-kakao-login/issues/200
์ฐธ๊ณ ๋ธ๋ก๊ทธ
- https://github.com/react-native-seoul/react-native-kakao-login/issues/139
- https://thisisspear.tistory.com/53