首页 > 解决方案 > UnityAds isReady() 总是返回 false

问题描述

我在集成 Unity 广告时遇到问题。我的要求是,在玩几次免费游戏后,用户应该在下一次游戏发布时看到广告,然后他才能玩游戏。但是当我检查展示位置是否准备好以便我可以在IUnityAdsListener.onUnityAdsReady()中显示广告时。UnityAds.isReady (placementId: String)始终返回 false。

我正在尝试使用

UnityAds.initialize(this, "<GameId>", this@MainActivity, false)


我的iUnityAdsListener

override fun onUnityAdsStart(p0: String?) {
    println("Unity ad start")
}

override fun onUnityAdsFinish(p0: String?, p1: UnityAds.FinishState?) {
    println("Unity ad finished")
    loadGame()
}

override fun onUnityAdsError(error: UnityAds.UnityAdsError?, message: String?) {
    println("Unity ad error, $message, ${error?.name}")
}

override fun onUnityAdsReady(placementId: String?) {
    if(UnityAds.isReady(placementId)){
        UnityAds.show(this@MainActivity, placementId)
    }

    println("Unity ad ready, Placement Id: $placementId")
}

标签: androidunityads

解决方案


我找到了解决方案,或者更确切地说是一种解决方法。
我认为问题在于 UnityAds 需要一些时间进行初始化。因此,当我创建一个线程来延迟UnityAds.isReady(String placementId)调用几秒钟时,它返回 true 并且广告实际上已准备好显示,并且UnityAds.show(Activity activity, String placementId)实际上可以正常工作而没有任何问题。由于我的要求是尽早在游戏发布时加载和显示广告,因此 Unity sdk 似乎在初始化和很快显示广告时遇到了问题。 以下是有效的IUnityAdsListener.onUnityAdsReady(String placementId)回调方法

的实现更改。

override fun onUnityAdsReady(placementId: String?) {

    if(placementId == "video") {
        val runnable = Runnable {
            Thread.sleep(2000)
            if (UnityAds.isReady("video"))
                UnityAds.show(this@MainActivity, placementId)
        }
        Thread(runnable).start()
    }

    println("Unity ad ready, Placement Id: $placementId")
}

推荐阅读