์ค๋์ ์์ ๋ฒ๊ทธ ๋๊ฐ๋ฅผ ์์ ํ๊ณ , ๋์์์ ๋ณด์ฌ์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ต์ฒด, ์ ๋๋ฆฌํฑ์ค(Analytics) ์ด๋ฒคํธ์ ํ๋ผ๋ฏธํฐ์ ๊ดํ ๋ฌธ์๋ฅผ ์์ฑํ๋ค.
1๏ธโฃ
ํ์ ์์ธ๋ฆฌ๋ทฐ์์๋ ์ ํ๋ธ ๋์์์ ํตํด ํจ์ ์์ดํ ์ ์์ธํ ์ถ์ฒ ๋ฐ์ ์ ์๋ค. ๋ฐ๋ผ์ react-native๋ก ๊ฐ๋ฐํ ์ฑ์์ ๋์์์ ๋ณด์ฌ์ฃผ๋ ๊ธฐ๋ฅ์ด ๊ตฌํ๋์ด ์๋๋ฐ, ๊ธฐ์กด์๋ react-native-youtube-iframe์ ํตํด ์ด ๊ธฐ๋ฅ์ด ๊ตฌํ๋์ด ์์๋ค. ์ด npm ํจํค์ง๋ ๋ค์ดํฐ๋ธ ์ ํ๋ธ ์ฑ๋ณด๋ค ๋ ์์ ์ ์ผ๋ก ์๋ ค์ง ์น๋ทฐ ํ๋ ์ด์ด๋ฅผ ์ฌ์ฉํ์ฌ React Native ์ฑ์ ์์์ ์ฝ์ ํ ์ ์๊ฒ ํด์ค๋ค.
๊ฐ๋ #1
- ๋จผ์ , iframe์ HTML iframe์ ์น ํ์ด์ง ๋ด์ ์น ํ์ด์ง๋ฅผ ํ์ํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
- ๋ค์ดํฐ๋ธ ์ฑ์์ ์น๋ทฐ๋ html์์์ iframe๊ณผ ๋น์ทํ ๊ฐ๋ ์ผ๋ก ๋ค์ดํฐ๋ธ ์ฑ์์ html์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด ์ฌ์ฉ๋๋ View์ด๋ค. (์๋๋ก์ด๋์ ๊ฒฝ์ฐ framework์ ๋ด์ฅ๋ ์ปดํฌ๋ํธ ๋ทฐ(View)ํํ์ธ WebView๋ก ์ฑ์ ์๋ฒ ๋ฉ ํ ์ ์๋ค.)
- ์น๋ทฐ๋ ๋จ์ํ๊ฒ, ์น ํ์ด์ง๋ฅผ ๋ณด๊ธฐ์ํด๋ ์ฌ์ฉํ์ง๋ง, ์๋๋ก์ด๋ ์ฑ ์์์ HTML์ ํธ์ถํ์ฌ ์ฑ์ ๊ตฌํํ๋ ํ์ด๋ธ๋ฆฌ๋ ํํ์ ์ฑ์ ๊ฐ๋ฐํ๋๋ฐ์๋ ๋ง์ด ์ฌ์ฉ๋๋ค.
๊ทธ๋ฐ๋ฐ ios๋ ํ ์คํธ ์ ๋ฌธ์ ๊ฐ ์์๋๋ฐ ์๋๋ก์ด๋ ํ ์คํธ ๊ฒฝ์ฐ ์์ ์ฌ์/์ ์ง, ๋ชจ๋ฌ์ด ์ด๋ฆฌ๊ณ ๋ซํ์ง๊ฐ ์๋ ๋ฑ์ ๋ฒ๊ทธ๊ฐ ์์ด์ ์ด๋ฅผ react-native-youtube-sdk ํจํค์ง๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ๋๋ก ๋ฐ๊พธ๋ ์์ ์ ํ๋ค. ์ด๊ฒ์ ๋ค์ดํฐ๋ธ ์ฑ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ๊ณผ ๊ฐ์ sdk๋ฅผ ์ด์ฉํ์ฌ ๋์์์ ๋ณด์ฌ์ค ์ ์๋ค.
๊ทธ ๊ตฌํ ์์ฒด๋ ๊ธฐ์กด ์ฝ๋ ๋ช์ค๋ง ์์ ํ๋ฉด ๋์ด์ ์ด๋ ต์ง ์์๋๋ฐ, ๋์์ ์ฝ์
์ด ์๊ฐ๋ณด๋ค ๊ฐ๋จํ๊ฒ ๊ตฌํ๋์ด ์๋ ์ ์ด ์ ๊ธฐํ๋ค. ๊ทธ๋ฅ <YouTubePlayer />
์ปดํฌ๋ํธ๋ง ํ๋ผ๋๋ฐ๋ก ์ ์ฌ์ฉํ๋ฉด ๋จ. ๊ทธ๋ฆฌ๊ณ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ ์์ ์๋ YouTubePlayer์ ๋ฉ์๋๋ ref๋ฅผ ์ฌ์ฉํด ์ปดํฌ๋ํธ์ Dom์ ์ ๊ทผํ์ฌ ์ฌ์ฉํ ์ ์๋ค.
2๏ธโฃ
๋! ์ค๋์ ์ฑ์ ์ธ์ฌ์ดํธ๋ฅผ ์๋์ผ๋ก ์ธก์ ํ์ฌ ์ ๊ณตํด์ฃผ๋ firebase Analytics๊ฐ ์ฐ๋ฆฌ ์ดํ์ ์ด๋์ ์ฐ์ด๋์ง์ ๊ดํ ๋ฌธ์๋ฅผ ์์ฑํ๋ฉฐ ์ ๋๋ฆฌํฑ์ค๊ฐ ์ด๋ป๊ฒ ์ฑ์ ์ ์ฉ๋๋์ง ์๊ฒ๋์๋ค.
ํ์์๋ ์ด๋ฏธ (์๋ฆผ๊ธฐ๋ฅ์ ์ ๊ณตํ๋) cloud messaging, (์ค์ ์ฌ์ฉ์๋ค์ด ์ฑ์ ์ฌ์ฉํ๋ฉด์ ๋ฐ์ํ๋ ์ค๋ฅ์ ๋ํด์ ์ฝ๊ฒ ํ์ ํ ์ ์๊ฒ ํด์ฃผ๋) crashlytics, (๋งํฌ๋ง์ผ๋ก๋ ์ฑ์ ์ํ๋ ์ปจํ ์ธ ์ ๋๋ฌํ ์ ์๊ฒ๋ ํด์ฃผ๋ (์ฑ์ด ์ค์น ๋์ด ์์ง ์์๋ ์ค์น ํ ๊ทธ ๋งํฌ๋ก ๊ฐ๊ฒ ํด์ค)) dynamic Link ๋ฑ์ ๋ง์ ๊ธฐ๋ฅ๋ค์ react native firebase ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ฌ์ฉํ๊ณ ์์ผ๋ฏ๋ก Firebase Analytics๋ฅผ ์ฌ์ฉํ๋ค๊ณ ํ๋ค.
์ด๋ฏธ ๊ธฐ๋ฅ์ ๊ตฌํ๋์ด์์์ง๋ง ๊ตฌํ๋ ์ฝ๋๋ฅผ ํตํด ์ด๋ค ๊ณณ์์ ์ธ์ฌ์ดํธ๋ฅผ ์ธก์ ํ๋์ง, ์ด๋ป๊ฒ ์ฑ์ ์ ๋๋ฆฌํฑ์ค๋ฅผ ์ ์ฉํ๋์ง ์๊ฒ๋์๋ค.
๊ฐ๋ #2
- Predefined Events: Firebase๊ฐ ๋ฏธ๋ฆฌ ์ ์ํด๋์ ์ด๋ฒคํธ๋ค
(์ด๋ฒคํธ ์ ํ์ ๋ฐ๋ผ ๋ง์ถค ๋ณด๊ณ ์๊ฐ ์ ๊ณต๋๋ฏ๋ก ๋๋๋ก ๊ธฐ๋ณธ ์ด๋ฒคํธ๋ฅผ ์ฌ์ฉํ๋ฉด ์ข๋ค!)- Custom Event: ์ด๋ฆ๊ณผ ๋ฐ์ดํฐ๋ฅผ ์ง์ ์ค์ ํ ์ปค์คํ ์ด๋ฒคํธ
(ํ๋ก์ ํธ๋น ๊ณ ์ Parameter๋ฅผ ์ต๋ 50๊ฐ๊น์ง๋ง ์ค์ ํ ์ ์์ผ๋ฏ๋ก ๋จ์ฉํ๋ฉด Parameter ๊ฐ์์ ํ์ ๊ฑธ๋ ค ์ ์จ ์์งํ ๋ฐ์ดํฐ๋ฅผ ๋ ๋ฆด ์๋ ์๋ค)
// Predefined Events ์ฌ์ฉ ์) ์์ดํ
๋ํ
์ผ ํ์ด์ง ์ ๊ทผ์ ํธ์ถ
export const logViewItem = async (item: IItem) => {
await analytics.logViewItem({
items: [ItemSerializer(item)],
});
};
// Custom Event ์ฌ์ฉ ์) ์ข์์ ํด๋ฆญ ์ ํธ์ถ
export const logLikeReview = async (
content_type: string,
content_id: string,
) => {
await analytics.logEvent('like_review', {
content_type,
content_id,
});
};
3๏ธโฃ
๊ทธ๋์ ํ ์ด ๋ญ๊ฐ์?
Hook์ ํจ์ ์ปดํฌ๋ํธ์์ ๋ฆฌ์กํธ state์ ์๋ช ์ฃผ๊ธฐ ๊ธฐ๋ฅ์ ์ฐ๋ํ ์ ์๊ฒ ํด์ฃผ๋ ํจ์๋ก, class ์์ด ๋ฆฌ์กํธ์ ๋ชจ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์๊ฒ ํด์ค๋๋ค. (Hook์ class์์์๋ ๋์ํ์ง ์์ต๋๋ค)
๋งค๋ฒ ์คํ๋์ง ์๋ ์ฝ๋ ๋ผ์ธ์ผ๋ก ๋ฆฌ์กํธ ์ฝ์ด๊ฐ ์คํ ์ฌ๋ถ๋ฅผ ๊ฒฐ์ ํํฉ๋๋ค. ๋ฐ๋ผ์ ๋งค๋ฒ ์คํํ๊ณ ์ถ์ง ์์ ๋ก์ง๋ค์ ์ ๋ ๊ณณ.
ํ ๊ฒ์ฌ ๋ก์ง
// ์ด๋ฌ๋ฉด ์๋จ
items.forEach(() โ {
const [liking, setLiking] = useState(false);
});
// ์๋ฌ๋จ
const {data} = useItem(id);
if(!data) {
return <></>;
}
const [liking, setLiking] = useState(false);
ํ ์ด ์ ์ข๋์?
ํ ์ ์ฌ์ฉํ๋ฉด ์ปดํฌ๋ํธ๋ก๋ถํฐ ์ํ ๊ด๋ จ ๋ก์ง๋ค์ ์ถ์ํ ํ ์ ์๊ฒ ๋์ด ๋ ์ง์ ์ธ ํ ์คํธ์ ๋ก์ง ์ฌ์ฌ์ฉ์ ๊ฐ๋ฅํ๊ฒ ํด์ค๋๋ค.
ํด๋์ค์ componentDidMount, componentDidUpdate, componentWillUnmount์์ ์๋ช
์ฃผ๊ธฐ ๋ฉ์๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ํํ๋ ์ฝ๋๋ค์
ํ
์ ํตํด ๋ก์ง์ ๊ธฐ๋ฐ์ ๋ ์์ ํจ์๋ก ์ปดํฌ๋ํธ๋ฅผ ๋๋ ์ ์์ต๋๋ค.
โ Event listener ์ ์, ๋ฐ์ธ๋ฉ, ๋ฐ์ธ๋ฉ ํด์ 3๊ฐ์ง๋ฅผ 1๊ฐ์ง hook์์ ๊ฐ์ด ํ ์ ์์ต๋๋ค.
ํด๋์ค ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ ๋๋ณด๋ค ๊ฐ๊ฒฐํ ์ฝ๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
ํ ์ด ์์ผ๋ฉด ์ ์ ์ข๋์?
class ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ stateful ์ฝ๋๋ฅผ ์ฌ์ฌ์ฉํ๊ธฐ ์ํด HOC(๊ณ ์ฐจํจ์ ์ปดํฌ๋ํธ) ๋๋ render props์ ํํ๋ก state ๊ฐ์ ๋ถ๋ชจ ์ปดํฌ๋ํธ๋ก๋ถํฐ ์ ๋ฌ ๋ฐ์ ์ฌ์ฉํฉ๋๋ค. ์ด๋ฌํ ๊ฒฝ์ฐ ์ฝ๋๊ฐ ์ง๊ด์ ์ด์ง ์๊ณ Wrapper Hell์ ๋น ์ง๊ฒ ๋ฉ๋๋ค.
React ๋ ๋๋ง ์ดํด ๋ฐ ์ต์ ํ (With Hook)
๋ฆฌ์กํธ๋ ์ด๋ป๊ฒ ๋์?
์กฐ๋ํ์ ๋ธ๋ก๊ทธ:์๋๋ก์ด๋ ์น๋ทฐ(Webview)์ ์ดํด์ ์ฑ๋ฅ ์ต์ ํ ๋ฐฉ์
Firebase Analytics, BigQuery์์ด ์ด๋๊น์ง ๊ฐ๋ฅํ ๊น