在 Unity 中处理广告的按钮交互性
Handle Button interactivity for Ads in Unity
我在我的应用程序中使用 Unity Ads。一切正常,但我想添加一个功能来处理广告按钮的交互性,无论广告是否准备就绪,贯穿整个应用生命周期。
我编写的最简单的解决方案是在 update()
方法中检查广告的可用性:
public class AdButton : MonoBehaviour
{
// Some stuff here
void Update()
{
if (myButton)
myButton.interactable = Advertisement.IsReady(placementId);
}
}
但我也考虑过使用 Actions
事件:
public class AdsManager : MonoBehaviour
{
public static event Action<bool> AdReady;
// Some stuff here
void update()
{
adReady?.invoke(Advertisement.isReady(placementId));
}
}
public class AdButton : MonoBehaviour
{
// Some stuff here
void OnEnable()
{
AdsManager.AdReady += RefreshButton;
}
void RefreshButton(bool interactivity)
{
myButton.interactable = interactivity
}
void OnDisable()
{
AdsManager.AdReady -= RefreshButton;
}
}
问题是我是 Unity 的新手,我对 update()
方法有点 害怕。我一直在读到由于该函数的性质(每帧调用一次)很容易使应用程序过载。
我是否应该担心这些代码行或调用每一帧这些指令不会减慢我的应用程序?
感谢您的帮助。
西莫
我的建议是使用 Action 方法,这是我过去采用的方法,例如:
private Action onAdReadyListener;
public void RegisterOnReadyListener(Action onAdReadyListener)
{
this.onAdReadyListener = onAdReadyListener;
if (Advertisement.IsReady(myPlacementId))
{
onAdReadyListener?.Invoke();
}
}
public void OnUnityAdsReady(string placementId)
{
if (placementId == myPlacementId)
{
onAdReadyListener?.Invoke();
}
}
OnUnityAdsReady()
是UnityAds包提供的覆盖方法。当广告可供查看时调用它。
这里的想法是注册一个侦听器,将Action
作为参数传递给RegisterOnReadyListener()
方法并将其存储为成员变量。
如果广告立即就绪,则将立即调用 Action
。如果广告没有立即准备好,那么 Action
将在 UnityAds 包调用 OnUnityAdsReady()
回调时被调用。
每次观看一个广告时,OnUnityAdsReady()
将在准备好观看下一个广告时调用。这意味着每次广告准备就绪时都会调用 Action
。
关于这个主题的一些提示:
- Unity 限制在生产环境中每天显示 25 个广告。
- Android 对展示广告的方式非常严格,例如明确
用户即将看到一个广告并且每次显示的广告不超过 1 个
“屏幕”
- 如果您在生产环境中多次观看自己的广告,您的
帐户将被阻止。你可以
控制是从 Unity 仪表板显示测试广告还是生产广告
为您的项目。此选项会覆盖代码中的任何测试选项。
我在我的应用程序中使用 Unity Ads。一切正常,但我想添加一个功能来处理广告按钮的交互性,无论广告是否准备就绪,贯穿整个应用生命周期。
我编写的最简单的解决方案是在 update()
方法中检查广告的可用性:
public class AdButton : MonoBehaviour
{
// Some stuff here
void Update()
{
if (myButton)
myButton.interactable = Advertisement.IsReady(placementId);
}
}
但我也考虑过使用 Actions
事件:
public class AdsManager : MonoBehaviour
{
public static event Action<bool> AdReady;
// Some stuff here
void update()
{
adReady?.invoke(Advertisement.isReady(placementId));
}
}
public class AdButton : MonoBehaviour
{
// Some stuff here
void OnEnable()
{
AdsManager.AdReady += RefreshButton;
}
void RefreshButton(bool interactivity)
{
myButton.interactable = interactivity
}
void OnDisable()
{
AdsManager.AdReady -= RefreshButton;
}
}
问题是我是 Unity 的新手,我对 update()
方法有点 害怕。我一直在读到由于该函数的性质(每帧调用一次)很容易使应用程序过载。
我是否应该担心这些代码行或调用每一帧这些指令不会减慢我的应用程序?
感谢您的帮助。
西莫
我的建议是使用 Action 方法,这是我过去采用的方法,例如:
private Action onAdReadyListener;
public void RegisterOnReadyListener(Action onAdReadyListener)
{
this.onAdReadyListener = onAdReadyListener;
if (Advertisement.IsReady(myPlacementId))
{
onAdReadyListener?.Invoke();
}
}
public void OnUnityAdsReady(string placementId)
{
if (placementId == myPlacementId)
{
onAdReadyListener?.Invoke();
}
}
OnUnityAdsReady()
是UnityAds包提供的覆盖方法。当广告可供查看时调用它。
这里的想法是注册一个侦听器,将Action
作为参数传递给RegisterOnReadyListener()
方法并将其存储为成员变量。
如果广告立即就绪,则将立即调用 Action
。如果广告没有立即准备好,那么 Action
将在 UnityAds 包调用 OnUnityAdsReady()
回调时被调用。
每次观看一个广告时,OnUnityAdsReady()
将在准备好观看下一个广告时调用。这意味着每次广告准备就绪时都会调用 Action
。
关于这个主题的一些提示:
- Unity 限制在生产环境中每天显示 25 个广告。
- Android 对展示广告的方式非常严格,例如明确 用户即将看到一个广告并且每次显示的广告不超过 1 个 “屏幕”
- 如果您在生产环境中多次观看自己的广告,您的 帐户将被阻止。你可以 控制是从 Unity 仪表板显示测试广告还是生产广告 为您的项目。此选项会覆盖代码中的任何测试选项。