GoogleMobileAds-v8 부터 광고 불러오는 방식이 변경 됐다고 해서 적용해 봤습니다.
뭐가 좋아졌는지는 알 수 없으나. V8 이후 나올 버전에서는 변경된 방식으로 사용될 거기에
미리 적용해 봤습니다.
어웨이크나 스타트에서 미리 광고를 로드해도 또는 광고 보기 버튼에서 다시 로드해도 늘 처리가 늦기에
이번에는 미리 캐싱한 후 사용했더니 전보다 훨씬 빠르고 안정적으로 광고 불러오기가 되더군요.
제가 사용하는 코드 첨부 하오니 필요하신 분들은 퍼가세요~
public static AdmobManager Inst;
private void Awake()
{
if (Inst == null)
{
Inst = this;
DontDestroyOnLoad(gameObject);
}
else Destroy(gameObject);
}
private const bool IsTestMode = true;
private RewardedAd[] _rewardedAds; // RewardedAd 배열 선언
private int _currentAdIndex; // 현재 보여주고 있는 광고 인덱스
private bool _adReloadComplete;
private const int AddCachCount = 2;
private void Start()
{
_currentAdIndex = 0;
MobileAds.Initialize(HandleInitCompleteAction);
}
private static AdRequest CreateAdRequest() { return new AdRequest.Builder().Build(); }
private void HandleInitCompleteAction(InitializationStatus initstatus) { MobileAdsEventExecutor.ExecuteInUpdate(() => { StartCoroutine(LoadRewardAd()); }); }
private IEnumerator LoadRewardAd()
{
_adReloadComplete = false;
_rewardedAds = new RewardedAd[AddCachCount];
for (var i = 0; i < _rewardedAds.Length; i++)
{
var i1 = i;
RewardedAd.Load(IsTestMode ? RewardTestID : RewardID, CreateAdRequest(), (RewardedAd ad, LoadAdError loadError) =>
{
_rewardedAds[i1] = ad;
ad.OnAdFullScreenContentClosed += RewardCompletion;
if (_rewardedAds.Any(ad1 => ad1 == null)) return;
_adReloadComplete = true;
});
yield return new WaitForSeconds(0.01f);
}
if (!_adReloadComplete) { yield return null; }
}
private static void RewardCompletion()
{
//광고 보상 설정
}
public void ShowRewardAd()
{
var rewardedAd = _rewardedAds[_currentAdIndex];
rewardedAd.Show((Reward reward) => { });
_currentAdIndex++;
if (_currentAdIndex < _rewardedAds.Length) return;
StartCoroutine(LoadRewardAd()); //광고 소진 리로드
_currentAdIndex = 0;
}
'개발일지' 카테고리의 다른 글
'오직 승리' 방치형 개발 중 UI 변경 완료 (0) | 2023.05.14 |
---|---|
오직 승리 - 방치형 개발일지(1) (0) | 2023.05.01 |
보스 - 문지기 노르베르트 (0) | 2023.04.08 |
타원 함수 (0) | 2023.04.03 |
1인 개발의 시작 (0) | 2023.04.03 |
댓글