여러 번 클릭하면 Google AdMob 광고가 표시됨

Aug 20 2020

게임에 보상 형 동영상 광고를 표시하기 위해 Google AdMob을 사용하고 있습니다. 게임이 끝나면 비디오 재생 버튼이 활성화됩니다. 사용자가이를 클릭하면 "광고를보고 플레이어를 되 살리시겠습니까?"라는 패널이 열립니다. 두 가지 옵션이 있습니다. 하나는 "ok"를 누르고 다른 하나는 "x"를 취소하는 것입니다. 문제는 광고가 표시 되려면 "확인"을 여러 번 클릭해야한다는 것입니다. "확인"을 몇 번 클릭해도 광고가 전혀 표시되지 않는 경우가 있습니다. adscript에있는 코드는 다음과 같습니다.

public class AdScript : MonoBehaviour
{

string App_ID = "ca-app-pub-123454545~12345678";

string Video_Ad_Id = "ca-app-pub-3940256099942544/5224354917";

private RewardedAd rewardedAd;

void Start()
{
    MobileAds.Initialize(App_ID);        
}

public void RequestRewardBasedVideo()
{
    
    this.rewardedAd = new RewardedAd(Video_Ad_Id);
    AdRequest request = new AdRequest.Builder().Build();
    
    this.rewardedAd.LoadAd(request);
    this.rewardedAd.OnAdLoaded += HandleRewardedAdLoaded;
    
    this.rewardedAd.OnAdFailedToLoad += HandleRewardedAdFailedToLoad;
    
    this.rewardedAd.OnAdOpening += HandleRewardedAdOpening;
    
    this.rewardedAd.OnAdFailedToShow += HandleRewardedAdFailedToShow;
   
    this.rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
   
    this.rewardedAd.OnAdClosed += HandleRewardedAdClosed;
}

public void ShowVideoRewardAd()
{
    if (this.rewardedAd.IsLoaded())
    {
        this.rewardedAd.Show();
    }
}

public void HandleRewardedAdLoaded(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleRewardedAdLoaded event received");
}

public void HandleRewardedAdFailedToLoad(object sender, AdErrorEventArgs args)
{
    MonoBehaviour.print(
        "HandleRewardedAdFailedToLoad event received with message: "
                         + args.Message);
}

public void HandleRewardedAdOpening(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleRewardedAdOpening event received");
}

public void HandleRewardedAdFailedToShow(object sender, AdErrorEventArgs args)
{
    MonoBehaviour.print(
        "HandleRewardedAdFailedToShow event received with message: "
                         + args.Message);
}

public void HandleRewardedAdClosed(object sender, EventArgs args)
{
    this.RequestRewardBasedVideo();
}

public void HandleUserEarnedReward(object sender, Reward args)
 {
    GameManager.instance.ReceiveReward();
 }
}

RequestRewardBasedVideo () 함수가 동영상 재생 버튼에 추가되고 ShowVideoRewardAd ()가 "확인"버튼에 추가됩니다. 테스트 광고는 제대로 표시되지만 문제는 광고가 표시 되려면 확인 버튼을 여러 번 눌러야한다는 것입니다. 왜 이런 일이 일어나는지 잘 모르겠습니다. 누군가 도와 주시겠습니까?

답변

EdMarty Aug 21 2020 at 06:03

광고가로드되는 데 시간이 걸릴 수 있습니다. 오랜만이야. 사실 저는 보통 앱 실행시 첫 번째 광고를로드하기 시작하고 이전 광고 재생이 끝난 직후 다음 광고를로드하기 시작했습니다.

내 추측은 이것이다 :

public void ShowVideoRewardAd()
{
    if (this.rewardedAd.IsLoaded())
    {
        this.rewardedAd.Show();
    }
}

광고가 실제로로드 될 때까지 버튼을 탭할 때마다 Show 호출을 건너 뛰는 것입니다.

내 제안은 IsLoaded가 true를 반환하지 않는 한 광고를 보는 옵션도 표시하지 않는 것입니다. 또는 IsLoaded가 false 인 경우 사용자가 동영상을보기 위해 탭할 때 "잠시 기다려주십시오"대화 상자를 표시하고 HandleRewardedAdLoaded 또는 HandleRewardedAdFailedToLoad가 호출 될 때까지 기다릴 수 있습니다.

Vaillancourt Aug 20 2020 at 20:42

여기서는 대단한 추측을 할 것입니다 (실제로 두 번 추측).

첫 번째 추측은 첫 번째 광고를로드하려고하면 광고 프레임 워크가 아직 완전히 초기화되지 않았다는 것입니다. 에 기초 문서 , 당신이에 콜백을 전달할 수 보인다 MobileAds.Initialize();초기화가 완료되면 호출 될 것이라고. 첫 번째 광고를 요청하기 전에 초기화가 제대로 완료 될 때까지 기다려야합니다. 언뜻보기에는이 작업을 정확히 수행하는 방법에 관한 문서가 상당히 나쁘기 때문에이를 달성 할 수있는 방법에 대해 자세히 알아 보려면 좀 더 자세히 알아 보는 것이 좋습니다.

두 번째 추측은 이벤트 핸들러를 설정하기 전에 광고를로드하려고한다는 것입니다. 문서를 다시 살펴보면 그들은

// Create an empty ad request.
AdRequest request = new AdRequest.Builder().Build();
// Load the rewarded ad with the request.
this.rewardedAd.LoadAd(request);

이벤트 리스너를 설정 한 후 추측은 "LoadAd"에 요청하자마자 프레임 워크는 그 순간에 리스너 목록을 가져 와서 비동기 작업을 수행하고 호출 시점에 제공 한 메소드를 호출합니다. LoadAd를 호출하는 순간에는 리스너가 없었으므로 "아무것도 일어나지 않음"이 표시되고 "여러 번 탭"해야하는 이유입니다. 첫 번째 시도에서는 리스너가없고 리스너는 두 번째에만 있습니다.