애드몹 보상형광고를 처음 구현해보면
유저가 끝까지 영상을 시청하여 보상을 받을 수 있다는 콜백인
rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
광고가 닫혔다는 콜백인
rewardedAd.OnAdClosed += HandleRewardedAdClosed;
두 개가 주어진다. 평범하게 생각해보면 보상을 받을 수 있다는 콜백에서 플래그를 세우고,
광고가 닫혔다는 콜백에서는 플래그를 검사해서 보상을 지급하면 될 것 같다.
틀린 예시
private void HandleUserEarnedReward(object sender, Reward args)
{
curVideoCompleteReward = true;
}
private void HandleRewardedAdClosed(object sender, EventArgs args)
{
endRewardAction?.Invoke(curVideoCompleteReward);
endRewardAction = null;
}
하지만 이렇게 구현하면 크러시가 난다!
쓰레드충돌 문제라고 하는데, 한프레임 쉬거나 OnApplicationFocused로 콜백은 받은 후 진행해야한다!
한프레임 쉬는 예
private bool endVideo = false;
private bool curVideoCompleteReward = false;
void Update()
{
if (endVideo)
{
endVideo = false;
endRewardAction?.Invoke(curVideoCompleteReward);
endRewardAction = null;
curVideoCompleteReward = false;
}
}
public void ShowAd(Action<bool> endRewardAction)
{
this.endRewardAction = endRewardAction;
if (rewardedAd.IsLoaded())
rewardedAd.Show();
}
private void HandleUserEarnedReward(object sender, Reward args)
{
curVideoCompleteReward = true;
}
private void HandleRewardedAdClosed(object sender, EventArgs args)
{
CreateAndLoadRewardedAd();
endVideo = true;
}
복귀 기다리는 예
private bool curVideoCompleteReward = false;
void OnApplicationFocus(true focus)
{
if(focus)
{
if(curVideoCompleteReward)
{
endRewardAction?.Invoke(curVideoCompleteReward);
endRewardAction = null;
curVideoCompleteReward = false;
}
}
}
public void ShowAd(Action<bool> endRewardAction)
{
this.endRewardAction = endRewardAction;
if (rewardedAd.IsLoaded())
rewardedAd.Show();
}
private void HandleUserEarnedReward(object sender, Reward args)
{
curVideoCompleteReward = true;
}
private void HandleRewardedAdClosed(object sender, EventArgs args)
{
CreateAndLoadRewardedAd();
}
'🌍 Unity > 에셋, 플러그인' 카테고리의 다른 글
Unity Facebook Keytool not found. 오류 (0) | 2020.10.11 |
---|---|
Play NANOO SDK 에서 시간 불러오기 (0) | 2020.09.21 |
GPGS 세팅 / 오류 해결 (0) | 2020.04.02 |
유니티 프로모션용 영상/동영상 촬영 (1) | 2020.02.16 |
유니티에서 프로모션용 고해상도 스크린샷찍기 (0) | 2020.02.15 |