chicken_dy/Assets/HCMiniSdk/Scripts/WebGL/HCBytedance/HCBytedanceAds.cs

267 lines
11 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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