์ฌ์ฉ์๋ ๊ณผ์ฐ ์ด๋ค UI์์ ์ฐธ์ฌ๋, ๋ง์กฑ๋๊ฐ ๋์๊น?
์ฐ๋ฆฌ ํ์์ ์ ๋ง ๋ง์ด ๊ณ ๋ฏผํด๋ณด๋ ์ฌํญ์ด๋ค. ๊ทธ๋ฐ๋ฐ ๊ณ ๋ฏผํด๋ณธ๋ค ๋ต์ ์ ์๊ฐ ์์ง.
A/B ํ
์คํธ๋ฅผ ๋์
ํด์ ์ ์ ์ ํ๋์ ์ง์ ์ ์ผ๋ก ๊ด์ฐฐํด๋ณด๊ธฐ๋ก ํ๋ค.
์์ง ๋ฒ ํ ๋ฒ์ ์ด๋ผ๊ณ ํ๋ Fifebase์ A/B Testing๊ณผ Config Remote๋ฅผ ์ด์ฉํด๋ณธ๋ค.
Firebase A/B ํ
์คํธ์๋ ์ธ๊ฐ์ง ํ์์ด ์๋ค. ( ์๋ฆผ, ์๊ฒฉ๊ตฌ์ฑ, ์ธ์ฑ๋ฉ์์ง )
์๋ฆผ
์ ์ ํ ์๊ฐ์ ์ ์ ํ ์ฌ์ฉ์์ ์ํตํ๊ธฐ ์ํด ๋ฉ์์ง ์ ์ก์ ์คํํ๋ค.
Firebase์ Cloud Messaging์ผ๋ก ์ฐ๊ฒฐํ๋ค.์๊ฒฉ ๊ตฌ์ฑ
์๋ฒ์ธก ๊ตฌ์ฑ ๋งค๊ฐ๋ณ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ ๋์์ ์คํํ๋ค.
Firebase์ Remote Config๋ก ์ฐ๊ฒฐํ๋ค.์ธ์ฑ ๋ฉ์์ง
์ฐธ์ฌ ์ ๋๋ฅผ ๊ทน๋ํ ํ๊ธฐ ์ํด ์๋ก ๋ค๋ฅธ ์ธ์ฑ ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ์คํ์ด๋ค.
Firebase์ In-App Messaging์ผ๋ก ์ฐ๊ฒฐํ๋ค.
์ด ์ค ์ค๋์ Remote Config๋ฅผ ์ธํ
ํ๋ ์์
์ ํด๋ณด์.
RN remote config ๋ฌธ์ ๋ฐ๋ก๊ฐ๊ธฐ
npm install @react-native-firebase/app
npm install @react-native-firebase/remote-config
cd ios/ && pod install
๋งค๊ฐ๋ณ์๋ฅผ ์ด๋ป๊ฒ ๋ถ๋ฌ์ค์ง? ์์ง ๋งค๊ฐ๋ณ์ ์ ์๋ฅผ ํ์ง ์์๋๋ฐ?
๋ค ์์ง ์ ์ํ์ง ์์์ง.
์ด๋ ๊ฒ ๋คํธ์ํฌ๊ฐ ์๊ฑฐ๋, ์์ง ์ฝ๋์์ ๋งค๊ฐ๋ณ์๋ฅผ ๋ถ๋ฌ์ค์ง ๋ชปํ ๊ฒฝ์ฐ๋ฅผ ์ํด default ๊ฐ์ ์ค์ ํด์ฃผ๋ ์์
์ ๋จผ์ ํด์ฃผ์.
์ ๋ ๋งค๊ฐ๋ณ์ ๋ช
์ dody_says
๋ก ํ ๊ฑฐ๊ตฌ์. ๋งค๊ฐ๋ณ์๋ฅผ ๋ถ๋ฌ์ค์ง ๋ชปํ ๊ฒฝ์ฐ default hello
๋ก ์ถ๋ ฅ๋๊ฒ ํ ๊ฑฐ๋ค.
import React, { useEffect } from 'react';
import remoteConfig from '@react-native-firebase/remote-config';
function App() {
useEffect(() => {
remoteConfig()
.setDefaults({ dody_says: 'default hello' }) // here
.then(() => { console.log('Default values set.') });
}, []);
}
์, default hello
๋ก default ๊ฐ์ด ์ ๋ค์ด๊ฐ๋์ง ํ์ธ์ ํด๋ณด์.
ํ์ธ์ ์ํด์ fetchAndActivate()
๋ด์ฅํจ์๋ฅผ ์ด์ฉํด
Firebase Remote Config๋ฅผ fetch ํ๊ณ , ํ๋ก์ ํธ์์ ํ์ฑํํ๋ ์์
์ด ํ์ํ๋ค.
๊ทธ์ ์์ผ getValue()
๋ก ๋งค๊ฐ๋ณ์ ๊ฐ ํ์ธ์ด ๊ฐ๋ฅํ๋ค.
import React, { useEffect } from 'react';
import remoteConfig from '@react-native-firebase/remote-config';
function App() {
useEffect(() => {
remoteConfig()
.setDefaults({ dody_says: 'default hello' })
// add here
.then(() => remoteConfig().fetchAndActivate())
.then((fetchedRemotely) => {
if (fetchedRemotely) {
console.log(
remoteConfig().getValue('dody_says');
);
}
else {console.log('์คํจ');
});
}, []);
}
์์ ๊ฐ์ด getValue()๋ก dody_says ๊ฐ์ ์กฐํํ๋ฉด ์๊น ์ธํ ํด์คฌ๋ 'default hello' ๊ฐ ์ถ๋ ฅ๋๋ค.
Firebase Remote Config Console๋ก ๋ค์ด๊ฐ ๋งค๊ฐ๋ณ์ ์ถ๊ฐ๋ฅผ ๋๋ฅด๋ฉด ์๋์ ๊ฐ์ด ๋์จ๋ค.
๋งค๊ฐ๋ณ์ ํค๋ก ๋ฏธ๋ฆฌ ์ ํด๋์ dody_says
๋ฅผ ๋ฃ๊ณ ๊ธฐ๋ณธ๊ฐ์ ํ์ํ ๊ฐ์ ๋ฃ๋๋ค.
์ด๋ ๊ฒ ๊ฐ์ ๋ฃ๊ณ ์
๋ฐ์ดํธํ๊ณ ๋ณ๊ฒฝ์ฌํญ์ ๊ฒ์ํ๊ฒ ๋๋ฉด
์ถ๋ ฅ๊ฐ์ด default hello
์์ configured hello
๊ฐ ๋์ค๊ฒ ๋๋ค.
์ด๋ ๊ฒ Firebase Config Remote ์ธํ
์ ๋์ด๋ค.
๋งค๊ฐ๋ณ์ ๊ฐ์ Firebase Console์์ ์ฝ๊ฒ ๋ฐ๊ฟ ์ ์๊ธฐ ๋๋ฌธ์
์ด๋ฒคํธ๋ฐฐ๋ ๊ฐ์ ์ํฉ์ ํค๊ณ ๋๋๋ฐ ๋ง์ด ์ฌ์ฉ๋๊ธฐ๋ ํ๋ค๊ณ ํ๋ค.
codepush๋ก ์ด๋ฒคํธ ๋๊ณ ํค๊ณ ํ๋ ค ํ๋๋ฐ, Remote Config๊ฐ ๋ ์ ์ ํ๊ฑฐ๊ฐ๋ค ใ
ใ
ใ
๋ค์ ๊ธ์์๋ A/B Testing ์คํ์ ๋ง๋ค์ด๋ณด๊ณ ํ ์คํธํด๋ณด์