267 lines
11 KiB
C#
267 lines
11 KiB
C#
#if WEBGL_BYTEDANCE
|
||
using System;
|
||
using System.Collections.Generic;
|
||
using StarkSDKSpace;
|
||
using UnityEngine;
|
||
|
||
namespace HC
|
||
{
|
||
public class HCBytedanceAds : HCSingleton<HCBytedanceAds>, HCIAds, StarkAdManager.VideoAdCallback
|
||
{
|
||
private Action<HCADSstatuscallback, string, int, string, Dictionary<string, object>> _callback;
|
||
|
||
public void InitializeSdk(Action<HCADSstatuscallback, string, int, string, Dictionary<string, object>> callback)
|
||
{
|
||
HCDebugger.LogDebug($"[HCBytedanceAds] [InitializeSdk] callback = {callback}");
|
||
_callback = callback;
|
||
StarkSDK.API.GetStarkAdManager().SetVideoAdCallBack(this);
|
||
}
|
||
|
||
public void RewardedLoad(string adUnitId)
|
||
{
|
||
HCDebugger.LogDebug($"[HCBytedanceAds] [RewardedLoad] adUnitId = {adUnitId}");
|
||
}
|
||
|
||
public bool IsRewardedAdReady(string adUnitId)
|
||
{
|
||
HCDebugger.LogDebug($"[HCBytedanceAds] [IsRewardedAdReady] adUnitId = {adUnitId}");
|
||
return true;
|
||
}
|
||
|
||
[Obsolete("Obsolete")]
|
||
public void ShowRewardedAd(string adUnitId)
|
||
{
|
||
HCDebugger.LogDebug($"[HCBytedanceAds] [IsRewardedAdReady] adUnitId = {adUnitId}");
|
||
StarkSDK.API.GetStarkAdManager().ShowVideoAdWithId(adUnitId, isComplete =>
|
||
{
|
||
HCDebugger.LogDebug($"[HCBytedanceAds] [ShowRewardedAd] [closeCallback] adUnitId = {adUnitId} isComplete = {isComplete}");
|
||
_callback?.Invoke(HCADSstatuscallback.RewardedClose, adUnitId, 0, "", new Dictionary<string, object>
|
||
{
|
||
["isEnded"] = isComplete
|
||
});
|
||
}, (errCode, errMsg) =>
|
||
{
|
||
_callback?.Invoke(HCADSstatuscallback.RewardedLoadFailed, adUnitId, errCode, errMsg, new Dictionary<string, object>
|
||
{
|
||
["type"] = "callback"
|
||
});
|
||
|
||
HCDebugger.LogDebug($"[HCBytedanceAds] [ShowRewardedAd] [closeCallback] adUnitId = {adUnitId} errCode = {errCode} errMsg = {errMsg}");
|
||
_callback?.Invoke(HCADSstatuscallback.RewardedShowFailed, adUnitId, errCode, errMsg, null);
|
||
});
|
||
}
|
||
|
||
private StarkAdManager.InterstitialAd _interstitialAd;
|
||
|
||
|
||
private StarkAdManager.InterstitialAd GetInterstitialAd(string adUnitId, bool isDestroy = false)
|
||
{
|
||
|
||
if (_interstitialAd == null)
|
||
{
|
||
HCDebugger.LogError("创建广告对象");
|
||
_interstitialAd = StarkSDK.API.GetStarkAdManager().CreateInterstitialAd(adUnitId,
|
||
(errCode, errMsg) =>
|
||
{
|
||
// 广告视频错误回调,参数含义 errCode, errMsg 表明错误码和错误描述
|
||
HCDebugger.LogDebug($"[HCBytedanceAds] [GetInterstitialAd] [errCallback] adUnitId = {adUnitId} errCode = {errCode} errMsg = {errMsg} _interstitialAd.IsLoaded() = {_interstitialAd?.IsLoaded()}");
|
||
if (_interstitialAd !=null && _interstitialAd.IsLoaded())
|
||
{
|
||
_callback?.Invoke(HCADSstatuscallback.InterstitialShowFailed, adUnitId, errCode, errMsg, null);
|
||
}
|
||
else
|
||
{
|
||
_callback?.Invoke(HCADSstatuscallback.InterstitialLoadFailed, adUnitId, errCode, errMsg, new Dictionary<string, object>
|
||
{
|
||
["type"] = "callback"
|
||
});
|
||
}
|
||
}, () =>
|
||
{
|
||
// HCDebugger.LogError($"销毁广告对象 {_interstitialAd} hashCode : {_interstitialAd?.GetHashCode()}");
|
||
// _interstitialAd?.Destroy();
|
||
// _interstitialAd = null;
|
||
|
||
|
||
// 广告视频关闭回调
|
||
HCDebugger.LogDebug($"[HCBytedanceAds] [GetInterstitialAd] [closeCallback] adUnitId = {adUnitId}");
|
||
_callback?.Invoke(HCADSstatuscallback.InterstitialClose, adUnitId, 0, "", new Dictionary<string, object>
|
||
{
|
||
["type"] = "callback"
|
||
});
|
||
}, () =>
|
||
{
|
||
HCDebugger.LogDebug($"[HCBytedanceAds] [GetInterstitialAd] [loadedCallback] adUnitId = {adUnitId}");
|
||
_callback?.Invoke(HCADSstatuscallback.InterstitialLoadSuccess, adUnitId, 0, "", new Dictionary<string, object>
|
||
{
|
||
["type"] = "callback"
|
||
});
|
||
});
|
||
}
|
||
|
||
HCDebugger.LogDebug($"###########[HCBytedanceAds] [GetInterstitialAd] _interstitialAd = {_interstitialAd} hashCode : {_interstitialAd.GetHashCode()}");
|
||
return _interstitialAd;
|
||
}
|
||
|
||
public void LoadInterstitial(string adUnitId)
|
||
{
|
||
HCDebugger.LogDebug($"[HCBytedanceAds] [LoadInterstitial] adUnitId = {adUnitId}");
|
||
GetInterstitialAd(adUnitId, true).Load();
|
||
}
|
||
|
||
public bool IsInterstitialReady(string adUnitId)
|
||
{
|
||
var isInterstitialReady = GetInterstitialAd(adUnitId).IsLoaded();
|
||
HCDebugger.LogDebug($"[HCBytedanceAds] [IsInterstitialReady] adUnitId = {adUnitId} isInterstitialReady = {isInterstitialReady}");
|
||
return isInterstitialReady;
|
||
}
|
||
|
||
public void ShowInterstitial(string adUnitId)
|
||
{
|
||
var isInterstitialReady = IsInterstitialReady(adUnitId);
|
||
|
||
HCDebugger.LogDebug($"[HCBytedanceAds] [ShowInterstitial] adUnitId = {adUnitId} IsInterstitialReady = {isInterstitialReady}");
|
||
if (isInterstitialReady)
|
||
{
|
||
_callback?.Invoke(HCADSstatuscallback.InterstitialShowSuccess, adUnitId, 0, "", null);
|
||
}
|
||
|
||
GetInterstitialAd(adUnitId).Show();
|
||
// IsInterstitialLoad = false;
|
||
}
|
||
|
||
private StarkAdManager.BannerAd _bannerAd;
|
||
|
||
private int px2dp(int px) => (int)(px * (160 / Screen.dpi));
|
||
|
||
private StarkAdManager.BannerAd GetBannerAd(string adUnitId)
|
||
{
|
||
var bannerStyle = new StarkAdManager.BannerStyle
|
||
{
|
||
width = 320,
|
||
left = 10,
|
||
top = 100
|
||
};
|
||
return _bannerAd ??= StarkSDK.API.GetStarkAdManager().CreateBannerAd(adUnitId, bannerStyle, 30, (errCode, errMsg) =>
|
||
{
|
||
// 广告错误回调,参数表明错误码和错误描述.
|
||
HCDebugger.LogDebug($"[HCBytedanceAds] [GetBannerAd] [errCallback] adUnitId = {adUnitId} errCode = {errCode} errMsg = {errMsg}");
|
||
_callback?.Invoke(HCADSstatuscallback.BannerLoadFailed, adUnitId, errCode, errMsg, null);
|
||
_callback?.Invoke(HCADSstatuscallback.BannerShowFailed, adUnitId, errCode, errMsg, null);
|
||
}, () =>
|
||
{
|
||
// 广告加载回调
|
||
HCDebugger.LogDebug($"[HCBytedanceAds] [GetBannerAd] [loadedCallback] adUnitId = {adUnitId} ");
|
||
_callback?.Invoke(HCADSstatuscallback.BannerLoadSuccess, adUnitId, 0, "", null);
|
||
}, (width, height) =>
|
||
{
|
||
// 广告样式改变回调,第一个参数是width.第二个参数是height.
|
||
HCDebugger.LogDebug($"[HCBytedanceAds] [GetBannerAd] [resizeCallback] adUnitId = {adUnitId} width = {width} height = {height}");
|
||
_callback?.Invoke(HCADSstatuscallback.BannerResize, adUnitId, 0, "", new Dictionary<string, object>()
|
||
{
|
||
["width"] = width,
|
||
["height"] = height
|
||
});
|
||
ChangeStyle(adUnitId, bannerStyle, width, height);
|
||
}, () =>
|
||
{
|
||
// 广告关闭回调,仅在WebGL有效
|
||
HCDebugger.LogDebug($"[HCBytedanceAds] [GetBannerAd] [closeCallback] adUnitId = {adUnitId}");
|
||
});
|
||
}
|
||
|
||
void ChangeStyle(string adUnitId, StarkAdManager.BannerStyle style, int w, int h)
|
||
{
|
||
var sw = px2dp(Screen.width); //获得屏幕宽度(dp)
|
||
var sh = px2dp(Screen.height); //获得屏幕高度(dp)
|
||
|
||
style.top = sh - h; //底部
|
||
style.left = sw / 2 - w / 2; //中央
|
||
style.width = w;
|
||
|
||
GetBannerAd(adUnitId).ReSize(style); //使用Resize函数调整位置和大小
|
||
}
|
||
|
||
public void CreateBanner(string adUnitId)
|
||
{
|
||
HCDebugger.LogDebug($"[HCBytedanceAds] [CreateBanner] adUnitId = {adUnitId}");
|
||
GetBannerAd(adUnitId);
|
||
}
|
||
|
||
public void DestroyBanner(string adUnitId)
|
||
{
|
||
HCDebugger.LogDebug($"[HCBytedanceAds] [DestroyBanner] adUnitId = {adUnitId}");
|
||
GetBannerAd(adUnitId).Destroy();
|
||
}
|
||
|
||
public void ShowBanner(string adUnitId)
|
||
{
|
||
var isInvalid = GetBannerAd(adUnitId).IsInvalid();
|
||
HCDebugger.LogDebug($"[HCBytedanceAds] [ShowBanner] adUnitId = {adUnitId} IsInvalid = {isInvalid}");
|
||
if (isInvalid)
|
||
{
|
||
_callback?.Invoke(HCADSstatuscallback.BannerShowSuccess, adUnitId, 0, "", null);
|
||
}
|
||
|
||
GetBannerAd(adUnitId).Show();
|
||
}
|
||
|
||
public void HideBanner(string adUnitId)
|
||
{
|
||
HCDebugger.LogDebug($"[HCBytedanceAds] [HideBanner] adUnitId = {adUnitId}");
|
||
GetBannerAd(adUnitId).Hide();
|
||
_callback?.Invoke(HCADSstatuscallback.BannerHideSuccess, adUnitId, 0, "", null);
|
||
}
|
||
|
||
public void SetLogEnable(bool _enable)
|
||
{
|
||
}
|
||
|
||
public void LoadNative(string adUnit)
|
||
{
|
||
}
|
||
|
||
public void RemoveNative(string adUnit)
|
||
{
|
||
}
|
||
|
||
public bool IsNativeAdReady(string adUnit)
|
||
{
|
||
return false;
|
||
}
|
||
|
||
public void ShowNative(string adUnit, float x, float y, float width, float height, string pAdPos, Action<int, string> _showFailedCallback = null, Action _closeCallback = null)
|
||
{
|
||
}
|
||
|
||
#region 激励视频回调
|
||
|
||
public void OnVideoLoaded()
|
||
{
|
||
HCDebugger.LogDebug("[HCBytedanceAds] [OnVideoLoaded]");
|
||
_callback?.Invoke(HCADSstatuscallback.RewardedLoadSuccess, "", 0, "", new Dictionary<string, object>
|
||
{
|
||
["type"] = "callback"
|
||
});
|
||
}
|
||
|
||
public void OnVideoShow(long timestamp)
|
||
{
|
||
HCDebugger.LogDebug($"[HCBytedanceAds] [OnVideoShow] timestamp = {timestamp}");
|
||
_callback?.Invoke(HCADSstatuscallback.RewardedShowSuccess, "", 0, "", null);
|
||
}
|
||
|
||
public void OnError(int errCode, string errorMessage)
|
||
{
|
||
HCDebugger.LogDebug($"[HCBytedanceAds] [OnError] errCode = {errCode} errorMessage = {errorMessage}");
|
||
}
|
||
|
||
public void OnVideoClose(int watchedTime, int effectiveTime, int duration)
|
||
{
|
||
HCDebugger.LogDebug($"[HCBytedanceAds] [OnVideoClose] watchedTime = {watchedTime} effectiveTime = {effectiveTime} duration = {duration}");
|
||
}
|
||
|
||
#endregion
|
||
}
|
||
}
|
||
#endif |