147 lines
5.6 KiB
C#
147 lines
5.6 KiB
C#
#if UNITY_ANDROID
|
|
using System;
|
|
using BigoAds.Scripts.Api;
|
|
using BigoAds.Scripts.Api.Constant;
|
|
using BigoAds.Scripts.Common;
|
|
using UnityEngine;
|
|
|
|
namespace BigoAds.Scripts.Platforms.Android
|
|
{
|
|
class AndroidBannerAd : IBannerAd
|
|
{
|
|
private const string BannerAdLoaderClassName = AndroidPlatformTool.ClassPackage + ".api.BannerAdLoader$Builder";
|
|
private const string BannerAdRequestClassName = AndroidPlatformTool.ClassPackage + ".api.BannerAdRequest$Builder";
|
|
private const string BannerSizeClassName = AndroidPlatformTool.ClassPackage + ".api.AdSize";
|
|
private const string BannerBuildMethod = "build";
|
|
private const string BannerAdLoaderBuildMethod = "withAdLoadListener";
|
|
private const string BannerAdLoaderExtMethod = "withExt";
|
|
|
|
|
|
private AndroidJavaObject BannerAd;
|
|
|
|
public event Action OnLoad;
|
|
public event Action<int, string> OnLoadFailed;
|
|
public event Action OnAdShowed;
|
|
public event Action OnAdClicked;
|
|
public event Action OnAdDismissed;
|
|
public event Action<int, string> OnAdError;
|
|
|
|
public AndroidBannerAd()
|
|
{
|
|
OnAdLoad += ((ad) =>
|
|
{
|
|
BannerAd = ad;
|
|
OnLoad?.Invoke();
|
|
});
|
|
}
|
|
|
|
private event Action<AndroidJavaObject> OnAdLoad;
|
|
|
|
public void Load(string slotId, BigoBannerRequest request)
|
|
{
|
|
if (request == null)
|
|
{
|
|
return;
|
|
}
|
|
var bannerLoaderBuilder = new AndroidJavaObject(BannerAdLoaderClassName);
|
|
bannerLoaderBuilder?.Call<AndroidJavaObject>(BannerAdLoaderExtMethod, request.ExtraInfoJson);
|
|
bannerLoaderBuilder?.Call<AndroidJavaObject>(BannerAdLoaderBuildMethod, new AdLoadCallback(OnAdLoad, OnLoadFailed));
|
|
var bannerLoader = bannerLoaderBuilder?.Call<AndroidJavaObject>(BannerBuildMethod);
|
|
|
|
var bannerRequestBuilder = new AndroidJavaObject(BannerAdRequestClassName);
|
|
bannerRequestBuilder?.Call<AndroidJavaObject>("withSlotId", slotId);
|
|
bannerRequestBuilder?.Call<AndroidJavaObject>("withAge", request.Age);
|
|
bannerRequestBuilder?.Call<AndroidJavaObject>("withGender", (int)(request.Gender));
|
|
bannerRequestBuilder?.Call<AndroidJavaObject>("withActivatedTime", request.ActivatedTime);
|
|
|
|
var bannerSize = new AndroidJavaClass(BannerSizeClassName).GetStatic<AndroidJavaObject>("BANNER");
|
|
int width = request.Size.Width;
|
|
int height = request.Size.Height;
|
|
if (width == 300 && height == 250) {
|
|
bannerSize = new AndroidJavaClass(BannerSizeClassName).GetStatic<AndroidJavaObject>("MEDIUM_RECTANGLE");
|
|
}
|
|
AndroidJavaClass arrayClass = new AndroidJavaClass("java.lang.reflect.Array");
|
|
AndroidJavaObject arrayObject = arrayClass.CallStatic<AndroidJavaObject>("newInstance", new AndroidJavaClass(BannerSizeClassName), 1);
|
|
arrayClass.CallStatic("set", arrayObject, 0, bannerSize);
|
|
|
|
bannerRequestBuilder?.Call<AndroidJavaObject>("withAdSizes", arrayObject);
|
|
|
|
var bannerRequest = bannerRequestBuilder?.Call<AndroidJavaObject>(BannerBuildMethod);
|
|
|
|
bannerLoader?.Call("loadAd", bannerRequest);
|
|
}
|
|
|
|
public bool IsLoaded()
|
|
{
|
|
return BannerAd != null;
|
|
}
|
|
|
|
public void Show()
|
|
{
|
|
BannerAd?.Call("setAdInteractionListener", new AdInteractionCallback(OnAdShowed, OnAdClicked, OnAdDismissed, OnAdError));
|
|
AndroidPlatformTool.CallMethodOnMainThread(() =>
|
|
{
|
|
AdHelper.ShowBannerAd(BannerAd);
|
|
});
|
|
}
|
|
|
|
public void Destroy()
|
|
{
|
|
//post to main
|
|
AdHelper.DestroyAd(BannerAd);
|
|
}
|
|
|
|
public bool IsExpired()
|
|
{
|
|
|
|
return BannerAd != null && BannerAd.Call<bool>("isExpired");
|
|
}
|
|
|
|
public void SetPosition(BigoPosition position)
|
|
{
|
|
AndroidPlatformTool.CallMethodOnMainThread(() =>
|
|
{
|
|
AdHelper.ShowBannerAd(BannerAd, position);
|
|
});
|
|
}
|
|
|
|
public bool IsClientBidding()
|
|
{
|
|
if (BannerAd == null) return false;
|
|
AndroidJavaObject bid = BannerAd.Call<AndroidJavaObject>("getBid");
|
|
return bid != null;
|
|
}
|
|
|
|
public string GetExtraInfo(string key)
|
|
{
|
|
if (BannerAd == null) return "";
|
|
return BannerAd.Call<string>("getExtraInfo", key);
|
|
}
|
|
|
|
/// get price
|
|
public double getPrice()
|
|
{
|
|
if (BannerAd == null) return 0;
|
|
AndroidJavaObject bid = BannerAd.Call<AndroidJavaObject>("getBid");
|
|
return bid == null ? 0 : bid.Call<double>("getPrice");
|
|
}
|
|
|
|
///notify win
|
|
public void notifyWin(double secPrice, string secBidder)
|
|
{
|
|
if (BannerAd == null) return;
|
|
var secPriceDouble = new AndroidJavaClass("java.lang.Double").CallStatic<AndroidJavaObject> ("valueOf", secPrice);
|
|
BannerAd.Call<AndroidJavaObject>("getBid")?.Call("notifyWin", secPriceDouble, secBidder);
|
|
}
|
|
|
|
///notify loss
|
|
public void notifyLoss(double firstPrice, string firstBidder, BGAdLossReason lossReason)
|
|
{
|
|
if (BannerAd == null) return;
|
|
var firstPriceDouble = new AndroidJavaClass("java.lang.Double").CallStatic<AndroidJavaObject> ("valueOf", firstPrice);
|
|
BannerAd.Call<AndroidJavaObject>("getBid")?.Call("notifyLoss", firstPriceDouble, firstBidder, (int)lossReason);
|
|
}
|
|
|
|
}
|
|
}
|
|
#endif |