애드몹 보상형광고 크러시 Admob Reward Close Crash

 

애드몹 보상형광고를 처음 구현해보면

 

유저가 끝까지 영상을 시청하여 보상을 받을 수 있다는 콜백인

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();
}

 

댓글

Designed by JB FACTORY