수익 창출 세팅
with Google AdMob
https://apps.admob.com
->로그인 및 개인정보 등록 1~2일 소요
AdMob설치 패키지
expo install expo-ads-admob
app.json 추가 설치 코드 (key값들을 연결하는 과정)
"ios": {
"supportsTablet": true,
"buildNumber": "1.0.0",
"bundleIdentifier": "com.myhoneytip.yoon",
"config": {
"googleMobileAdsAppId": ""
}
},
"android": {
"package": "com.myhoneytip.yoon",
"versionCode": 1,
"config": {
"googleMobileAdsAppId": ""
}
},
config에 첫번째 key값을 연결하면 된다.(프로젝트 key)
두번째 key값은 실제 페이지단에서 배너를 보여주고 싶은 곳에 적용하면 된다.
import { setTestDeviceIDAsync, AdMobBanner, AdMobInterstitial, PublisherBanner, AdMobRewarded } from 'expo-ads-admob';
현재 AdMobBanner만 활성화 되어 있음
카드를 뿌린뒤 가장 하단에 광고를 삽입
{Platform.OS === 'ios' ? (
//IOS부분
<AdMobBanner
bannerSize="fullBanner"
servePersonalizedAds={true}
adUnitID="ca-app-pub-3721989723201140/5070926917"
style={styles.banner}
/>
) : (
//Android부분
<AdMobBanner
bannerSize="fullBanner"
servePersonalizedAds={true}
adUnitID="ca-app-pub-5579008343368676/9202552776"
style={styles.banner}
/>
)}
AdMobInterstitial만 사용
useEffect(()=>{
// Card.js에 들어오자마자 전면 광고 준비하느라 useEffect에 설정
//애드몹도 외부 API 이므로 실행 순서를 지키기위해 async/await 사용!
//안드로이드와 IOS 각각 광고 준비 키가 다르기 때문에 디바이스 성격에 따라 다르게 초기화 시켜줘야 합니다.
Platform.OS === 'ios' ? AdMobInterstitial.setAdUnitID("ca-app-pub-3721989723201140/4531020806") : AdMobInterstitial.setAdUnitID("ca-app-pub-5579008343368676/4903859898")
//로딩 후
AdMobInterstitial.addEventListener("interstitialDidLoad", () =>
console.log("interstitialDidLoad")
);
//로딩 실패 후
AdMobInterstitial.addEventListener("interstitialDidFailToLoad", () =>
console.log("interstitialDidFailToLoad")
);
//광고를 보고 있을 때
AdMobInterstitial.addEventListener("interstitialDidOpen", () =>
console.log("interstitialDidOpen")
);
//광고가 끝났을 때
AdMobInterstitial.addEventListener("interstitialDidClose", () => {
//광고가 끝나면 다음 코드 줄이 실행!
console.log("interstitialDidClose")
});
},[])
const goDetail = async () =>{
try {
//광고를 준비할 때, 어떻게? -> 개인화를 통해서!
await AdMobInterstitial.requestAdAsync({ servePersonalizedAds: true});
// 전면 광고를 실행
await AdMobInterstitial.showAdAsync();
// 광고 이후 페이지로 이동
await navigation.navigate('DetailPage',{idx:content.idx})
} catch (error) {
console.log(error)
//실패하면 그냥 바로 디테일로
Alert.alert("광고 스킵됨");
await navigation.navigate('DetailPage',{idx:content.idx})
}
}
return(
//카드 자체가 버튼역할로써 누르게되면 상세페이지로 넘어가게끔 TouchableOpacity를 사용
<TouchableOpacity style={styles.card} onPress={()=>{goDetail()}}>
<Image style={styles.cardImage} source={{uri:content.image}}/>
<View style={styles.cardText}>
<Text style={styles.cardTitle} numberOfLines={1}>{content.title}</Text>
<Text style={styles.cardDesc} numberOfLines={3}>{content.desc}</Text>
<Text style={styles.cardDate}>{content.date}</Text>
</View>
</TouchableOpacity>
)