问题描述
我制作了一款安卓游戏。我在测试模式关闭的情况下添加了一些广告,然后我将游戏发布给内部测试人员并且广告有效,因此我修复了游戏中的一些问题并将游戏发布到 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,因为它会覆盖所有内容。