์๋ ํ์ธ์,
์ฐ๋ฆฌ๋ Expo๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ณ ์์ต๋๋ค. ์ฐ๋ฆฌ ํ๋ก์ ํธ์์ ์ค์ํ ์ฃผ์ ๋ ์ธ์ฑ ๊ตฌ๋งค์
๋๋ค. ๋น์ ์ด ๋๋ฅผ ๋์ธ ์
์์คํฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์ฑ ๊ตฌ๋งค๋ฅผ ๊ตฌํํ๋ ๋ฐฉ๋ฒ๊ณผ์ด๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ๋ฐ๋ผ์ผ ํ ํ์ํ ๋จ๊ณ๋ ๋ฌด์์
๋๊น?
๊ฐ๋จํ:
detached
exp detach
master
๋ก ๋ค์ ์ ํํ์ญ์์ค.master
์ฝ๋ฉ ํ ๋ IAP ๋ชจ๋ ์ฝ๋๋ฅผ ๋ค์์ผ๋ก ๋ํํฉ๋๋ค.import { NativeModules } from 'react-native';
const { RNIapModule } = NativeModules;
function hasIAP() {
return !!NativeModules.RNIapModule;
}
์ฌ๊ธฐ์์ exp detach
๋ผ๋ ์ผ๋ฐ์ ์ธ ์์ด๋์ด๋ /ios
& /android
ํด๋๋ฅผ ํ์ํ๋ฏ๋ก ํ๋ก์ ํธ๋ฅผ RN ์ฑ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ผ๋ฐ Expo ์ฑ์ ๋ชจ๋ ๊ธฐ๋ฅ์ ๊ณ์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, fastlane์ ์ฌ์ฉํ์ฌ ๋ฐฐํฌํ๊ธฐ ๋งํ๋ฉด ๊ธฐ๋ณธ ํญ๋ชฉ์ ๋๋ฌด ๋ง์ด ์ฌ์ฉํ ํ์๊ฐ ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก ๋ถ๊ธฐ๋ SDK ๋ฒ์ ์
๋ฐ์ดํธ์ ์ ์ฉํฉ๋๋ค. ์ด๋ค ์ด์ ๋ก ๋ ์
๋ฐ์ดํธ์ ๋ฌธ์ ๊ฐ์๋ ๊ฒฝ์ฐ ๋ค์ ๋ถ๋ฆฌํ๊ณ ์ด lib๋ฅผ ๋ค์ ์ถ๊ฐ ํ ์ ์์ต๋๋ค.
๋ฌธ์ ๋ ์ ์ด์ ์์คํฌ๋ฅผ ์์ํ๋ ์ด์ ์ ๋๋ค.
๋ฟก๋ฟก
์ ์ด๋ ์ ์๊ฒ๋ Expo ๊ฐ๋ฐ ํ๊ฒฝ์ด ๋ค์ดํฐ๋ธ ๋น๋๋ฅผ ๋ง๋๋ ๊ฒ๋ณด๋ค ์์ ํ๊ธฐ๊ฐ ํจ์ฌ ์ฝ์ต๋๋ค. ๋ํ ๋จ์ผ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ถ ๋ฌด๋ฃ ๋ค์ค ํ๋ซํผ ํธ์ ์๋ฆผ ์๋น์ค๋ฅผ ๊ฐ๋ ๊ฒ๋ ๋งค์ฐ ํธ๋ฆฌํฉ๋๋ค.
@KevinColemanInc ์. ์ด์ ์ ์์คํฌ ์ฌ์ฉ์ ์๊ธฐ ๋๋ฌธ์ ์ดํดํฉ๋๋ค. ์ ๋ ์์คํฌ๊ฐ iap
๋ชจ๋์ ํตํฉํ๊ธฐ๋ฅผ ์ ๋ง๋ก ์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ์์คํฌ๊ฐ iap
๊ธฐ๋ฅ์ ํฌํจํ์ฌ ํ๊ฒฝ์ ์ ์งํ๋ ๊ฒ์ด ์ฝ์ง ์๋ค๋ ๊ฒ์ ์ดํดํฉ๋๋ค. Apple์ ๋จผ์ ์ฑ ์คํ ์ด์์ Expo Client
์ฑ์ ๊ฑฐ๋ถํฉ๋๋ค.
๋ฟก ๋นต๋จ
๋ค๋ฅธ ์ฌ๋๋ค์ด ์ ์ํ๋ฏ์ด ํ ์คํธ๋ฅผ ์ํด ๊ทธ๋ฃจํฐ๊ธฐ๋ฅผํ๋ค๋ฉด ๋ฉ์ง ๊ฒ์ ๋๋ค. ๋๋ ๊ฐ๋ฐ ๊ฒฝํ์ ์ํด ์์คํฌ๋ฅผ ์ข์ํฉ๋๋ค.
๋๋ ๊ทธ๊ฒ์ git์์ ์์ฒด ๋ธ๋์น๋ก ๋๋๊ณ dev ๋ธ๋์น ์์คํฌ๋ฅผ ์น์ ํ๊ฒ ์ ์งํ๋ ๊ฒ์ ๊ณ ๋ คํ๊ณ ์์ต๋๋ค. ๋ฐฐํฌ ํ ๋๊ฐ๋๋ฉด ๊บผ๋ธ ์ฝ๋๋ฅผ ๋ณํฉํ๊ณ ํ ์คํธ ํ ๋ค์ ์ฑ์ ๋ฐฐํฌ ํ ์ ์์ต๋๋ค.
@ImArtur ์ง๋ฌธ์ "์์คํฌ์์ ์ธ์ฑ ๊ตฌ๋งค"์ ๋๋ค. ์ฌ๊ธฐ์์ Expo์ ์ฅ๋จ์ ์ ๋ํด ์ฝ์ ์ ์์ต๋๋ค : https://docs.expo.io/versions/latest/introduction/why-not-expo
๋ฟก ๋นต๋จ
์๋ ํ์ธ์,์ด ๊ธ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค! (๋ถ๋ฆฌ ํ) "๋ถ๋ฆฌ ๋"๋ธ๋์น์์ exp ๋๋ xcode๋ก ๊ณ์ ๋น๋ํด์ผํ๋์ง ๊ถ๊ธํฉ๋๋ค. ๊ฐ์ฌ!
@EvanBacon ๋ iOS์์ ์ด๋ป๊ฒ ํ ์คํธํ๊ณ ์์ต๋๊น? ์ ๋น๋๋ฅผ ํธ์ ํ ๋ค์ ๊ฑฐ๊ธฐ์์ ํ ์คํธํฉ๋๊น ์๋๋ฉด ์ด์ ์ ๋ก์ปฌ์์ iap์ ํ ์คํธํ๋ ๋ฐฉ๋ฒ์ด ์์ต๋๊น?
๊ฐ๋ฐ ๋จ๊ณ์์ ์ธ์ฑ ๊ตฌ๋งค๊ฐ ํ์ํ๋ค๋ ๊ฒ์ ์๊ณ ์๋ ๊ฒฝ์ฐ์๋ CRNA๋ฅผ ์ฌ์ฉํด์ผํฉ๋๊น? ๋๋ ์ฒ์๋ถํฐ RN ๋ค์ดํฐ๋ธ๋ก ์ง์ ์ด๋ ํ์๊ฒ ์ต๋๊น?
๋ฌผ๋ก ์์คํฌ ๊ฐ๋ฐ์๋ ์์คํฌ ์ธ์ฑ ๊ตฌ๋งค๋ฅผ ๊ณง ๊ตฌํํฉ๋๋ค.
@edoantonioco ์ ๋ ์์คํฌ์ ํจ๊ป ์ผํ์ต๋๋ค. ์์ดํ ๊ตฌ๋งค๋ฅผ์ํ iap ๋ฒํผ์ด์๋ ํ์ด์ง๋ฅผ ๋ง๋ค๊ณ ๊ตฌ๋งค๋ฅผ ํ ์คํธํ๊ณ Xcode๋ก ๋น๋ ํ ๋๋ง ํด๋น ๋ฒํผ์ ๋๋ฆ ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์์คํฌ๋ก ๋น๋ํฉ๋๋ค. ์ ์๋ํฉ๋๋ค!
์ง์ฐ ๋ผ์ ์ฃ์กํฉ๋๋ค. ๋ถ๋ฆฌ ํ ๋ ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ์ถ๊ฐํ๊ณ ์ฅ์น์ ๋น๋ํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ํด๋น ๋น๋๋ฅผ ์์คํฌ ํด๋ผ์ด์ธํธ์ฒ๋ผ ์ฌ์ฉํฉ๋๋ค (๋จ์ผ ์ฑ๋ง ์ ์ธ). ๋๋ ์ฌ์ ํ Expo๋ฅผ ๊ณ ์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. CRNA๋ Expo์์ ์ ์ง ๊ด๋ฆฌํ๋ฉฐ ์ฃผ๋ก ํด๋น ํ๊ฒฝ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ํ๋๋กํ๋ ๋ฐ ์ค์ ์ ๋ก๋๋ค. Vanilla React Native๋ ๋ถํ์ํ ์ค์ ์ด ๋ง์ด ํ์ํ๋ฉฐ ๋ชจ๋์ ๋ด๋ถ ์๋์ ๋ํด ๋ ๋ง์ด ์๊ณ ์์ด์ผํฉ๋๋ค.
์๋ ํ์ธ์, ์ด์ ์ฃผ์ ๋ฅผ ๊ฐ์ ธ ์์ต๋๋ค. ์ธ์ฑ ๊ตฌ๋งค๊ฐ Expo์์ ์ฒ๋ฆฌํ๊ธฐ "์ด๋ ค์ด"๊ฒฝ์ฐ. Expo์์ ์ฑ์ ๋ถ๋ฆฌํ์ง ์๊ณ ์์ต์ ์ฐฝ์ถํ๊ธฐ ์ํด ์ ์ ๋ ๋ก๋๋งต์ ๋ฌด์์ ๋๊น? ์ ๋ ๋ค๋ฅธ ๋ง์ ์ฌ๋๋ค๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ๋ฐ์ ์ธ ๊ฒฝํ์ด RN๋ณด๋ค ํจ์ฌ ์น์ํ๊ณ ๋ ํ๋ซํผ์์ ๋ค์ดํฐ๋ธ๋ก ์ ํํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ๋ณต์กํ๋ค๋ ์ฌ์ค ๋๋ฌธ์ Expo๋ฅผ ์ฌ์ฉํฉ๋๋ค. . ๊ทธ๋ ๋ค๋ฉด PayPal๋ก ๊ตฌ๋ ๊ณํ์ ์ฌ์ฉํ๊ฑฐ๋ ์ ์ฉ ์นด๋๋ฅผ ํตํด ์ง๋ถ์๋ฐ์ ์ ์์ต๋๊น? ์๋ฅผ ๋ค์ด ์น๋ณด๊ธฐ๋ฅผ ์ฌ์ฉํ์ฌ Expo ์ฑ ๋ด๋ถ์ Google๊ณผ Apple์ด ๋ด์ฅํ๋๋ก ํ์ฉํฉ๋๊น? ๊ฐ์ฌ.
์๋ ํ์ธ์.
๊ทธ๋งํ ๊ฐ์น๊ฐ ์๋ค๋ฉด ์ฐ๋ฆฌ๋ ์ด์ ๊ฐ์ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋ฐ ์ง์ณ์ ์์คํฌ๋ฅผ ๋คํํ์ต๋๋ค.
ํ์คํ ํ ์คํธ์ ์ผ๋ถ ๊ธฐ๋ฅ (์ : ์๋ฆผ)์ ์ง์ํ๋ ๋ฐ ๋ง์ฐฐ์ ์ถ๊ฐํ์ง๋ง ์ ์ด๋ ๋ด ๊ฐ๋ฐ์๋ "์์คํฌ๊ฐ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋ถ๊ฐ๋ฅํ๋ค"๋ ๋ง์ ๋ฉ์ถ ์ ์์ต๋๋ค.
Expo๋ ์ต๊ทผ 2019 ๋
ํฅํ ๊ณํ์ ๋ํด ์ด๋ฅผ ๋ฐํํ์ต๋๋ค. ๊ทธ๋ฌ๋ฉด native modules
๋ฅผ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค.
@EvanBacon ์ ์ฝ๋๋ฅผ ์์ ์์ ์ผ๋ก ๋ง๋ค๋ ค๊ณ ํ์ง๋ง NativeModules๊ฐ ๋น์ด ์๊ณ ๊ฒฐ๊ณผ์ ์ผ๋ก RNIapModule์ด ์ ์๋์ง ์์์ต๋๋ค. (์ต์ํ iOS์์)
๋ค๋ฅธ ์ฌ๋๋ค์ด์ด ๋ฌธ์ ๋ฅผ ๊ฒช์์ต๋๊น? ์ด๊ฒ์ด ๋ด๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ฐ๊ฒฐ๋์ง ์์ ์์ ์๋ฏธํฉ๋๊น?
FWIW, ๋ฐ์ ๋ค์ดํฐ๋ธ ๋งํฌ๊ฐ ์๋ ํ ๊ฒ ๊ฐ์ต๋๋ค ....
$ react-native link react-native-iap
rnpm-install info Linking react-native-iap ios dependency
rnpm-install info Platform 'ios' module react-native-iap has been successfully linked
rnpm-install info Linking react-native-iap android dependency
rnpm-install info Platform 'android' module react-native-iap has been successfully linked
๊ทธ๋ฌ๋ ์ง๊ธ๊น์ง ํ ์ ์์๋ ์๋์ผ๋ก ๋งํฌํด์ผ ํ ์๋ ์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํด๋๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
https://forums.expo.io/t/trouble-linking-with-expokit-unable-to-find-libraries-in-xcode/16710
@EvanBacon ์๋
ํ์ธ์ ์ ์๋,
์์ธํ ๋ง์ํด ์ฃผ์๊ฒ ์ต๋๊น?
RN iap์ ์๋ํ์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ ๋๋ ๋ถ๋ฆฌ๋์์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ ios dir๋ก ์ด๋ํ์ฌ pod install์ ์คํํ์ญ์์ค. ์ด์ ๋ชจ๋ ๊ฒ์ ์ค์นํ๊ณ ์์ต๋๋ค.
๋ค์์ ๋ฌด์์ํด์ผํฉ๋๊น?
๊ฐ์ฌ
@cellis ์ ๊ฐ 1 ์ฃผ์ผ ๋์ ๋
ธ๋ ฅํ๊ณ ์๋ ์ธ์ฑ ์์
์ ์ด๋ป๊ฒ ๋ง๋ค ์๋์ง ์์ธํ ๋ง์ํด ์ฃผ์๊ฒ ์ต๋๊น? ์ด์ ์ฝ๋๋ฅผ ๋ณด์ฌ ์ฃผ์๊ฒ ์ต๋๊น?
๊ฐ์ฌ
pod ์ค์น ํ expo ๋๋ xcode๋ก ๋น๋ ํ์ต๋๊น?
๊ฐ์ฌ
ํ์์ํ๋ ๊ฒ๊ณผ ๋๊ฐ์ ์ผ์ํ์ธ์
js ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด ๋ง์คํฐ๋ก ๋ค์ ์ ํํ์ญ์์ค.
๋ง์คํฐ๋ก ์ฝ๋ฉ ํ ๋ ๋ค์๊ณผ ๊ฐ์ด IAP ๋ชจ๋ ์ฝ๋๋ฅผ ๋ํํฉ๋๋ค.
@EvanBacon ์ ์ค์ ์๋ฏธ๋ ๋ฌด์์
๋๊น?
๊ฐ๋จํ:
- ์ ๋ธ๋์น ์์ฑ
detached
exp detach
- ํ์์ํ๋ ๊ฒ๊ณผ ๋๊ฐ์ ์ผ์ํ์ธ์
- js ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด
master
๋ก ๋ค์ ์ ํํ์ญ์์ค.master
์ฝ๋ฉ ํ ๋ IAP ๋ชจ๋ ์ฝ๋๋ฅผ ๋ค์์ผ๋ก ๋ํํฉ๋๋ค.import { NativeModules } from 'react-native'; const { RNIapModule } = NativeModules; function hasIAP() { return !!NativeModules.RNIapModule; }
- ์ด๋ ๊ฒํ๋ฉด IAP ๋ฉ์๋๋ฅผ ํธ์ถ ํ ๋ ์ฝ๋๊ฐ ์ถฉ๋ํ์ง ์์ต๋๋ค.
- IAP๋ฅผ ๋ฐฐํฌํ๊ฑฐ๋ ํ ์คํธ ํ ๋ ๋ถ๋ฆฌ ๋ ๋ธ๋์น๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋ธ๋์น๋ฅผ ๋ชจ๋ ๊ฑด๋ ๋ฐ๊ณ ๋ถ๋> :)
์ฌ๊ธฐ์์
exp detach
๋ผ๋ ์ผ๋ฐ์ ์ธ ์์ด๋์ด๋/ios
&/android
ํด๋๋ฅผ ํ์ํ๋ฏ๋ก ํ๋ก์ ํธ๋ฅผ RN ์ฑ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ผ๋ฐ Expo ์ฑ์ ๋ชจ๋ ๊ธฐ๋ฅ์ ๊ณ์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, fastlane์ ์ฌ์ฉํ์ฌ ๋ฐฐํฌํ๊ธฐ ๋งํ๋ฉด ๊ธฐ๋ณธ ํญ๋ชฉ์ ๋๋ฌด ๋ง์ด ์ฌ์ฉํ ํ์๊ฐ ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก ๋ถ๊ธฐ๋ SDK ๋ฒ์ ์ ๋ฐ์ดํธ์ ์ ์ฉํฉ๋๋ค. ์ด๋ค ์ด์ ๋ก ๋ ์ ๋ฐ์ดํธ์ ๋ฌธ์ ๊ฐ์๋ ๊ฒฝ์ฐ ๋ค์ ๋ถ๋ฆฌํ๊ณ ์ด lib๋ฅผ ๋ค์ ์ถ๊ฐ ํ ์ ์์ต๋๋ค.
์๋
์๋ฐ,
์ ์ ํด ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค. ์กฐ์ธ์ ๋ฐ๋๊ณ ์ค๋ฅ๊ฐ ์์ต๋๋ค (react-native-iap์ ์๋์ผ๋ก ์ฐ๊ฒฐํ์ต๋๋ค). ๊ทธ๋ฌ๋ hasIAP ํจ์๋ RNIap.initConnection ();์๋ ๋ถ๊ตฌํ๊ณ false๋ฅผ ๋ฐํํฉ๋๋ค. true๋ฅผ ๋ฐํํฉ๋๋ค. ์ด ๊ฐ๋จํ ์ฝ๋๋ก ํ
์คํธํฉ๋๋ค.
async componentDidMount() {
try {
const result = await RNIap.initConnection();
console.log("hasIAP " + hasIAP()) // returns false
console.log('result', result); // returns true
} catch (err) {
console.warn(err.code, err.message);
}
}
๋ฌด์์ด ๋ฌธ์ ์ธ์ง ์๊ณ ์์ต๋๊น? (๋๋ ์ด๊ฒ์ ์ฝ๋ ์ฌ๋)
๋ฌธ์์ ๋ฐ๋ฅด๋ฉด https://docs.expo.io/versions/v32.0.0/sdk/payments/ ๊ธฐ๊ธฐ์์ ๊ฒฐ์ ๋ฅผ ์ค์ ํ์ต๋๊น? (์๋ฎฌ๋ ์ดํฐ๋ ์ด๊ฒ์ ํ ์คํธํ๋ ๊ฒ์ด ์๋ฏธ๊ฐ ์์ต๋๋ค)
์ด ๊ฒ์๋ฌผ์ ์ด์ ์ฌ์ฉ์์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ด๋ฒ 1 ๋ถ๊ธฐ์ ์ฑ์ ๋น๋ํ๋ ๋ฐฉ๋ฒ์ ๊ตฌํํ๊ณ ๋ค์ดํฐ๋ธ React Native ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ์ ธ์ฌ ์์๋ ๊ฒ์ด Expo์ ์ต์ ์ ์๋์ ๋๋ค. ์ง๊ธ์ CLI๋ก ์ ํ๋ก์ ํธ๋ฅผ ์์ํ ๋ ๋ฒ ํ๊ฐ ํ์๋ฉ๋๋ค. ๊ณง ํด๊ฒฐ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์๋ ํ์ธ์. ์ต๊ทผ์ด ๋ฌธ์ ์ ๋ํ ํ๋์ด์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฌธ์ ๊ฐ ํด๊ฒฐ ๋์์ต๋๊น? ์๋๋ฉด ์ฌ์ ํ ์ปค๋ฎค๋ํฐ์์ฃผ์๊ฐ ํ์ํฉ๋๊น? ์ด ๋ฌธ์ ๋ ๋ ์ด์ ํ๋์ด ๋ฐ์ํ์ง ์์ผ๋ฉด ์ข ๊ฒฐ ๋ ์ ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ "ํ ๋ก ์ฉ"๋๋ "์ข์ ์ฒซ ๋ฒ์งธ ๋ฌธ์ "๋ก ํ์ ํ ์๋ ์์ผ๋ฉฐ ์ด์ด ๋๊ฒ ์ต๋๋ค. ๊ทํ์ ๊ธฐ์ฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์ด์ด ๋์๊ณ Expo SDK versiรณn 33.0๋ถํฐ ์ด๊ฒ์ ํ์ค๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ฐพ๋๋ก ๋์์ฃผ์ธ์.
์ด ๋ฌธ์ ์ ๋ํ ์ ๋ฐ์ดํธ๊ฐ ์์ต๋๊น?
https://docs.expo.io/versions/latest/sdk/in-app-purchases/
์ ๋ฐ์ดํธ : ์ฃ์กํฉ๋๋ค. ๋ค์์ ๋์ณค์ต๋๋ค.
์ด ๋ชจ๋์ ํ์ฌ ๋ฒ ์ด ์ํฌ ํ๋ก์์๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
@kkarkos Expo์ ์์ฒด ์ธ์ฑ ๊ตฌ๋งค ๋ชจ๋์ ์ฌ์ฉํ๋ฉด Expo ์ฑ์ ๊บผ๋ด์ผํ๋ฏ๋ก (๊ฐ๊น์ด ๋ฏธ๋์) ์ค์ ๋ก ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง ์์ต๋๋ค.
๋๊ตฌ๋ ์ง @EvanBacon ์ด ์ค๋ช ํ๋ ์์์์ ๋ํด ๋ ์ฒ ์ ํ ๊ฐ์ด๋๋ฅผ ์ค ์ ์๋ค๋ฉด ๊ณต์ ํ์ญ์์ค. ๋ฐ๋ชจ ์ฑ์ผ๊น์?
@TheInternet "๋ผ์ด๋ธ๋ฌ๋ฆฌ"ํด๋๊ฐ ๋๋ฝ ๋ ๊ฒ๊ณผ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. iOS์ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์นํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์ผ์ จ์ต๋๊น?
์๋
ํ์ธ์.
ํฅ๋ฏธ ๋กญ๊ตฐ์. ์์คํฌ์์ ์ฑ์ ๋ถ๋ฆฌํ์ง ์๊ณ ์์ต์ ์ฐฝ์ถ ํ ์์๋ ํฅ๋ฏธ๋ก์ด ๋ฐฉ๋ฒ์ ์ฐพ์๋์?
WebView์์ ์ ์ ๊ฒฐ์ ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๊น? ํฉ๋ฒ์ ์ ๋๊น?
๋ด๊ฐ ์๋ ํ ํ์ฌ ์๋ฃจ์ ์ ์น ์ฑ (์ : ์คํธ๋ผ์ดํ ๋๋ PayPal)์ผ๋ก ์ฌ์ฉํ ์ ์์ง๋ง AppStore ๋๋ PlayStore ๋ด๋ถ์์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด Expo๋ฅผ ์ฌ์ฉํ๊ธฐ ์์ํ ์ดํ๋ก ์ฐ๋ฆฌ ๋ชจ๋๊ฐ ๊ธฐ๋ค๋ ค์จ API๋ฅผ ํตํด ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์ํ ํ ๋๊น์ง ์ฑ์ด ์ซ๊ฒจ๋๊ฑฐ๋ ์ ๊ฑฐ ๋ ์ ์์ต๋๋ค.
์ธ๋ถ ์ํ ๋ฐ ์๋น์ค๋ฅผ ๊ตฌ๋งคํ๋ ํ (์ : amazon์์ ์ ํ์ ๊ตฌ๋งคํ๊ฑฐ๋ Uber ์ฑ์์ ๊ฒฐ์ ํ ๋) ์ฑ์์ Stripe ๋๋ Paypal์ ์ฌ์ฉํ ์ ์์ง๋ง ์ฑ ์ํํธ์จ์ด ๊ธฐ๋ฅ์ ์ ๊ธ ํด์ ํ๋ ๋ฐ Stripe๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค (์ : ๊ฒ์ ํ ํฐ ๋๋ ํ๋ฆฌ๋ฏธ์ ๊ธฐ๋ฅ ํ๋งค)
์๊ฒฌ์ ๋ณด๋ด ์ฃผ์ KevinColemanInc์๊ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ํ ๋์ฌ, ํด๋ผ์ฐ๋ ์คํ ๋ฆฌ์ง, ์จ๋ผ์ธ ์ฝ์ค์ ๋ํ ๋ฉค๋ฒ์ญ ํ๋งค ๋๋ ๋ฐ๋ณต ๊ฒฐ์ ์ฌ๋ถ๋ฅผ ์๊ณ ๊ณ์ญ๋๊น? ์ฑ ๋ด์์ Stripe ๋๋ PayPal์ ์ฌ์ฉํ์ฌ ์ธ๋ถ์์ ๊ฒฐ์ ํ ์ ์์ต๋๋ค-> (PlayStore ๋๋ AppStore) ? ์๊ฒฌ์ ๋ณด๋ด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค!
์๋ ํ์ธ์.
์ฑ ๋ด์ ๊ธฐ๋ฅ์ ์ ๊ธ ํด์ ํ๋ ค๋ ๊ฒฝ์ฐ (์ : ๊ตฌ๋ , ๊ฒ์ ๋ด ํตํ, ๊ฒ์ ๋ ๋ฒจ, ํ๋ฆฌ๋ฏธ์ ์ฝํ ์ธ ์ก์ธ์ค ๋๋ ์ ์ ๋ฒ์ ์ ๊ธ ํด์ )
๋ค์์ Apple์ ์ง์นจ์
๋๋ค.
https://developer.apple.com/app-store/review/guidelines/#in -app-purchase
์ค๋ช ํ์ ๋ด์ฉ์ ๋๋ถ๋ถ์ด "ํ๋ฆฌ๋ฏธ์ ์ฝํ ์ธ "์ ํด๋น ํ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. Netflix๋ ์ฌ๊ณผ ์ธ ๋ฅผ ์ง๋ถํด์ผํฉ๋๋ค.
Dropbox๋ ๋ชจ๋ฐ์ผ์์ ๊ฐ์ ํ๋ฉด ์ฌ๊ณผ ์ธ๋ ์ง๋ถํ๋ ๊ฒ ๊ฐ์ต๋๋ค. Udemy์ ์ฑ์ ํ์ธํ์ฌ IAP๋ ์ฌ์ฉํ๋์ง ํ์ธํฉ๋๋ค.
์๋ ํ์ธ์. ์ต๊ทผ์ด ๋ฌธ์ ์ ๋ํ ํ๋์ด์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฌธ์ ๊ฐ ํด๊ฒฐ ๋์์ต๋๊น? ์๋๋ฉด ์ฌ์ ํ ์ปค๋ฎค๋ํฐ์์ฃผ์๊ฐ ํ์ํฉ๋๊น? ์ด ๋ฌธ์ ๋ ๋ ์ด์ ํ๋์ด ๋ฐ์ํ์ง ์์ผ๋ฉด ์ข ๊ฒฐ ๋ ์ ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ "ํ ๋ก ์ฉ"๋๋ "์ข์ ์ฒซ ๋ฒ์งธ ๋ฌธ์ "๋ก ํ์ ํ ์๋ ์์ผ๋ฉฐ ์ด์ด ๋๊ฒ ์ต๋๋ค. ๊ทํ์ ๊ธฐ์ฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
๊ฐ๋จํ:
- ์ ๋ธ๋์น ์์ฑ
detached
exp detach
- ํ์์ํ๋ ๊ฒ๊ณผ ๋๊ฐ์ ์ผ์ํ์ธ์
- js ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด
master
๋ก ๋ค์ ์ ํํ์ญ์์ค.master
์ฝ๋ฉ ํ ๋ IAP ๋ชจ๋ ์ฝ๋๋ฅผ ๋ค์์ผ๋ก ๋ํํฉ๋๋ค.import { NativeModules } from 'react-native'; const { RNIapModule } = NativeModules; function hasIAP() { return !!NativeModules.RNIapModule; }
- ์ด๋ ๊ฒํ๋ฉด IAP ๋ฉ์๋๋ฅผ ํธ์ถ ํ ๋ ์ฝ๋๊ฐ ์ถฉ๋ํ์ง ์์ต๋๋ค.
- IAP๋ฅผ ๋ฐฐํฌํ๊ฑฐ๋ ํ ์คํธ ํ ๋ ๋ถ๋ฆฌ ๋ ๋ธ๋์น๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋ธ๋์น๋ฅผ ๋ชจ๋ ๊ฑด๋ ๋ฐ๊ณ ๋ถ๋> :)
์ฌ๊ธฐ์์
exp detach
๋ผ๋ ์ผ๋ฐ์ ์ธ ์์ด๋์ด๋/ios
&/android
ํด๋๋ฅผ ํ์ํ๋ฏ๋ก ํ๋ก์ ํธ๋ฅผ RN ์ฑ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ผ๋ฐ Expo ์ฑ์ ๋ชจ๋ ๊ธฐ๋ฅ์ ๊ณ์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, fastlane์ ์ฌ์ฉํ์ฌ ๋ฐฐํฌํ๊ธฐ ๋งํ๋ฉด ๊ธฐ๋ณธ ํญ๋ชฉ์ ๋๋ฌด ๋ง์ด ์ฌ์ฉํ ํ์๊ฐ ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก ๋ถ๊ธฐ๋ SDK ๋ฒ์ ์ ๋ฐ์ดํธ์ ์ ์ฉํฉ๋๋ค. ์ด๋ค ์ด์ ๋ก ๋ ์ ๋ฐ์ดํธ์ ๋ฌธ์ ๊ฐ์๋ ๊ฒฝ์ฐ ๋ค์ ๋ถ๋ฆฌํ๊ณ ์ด lib๋ฅผ ๋ค์ ์ถ๊ฐ ํ ์ ์์ต๋๋ค.
๋๋ฌด ์กฐ๋ฐํด์ ์ฃ์กํฉ๋๋ค. ์ฆ, ๊ฐ ์ง์ ์ IAP ์ฝ๋๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์ถ๊ฐ ํ ๋ค์ (์์คํฌ ์ง์ ์ ์ํด 'ํฌ์ฅ'ํด์ผํ๋ ๊ฒฝ์ฐ) ์ถ๊ฐ ํ ๋๋ง๋ค ์ ์ง์ ์์ ๋ค์ ๊บผ๋ ๋๋ค. ๋ง์คํฐ์ ์์คํฌ ์ฝ๋ ๋๋ ๋น์ ์ ์ด๋ ์์ ์์ ๋ถ๊ธฐ๋ฅผ ๋ณํฉํ๊ณ ์์ต๋๊น ??! ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ด ๊ด๋ฆฌ ์์คํฌ ์ฑ์ IAP๋ฅผ ์ถ๊ฐํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๋๊น? ๋๋ ์ฒซ ๋ฒ์งธ ํฐ ์ฑ์ ๋ง๋ฌด๋ฆฌํ๊ณ ์์ผ๋ฉฐ ์ด๋ป๊ฒ ๋ ์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํด์ผํ๋ฉฐ ๋ถ๊ธฐ์์ ์ํํ๋ ๊ฒ์ด ์์ ํ ์ต์ ์ผ๋ก ๋ณด์ผ ์ ์์ต๋๋ค. ์ํฌ ํ๋ก๋ฅผ ์ดํดํ๊ณ ์๋์ง ํ์ธํ๊ณ ์ถ์ต๋๋ค! ๋๋ ๋ํ ๋ด๊ฐ ์์คํฌ๋ฅผ ์ฌ๋ํ๋ค๊ณ ๋งํด์ผํ๋ค! ๋ค์ดํฐ๋ธ ๋ฐ์์ ํ ์์๋ ํ๋ฅญํ ๋ฐฉ๋ฒ์ด์๊ณ ๊ทธ๊ฒ ์์ด๋ ์ด๋ ๊ฒ๊น์ง ๋๋ฌํ์ง ๋ชปํ์ ๊ฒ์ ๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
์๋ ํ์ธ์. ์ต๊ทผ์ด ๋ฌธ์ ์ ๋ํ ํ๋์ด์๋ ๊ฒ ๊ฐ์ต๋๋ค. ๋ฌธ์ ๊ฐ ํด๊ฒฐ ๋์์ต๋๊น? ์๋๋ฉด ์ฌ์ ํ ์ปค๋ฎค๋ํฐ์์ฃผ์๊ฐ ํ์ํฉ๋๊น? ์ด ๋ฌธ์ ๋ ๋ ์ด์ ํ๋์ด ๋ฐ์ํ์ง ์์ผ๋ฉด ์ข ๊ฒฐ ๋ ์ ์์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ "ํ ๋ก ์ฉ"๋๋ "์ข์ ์ฒซ ๋ฒ์งธ ๋ฌธ์ "๋ก ํ์ ํ ์๋ ์์ผ๋ฉฐ ์ด์ด ๋๊ฒ ์ต๋๋ค. ๊ทํ์ ๊ธฐ์ฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์ฅ๊ธฐ๊ฐ ์ฌ์ฉํ์ง ์์ผ๋ฉด์ด ๋ฌธ์ ๋ฅผ ์ข ๋ฃํฉ๋๋ค. ์ด ๋ฌธ์ ๊ฐ ์ต์ ๋ฆด๋ฆฌ์ค์ ์ฌ์ ํ ์กด์ฌํ๋ ๊ฒฝ์ฐ ์ต์ ์ ๋ณด๋ก ์ ๋ฌธ์ ๋ฅผ ์์ ๋กญ๊ฒ ์์ฑํ์ญ์์ค.
๊ฐ๋จํ:
- ์ ๋ธ๋์น ์์ฑ
detached
exp detach
- ํ์์ํ๋ ๊ฒ๊ณผ ๋๊ฐ์ ์ผ์ํ์ธ์
- js ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด
master
๋ก ๋ค์ ์ ํํ์ญ์์ค.master
์ฝ๋ฉ ํ ๋ IAP ๋ชจ๋ ์ฝ๋๋ฅผ ๋ค์์ผ๋ก ๋ํํฉ๋๋ค.import { NativeModules } from 'react-native'; const { RNIapModule } = NativeModules; function hasIAP() { return !!NativeModules.RNIapModule; }
- ์ด๋ ๊ฒํ๋ฉด IAP ๋ฉ์๋๋ฅผ ํธ์ถ ํ ๋ ์ฝ๋๊ฐ ์ถฉ๋ํ์ง ์์ต๋๋ค.
- IAP๋ฅผ ๋ฐฐํฌํ๊ฑฐ๋ ํ ์คํธ ํ ๋ ๋ถ๋ฆฌ ๋ ๋ธ๋์น๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ๋ธ๋์น๋ฅผ ๋ชจ๋ ๊ฑด๋ ๋ฐ๊ณ ๋ถ๋> :)
์ฌ๊ธฐ์์
exp detach
๋ผ๋ ์ผ๋ฐ์ ์ธ ์์ด๋์ด๋/ios
&/android
ํด๋๋ฅผ ํ์ํ๋ฏ๋ก ํ๋ก์ ํธ๋ฅผ RN ์ฑ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ผ๋ฐ Expo ์ฑ์ ๋ชจ๋ ๊ธฐ๋ฅ์ ๊ณ์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, fastlane์ ์ฌ์ฉํ์ฌ ๋ฐฐํฌํ๊ธฐ ๋งํ๋ฉด ๊ธฐ๋ณธ ํญ๋ชฉ์ ๋๋ฌด ๋ง์ด ์ฌ์ฉํ ํ์๊ฐ ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก ๋ถ๊ธฐ๋ SDK ๋ฒ์ ์ ๋ฐ์ดํธ์ ์ ์ฉํฉ๋๋ค. ์ด๋ค ์ด์ ๋ก ๋ ์ ๋ฐ์ดํธ์ ๋ฌธ์ ๊ฐ์๋ ๊ฒฝ์ฐ ๋ค์ ๋ถ๋ฆฌํ๊ณ ์ด lib๋ฅผ ๋ค์ ์ถ๊ฐ ํ ์ ์์ต๋๋ค.๋๋ฌด ์กฐ๋ฐํด์ ์ฃ์กํฉ๋๋ค. ์ฆ, ๊ฐ ์ง์ ์ IAP ์ฝ๋๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ์ถ๊ฐ ํ ๋ค์ (์์คํฌ ์ง์ ์ ์ํด 'ํฌ์ฅ'ํด์ผํ๋ ๊ฒฝ์ฐ) ์ถ๊ฐ ํ ๋๋ง๋ค ์ ์ง์ ์์ ๋ค์ ๊บผ๋ ๋๋ค. ๋ง์คํฐ์ ์์คํฌ ์ฝ๋ ๋๋ ๋น์ ์ ์ด๋ ์์ ์์ ๋ถ๊ธฐ๋ฅผ ๋ณํฉํ๊ณ ์์ต๋๊น ??! ๊ทธ๋ฆฌ๊ณ ์ด๊ฒ์ด ๊ด๋ฆฌ ์์คํฌ ์ฑ์ IAP๋ฅผ ์ถ๊ฐํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ๋๊น? ๋๋ ์ฒซ ๋ฒ์งธ ํฐ ์ฑ์ ๋ง๋ฌด๋ฆฌํ๊ณ ์์ผ๋ฉฐ ์ด๋ป๊ฒ ๋ ์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํด์ผํ๋ฉฐ ๋ถ๊ธฐ์์ ์ํํ๋ ๊ฒ์ด ์์ ํ ์ต์ ์ผ๋ก ๋ณด์ผ ์ ์์ต๋๋ค. ์ํฌ ํ๋ก๋ฅผ ์ดํดํ๊ณ ์๋์ง ํ์ธํ๊ณ ์ถ์ต๋๋ค! ๋๋ ๋ํ ๋ด๊ฐ ์์คํฌ๋ฅผ ์ฌ๋ํ๋ค๊ณ ๋งํด์ผํ๋ค! ๋ค์ดํฐ๋ธ ๋ฐ์์ ํ ์์๋ ํ๋ฅญํ ๋ฐฉ๋ฒ์ด์๊ณ ๊ทธ๊ฒ ์์ด๋ ์ด๋ ๊ฒ๊น์ง ๋๋ฌํ์ง ๋ชปํ์ ๊ฒ์ ๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
์๋ ํ์ธ์! ๋ต์ ์ฐพ์์ต๋๊น? ์ด๋ป๊ฒ ๊ตฌํ ํ์ต๋๊น?
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๊ฐ๋จํ:
detached
exp detach
master
๋ก ๋ค์ ์ ํํ์ญ์์ค.master
์ฝ๋ฉ ํ ๋ IAP ๋ชจ๋ ์ฝ๋๋ฅผ ๋ค์์ผ๋ก ๋ํํฉ๋๋ค.์ฌ๊ธฐ์์
exp detach
๋ผ๋ ์ผ๋ฐ์ ์ธ ์์ด๋์ด๋/ios
&/android
ํด๋๋ฅผ ํ์ํ๋ฏ๋ก ํ๋ก์ ํธ๋ฅผ RN ์ฑ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค.์ผ๋ฐ Expo ์ฑ์ ๋ชจ๋ ๊ธฐ๋ฅ์ ๊ณ์ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ, fastlane์ ์ฌ์ฉํ์ฌ ๋ฐฐํฌํ๊ธฐ ๋งํ๋ฉด ๊ธฐ๋ณธ ํญ๋ชฉ์ ๋๋ฌด ๋ง์ด ์ฌ์ฉํ ํ์๊ฐ ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก ๋ถ๊ธฐ๋ SDK ๋ฒ์ ์ ๋ฐ์ดํธ์ ์ ์ฉํฉ๋๋ค. ์ด๋ค ์ด์ ๋ก ๋ ์ ๋ฐ์ดํธ์ ๋ฌธ์ ๊ฐ์๋ ๊ฒฝ์ฐ ๋ค์ ๋ถ๋ฆฌํ๊ณ ์ด lib๋ฅผ ๋ค์ ์ถ๊ฐ ํ ์ ์์ต๋๋ค.