+ AdMob을 사용하기 위해 앱에 세팅하는 부분도 참고 할 것 --> app.json부분
import React, { useEffect } from 'react';
import {View, Image, Text, StyleSheet,TouchableOpacity,Platform} from 'react-native'
// OS구분을 위해 Platfrom도구를 리액티 네이티브에서 불러옴
import {
setTestDeviceIDAsync,
AdMobBanner,
AdMobInterstitial,
PublisherBanner,
AdMobRewarded
} from 'expo-ads-admob';
//expo-ads-admob에서 광고 태그와 관련된 도구들을 가져옴
// 이번에는 전면 배너이므로 AdMobInterstitial을 태그로 사용할 것
//MainPage로 부터 navigation 속성을 전달받아 Card 컴포넌트 안에서 사용
export default function Card({content,navigation}){
useEffect(()=>{
// Card.js에 들어오자마자 전면 광고 준비하느라 useEffect에 설정
//애드몹도 외부 API 이므로 실행 순서를 지키기위해 async/await 사용!
//안드로이드와 IOS 각각 광고 준비 키가 다르기 때문에 디바이스 성격에 따라 다르게 초기화 시켜줘야 합니다.
// 사용법에 따르면 전면배너는 처음에 초기화 과정이 필요함
//--> 아래는 초기화 과정
// ios, 안드로이드 키가 다르므로 구분지어 키 세팅
Platform.OS === 'ios' ? AdMobInterstitial.setAdUnitID("ca-app-pub-6657385184009422/7612224181") : AdMobInterstitial.setAdUnitID("ca-app-pub-6657385184009422/8542162476")
// 광고를 불러올 때 실행되는 리스너
AdMobInterstitial.addEventListener("interstitialDidLoad", () =>
console.log("interstitialDidLoad")
);
// 광고를 불러오는 데 실패하면 실행되는 리스너 --> 오류 리스너
AdMobInterstitial.addEventListener("interstitialDidFailToLoad", () =>
console.log("interstitialDidFailToLoad")
);
// 광고가 시작될 때 실행되는 리스너
AdMobInterstitial.addEventListener("interstitialDidOpen", () =>
console.log("interstitialDidOpen")
);
// 광고가 끝날 때 실행되는 리스너
AdMobInterstitial.addEventListener("interstitialDidClose", () => {
//광고가 끝나면 다음 코드 줄이 실행!
console.log("interstitialDidClose")
navigation.navigate('DetailPage',{idx:content.idx})
//--> 광고가 끝나면 해당 파일로 이동
// (클릭시 해당 파일로 이동하기 전에 띄워주는 전면광고이기 때문)
});
},[])
const goDetail = async () =>{
// 외부 API에 대한 함수이므로 async await 처리
// 개인 맞춤 광고 true
await AdMobInterstitial.requestAdAsync({ servePersonalizedAds: true});
// 광고 시작 코드
await AdMobInterstitial.showAdAsync();
}
return(
//카드 자체가 버튼역할로써 누르게되면 상세페이지로 넘어가게끔 TouchableOpacity를 사용
<TouchableOpacity style={styles.card} onPress={()=>{goDetail()}}>
{/* 해당 컴포넌트가 클릭되면 위의 goDetail함수가 실행되면서 광고 시작*/}
<Image style={styles.cardImage} source={{uri:content.image}}/>
<View style={styles.cardText}>
......
전면 배너의 경우, 사용 설명서에 따르면 초기화가 필요하므로 useEffect에서 초기화 (AdMob 광고키 셋팅, 리스너 설정)
특히 리스너 중에
// 광고가 끝날 때 실행되는 리스너
AdMobInterstitial.addEventListener("interstitialDidClose", () => {
//광고가 끝나면 다음 코드 줄이 실행!
console.log("interstitialDidClose")
navigation.navigate('DetailPage',{idx:content.idx})
//--> 광고가 끝나면 해당 파일로 이동
// (클릭시 해당 파일로 이동하기 전에 띄워주는 전면광고이기 때문)
});
의 경우 광고가 끝나면서 본래 나타나야 될 파일로 이동하는 부분으므로 좀더 신경써서 봐야한다.
이후
--> goDetail 함수를 만들고 광고 시작 코드를 넣어 광고를 시작한다.
(이외에는 위의 전체 코드 살펴볼 것)