Unity广告在真实设备上无法工作

3

在我的Unity程序中,我希望实现广告功能。当我在Unity编辑器中运行游戏时,广告可以正常工作,但是当我尝试在我的iPhone 7或iPad Air上运行广告时,没有广告显示出来。请问有人知道我做错了什么吗?

using UnityEngine;
using UnityEngine.SceneManagement;
using UnityEngine.Advertisements;

public class GameManager : MonoBehaviour
{

void Start()
{
    Advertisement.Initialize("Appstore-id");
}

bool gameHasEnded = false;

public float restartDelay = 1f;
public float addDelay = 1f;

public GameObject completeLevelUI;

public void CompleteLevel ()
{
    completeLevelUI.SetActive(true);
    Invoke("ShowAdd", addDelay);
}

public void EndGame()
{
    if (gameHasEnded == false)
    {
        gameHasEnded = true;
        Debug.Log("Game over");
        Invoke("Restart", restartDelay);
    }

}

public void ShowAdd()
{

    if (Advertisement.IsReady())
    {
        Advertisement.Show ();
    }
}

void Restart()
{
    SceneManager.LoadScene(SceneManager.GetActiveScene().name);
}

}

1
@Eddge https://docs.unity3d.com/ScriptReference/MonoBehaviour.Invoke.html Invoke 接受第二个参数,该参数指定在调用该方法之前应该经过多少时间(至少)。 - AndreasHassing
@AndreasBjørnHassingNielsen 是的,我意识到了哈哈。 - AresCaelum
2个回答

2
我遇到了同样的问题,我通过递归函数解决了它,直到广告准备好为止。类似这样的代码:
IEnumerator ShowAd()
{
    yield return new waitForSeconds(1);
    if (Advertisement.IsReady())
    {
        Advertisement.Show ();
    }
    else { StartCoroutine(ShowAd()); }
}

这样它会一直调用该方法,直到广告准备好显示。 同时,请确保您在Unity Ads设置中启用了测试(或调试)模式。


谢谢您的快速回复,我会尝试一下并看看它是否也适用于我。 - Griffin Teurlings
即使我将其更改为“ShowAdd”,仍然会出现错误。 - Griffin Teurlings
@GriffinTeurlings,你是在调用StartCoroutine而不是invoke吗? - AresCaelum
[与问题无关]: @Mykod,既然我们已经在协程中了,那么在else块中yield return ShowAd();不就足够了吗? - AndreasHassing
@AndreasHassing 可能是这样,不过我还没有测试过。 - Mykod
显示剩余2条评论

0

除了递归启动IEnumerator之外,还有另一个选项:

IEnumerator ShowAd() 
{
    while(!Advertisement.isReady()) 
    {
        yield return new waitForSeconds(1);
    }
    Advertisement.Show();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接