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 |