์๋๋ก์ด๋ ์ฑ ์ถ์ํ๋ ๊ณผ์ ์์ ์ ๋๋ชน ํ ์คํธ ID ์ค์ ํ๋๋ฒ ์ ๋ฆฌ
๊ฐ๋ฐ ์ค์๋ ํ ์คํธ ๊ด๊ณ ๋ฅผ ์ฌ์ฉํ์ฌ ๊ด๊ณ ๋ฅผ ํด๋ฆญํด๋ Google ๊ด๊ณ ์ฃผ์๊ฒ ๋น์ฉ์ด ์ฒญ๊ตฌ๋์ง ์๊ฒ ํ๋ ๊ฒ์ด ์ค์
์ค์ ๊ด๊ณ ์ฌ์ฉํ๊ฒ๋๋ฉด ๋ฌดํจ ํด๋ฆญ์ผ๋ก ๊ณ์ ์ ์ง ๋นํ ์ ์์
npx install react-native-google-mobile-ads
์ ๋๋ชน์์ ์ฑ ์ถ๊ฐ ํ๊ณ , ๋์ค๋ APP ID ๋ณต์ฌ
๊ด๊ณ ํ์๋ฐ๋ชจ ๊ด๊ณ ๋จ์ ID
์ฑ ์คํ๋ ๊ด๊ณ | ca-app-pub-3940256099942544/9257395921 |
์ ์ํ ๋ฐฐ๋ | ca-app-pub-3940256099942544/9214589741 |
๊ณ ์ ํฌ๊ธฐ ๋ฐฐ๋ | ca-app-pub-3940256099942544/6300978111 |
์ ๋ฉด ๊ด๊ณ | ca-app-pub-3940256099942544/1033173712 |
๋ณด์ํ ๊ด๊ณ | ca-app-pub-3940256099942544/5224354917 |
๋ณด์ํ ์ ๋ฉด ๊ด๊ณ | ca-app-pub-3940256099942544/5354046379 |
๋ค์ดํฐ๋ธ | ca-app-pub-3940256099942544/2247696110 |
๋ค์ดํฐ๋ธ ๋์์ | ca-app-pub-3940256099942544/1044960115 |
app.json์ ํด๋น ID ์ ์ฉ ( APP ID ์ !! ๊ด๊ณ ๋จ์ ID๊ฐ ์๋!!!)
"plugins": [
"expo-router",
[
"react-native-google-mobile-ads",
{
"androidAppId": "ca-app-pub-xxxxxxxx~xxxxxxxx", // replace with your AppID
"iosAppId": "ca-app-pub-xxxxxxxx~xxxxxxxx" // replace with your AppID
}
]
]
testID ๋ฅผ ์ฌ์ฉํด์ ์ต์ข ์ ์ผ๋ก ๋ฐฐ๋ ๊ด๊ณ ๋ฅผ ์ฝ์ ํฉ๋๋ค
import { Tabs } from 'expo-router';
import { Text, View, StyleSheet, Platform } from 'react-native';
import { BannerAd, BannerAdSize, TestIds } from "react-native-google-mobile-ads";
export default function TabLayout() {
// Use TestIds in development, real ad unit ID in production
const adUnitId = __DEV__
? TestIds.BANNER
: "ca-app-pub-3940256099942544/9214589741";
return (
<View style={styles.container}>
<View style={styles.tabContainer}>
<Tabs
screenOptions={{
headerShown: false,
tabBarActiveTintColor: '#007AFF',
tabBarInactiveTintColor: '#8E8E93',
}}
>
<Tabs.Screen
name="index"
options={{
title: 'ํ',
tabBarIcon: ({ color }) => (
<Text style={{ fontSize: 24, color }}>๐ </Text>
),
}}
/>
<Tabs.Screen
name="calculator"
options={{
title: '๋ฐฐ๋น ํฌ์ ๊ณ์ฐ๊ธฐ',
tabBarIcon: ({ color }) => (
<Text style={{ fontSize: 24, color }}>๐งฎ</Text>
),
}}
/>
<Tabs.Screen
name="etf-list"
options={{
title: 'ETF ๋ชฉ๋ก',
tabBarIcon: ({ color }) => (
<Text style={{ fontSize: 24, color }}>๐</Text>
),
}}
/>
</Tabs>
</View>
<View style={styles.bannerContainer}>
<BannerAd
unitId={adUnitId}
size={BannerAdSize.ANCHORED_ADAPTIVE_BANNER}
requestOptions={{
requestNonPersonalizedAdsOnly: true,
networkExtras: {
collapsible: "bottom",
},
}}
/>
</View>
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
},
tabContainer: {
flex: 1,
},
bannerContainer: {
width: '100%',
backgroundColor: 'transparent',
position: 'absolute',
bottom: Platform.OS === 'ios' ? 83 : 60, // Adjusted for tab bar height
alignItems: 'center',
},
});
๋ฐฐ๋๊ด๊ณ ์ธ ๋ค๋ฅธ๊ฒ๋ค์ ๊ณต์๋ฌธ์ ์์ ํ์ธ๊ฐ๋ฅ
์คํ
*Expo Go ๋ ์ ๋๋ชน ํธํ์ด ์๋๋ค
๋ก์ปฌ์์ ์๋ํ๋ EAS ๋น๋ ํ๊ฒฝ์ ์ค์ ํ๊ฑฐ๋ ์์คํฌ์์ ์ ๊ณตํ๋ ํด๋ผ์ฐ๋ ๋น๋๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค
๊ทธ๋ฌ๋, EAS๋ ํด๋ผ์ฐ๋ ์๋น์ค ์์ด๋ ๋ก์ปฌ์์ ์์คํฌ ์ฑ์ ๋น๋ํ ์ ์๋ค
npx expo prebuild
์๋๋ก์ด๋ ํ๊ฒฝ์์๋ง ํ๋ค๋ฉด,
npx expo prebuild --platform android
์ฑ๊ณตํ๋ฉด,
npx expo run:android
// if you have iOS
npx expo run:ios
Using development build ์ธ์ง ํ์ธ, EXpo Go๋ ์๋จ
์ค๋ฅ ๋ฐ์ ์
npx expo prebuild --clean
๋์ค์ ์ค์ ์ถ์ ์ ad unit ID ๋ฐ๊พธ๋ ๊ฒ ์์ง ์๊ธฐ!!