android - 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")
}
解决方案
我找到了解决方案,或者更确切地说是一种解决方法。
我认为问题在于 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")
}
推荐阅读
- java - 为什么@Transactional 不回滚在此集成测试中保存实体?
- java - 空指针异常和 getMapAsync 错误
- oop - 在 Kotlin 中传递方法与传递接口
- java - 出现错误 java.lang.NullPointerException:尝试在空对象引用上调用接口方法“int java.util.List.size()”
- docker - 我的 EC2 实例上的 var/run/docker.sock 权限问题
- python - 如何获取用户输入列表,通过随机计数器运行它,然后输出结果
- javascript - 如何连接netmiko和django应用程序
- google-cloud-platform - 通过 GCp 控制台 RDP 访问 GCP 窗口服务器
- javascript - 无法使用以下代码在 chrome 浏览器中查看 Base64 PDF?
- c - 存储到“char”类型的空指针