广告不适用于 android 游戏的生产版本

问题描述

我制作了一款安卓游戏。我在测试模式关闭的情况下添加了一些广告,然后我将游戏发布给内部测试人员并且广告有效,因此我修复了游戏中的一些问题并将游戏发布到 Playstore 进行生产。

现在游戏已在 Playstore 上架,广告不起作用。广告显示需要一些时间吗?在统一货币化仪表板上有一个弹出窗口,我需要更新包名称,我做到了,但尽管 Playstore 列表显示我的应用包含广告,但广告仍未显示

我的代码是:

public string gameId = "ihavemygameidhere";

public bool testMode = true;
void Start()
{
    // Initialize the Ads service:
    Advertisement.Initialize(gameId,testMode);
}

public void ShowInterstitialAd()
{
    // Check if UnityAds ready before calling Show method:
    if (Advertisement.IsReady())
    {
        Advertisement.Show();
    }
    else
    {
        Debug.Log("Interstitial ad not ready at the moment! Please try again later!");
    }
}

解决方法

当广告未准备好时,这意味着广告服务器尚未发送要查看的广告。我建议将 IsReady() 检查放在 Coroutine 中,然后在播放器等待时显示加载屏幕 UI。如果 IsReady() 总是失败,我也会在一段时间内失败。

[SerializeField] private GameObect LoadingUI = null;
private float waitTime = 5f;

public void ShowInterstitialAd()
{
    StartCoroutine(ShowAd());
}

private IEnumerator ShowAd()
{
    float currentTime = 0.0f;
    
    LoadingUI.SetActive(true);
    
    while(currentTime <= waitTime && !Advertisement.IsReady())
    {
         currenTime += Time.deltaTime;
         yield return null;
    }
    
    // show the ad if it is now ready
    if(Advertisement.IsReady())
    {
         Advertisement.Show();   
    }
    else
    {
        Debug.LogError("Error: Ad was not able to be loaded in " + waitTime + " seconds!");
    }   
    
    LoadingUI.SetActive(false);
}

确保在检查器中为 LoadingUI 对象分配一些对象,以便玩家无法再次点击查看广告,或者只是在广告尝试加载时阻止所有输入的某些 UI。我会使用 ScreenOverlay UI,因为它会覆盖所有内容。