AdmobTest/Assets/Scripts/AdsManager.cs
2023-11-28 11:26:19 +05:30

146 lines
4.3 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using GoogleMobileAds.Api;
using System.Threading.Tasks;
using System;
using UnityEngine.Events;
public class AdsManager : MonoBehaviour
{
private static AdsManager _instance;
public static AdsManager instance => _instance;
private BannerView bannerView;
private InterstitialAd interstitial;
private RewardedAd rewardedAd;
[Header("Ids")]
[SerializeField]private string bannerId;
[SerializeField]private string interstitialId;
[SerializeField]private string rewardedId;
public UnityEvent onAwardEarned = new UnityEvent();
public bool dontDestroyOnLoad=true;
void Start()
{
_instance =this;
if(dontDestroyOnLoad){DontDestroyOnLoad(gameObject);}
MobileAds.Initialize(OnInit);
}
void OnInit(InitializationStatus initStatus){
// MessageDialog.instance.ShowMessage("Debug","Ads inited");
DevLog.Log("Ads initiated, Loading ads now");
Debug.Log("Google ads init,"+initStatus);
Debug.Log("Loading ads now");
rewardedAd = new RewardedAd(rewardedId);
rewardedAd.OnUserEarnedReward += OnRewardedComplete;
rewardedAd.OnAdFailedToLoad += OnRewardedFailed;
rewardedAd.OnAdFailedToShow += OnRewardedFailed;
rewardedAd.OnAdClosed += OnRewardCanceled;
RequestBanner();
LoadInterestitial();
LoadRewarded();
}
void RequestBanner(){
DevLog.Log("Loading Banner");
try{
bannerView = new BannerView(bannerId, AdSize.Banner, AdPosition.BottomLeft);
AdRequest request = new AdRequest.Builder().Build();
this.bannerView.LoadAd(request);
}catch(Exception e){
DevLog.Log(e.Message);
}
}
public void LoadInterestitial(){
DevLog.Log("Loading Interestitial");
try{
interstitial = new InterstitialAd(interstitialId);
// Create an empty ad request.
AdRequest request = new AdRequest.Builder().Build();
// Load the interstitial with the request.
interstitial.LoadAd(request);
}catch(Exception e){
DevLog.Log(e.Message);
}
}
public void LoadRewarded(){
DevLog.Log("Loading Rewarded");
try{
AdRequest request = new AdRequest.Builder().Build();
this.rewardedAd.LoadAd(request);
}catch(Exception e){
DevLog.Log(e.Message);
}
}
public async void ShowInterestitial(){
DevLog.Log("Showing Interestitial");
interstitial.Show();
await Task.Delay(10000);
LoadInterestitial();
}
public void ShowRewarded(){
ShowRewarded(()=>{DevLog.Log("I Earned this, Back off");});
}
public async void ShowRewarded(UnityAction OnAwardEarned){
// MessageDialog.instance.ShowMessage("Debug","Showing rewarded, is rewareded null? : " + (rewardedAd == null).ToString());
DevLog.Log("Showing Rewarded, Rewarded ad null? : " + (rewardedAd==null).ToString());
try{
onAwardEarned.RemoveAllListeners();
onAwardEarned.AddListener(OnAwardEarned);
Debug.Log("Show Reward : is ad null? : " + (rewardedAd == null).ToString());
if(!rewardedAd.IsLoaded()){
Debug.Log("Ad not loaded, Loading now");
LoadRewarded();
}else{
}
while(!rewardedAd.IsLoaded()){
await Task.Delay(500);
}
Debug.Log("Ad ready, showing now");
this.rewardedAd.Show();
Debug.Log("Ad shown");
}catch(Exception e){
DevLog.Log(e.Message);
}
}
void OnRewardedComplete(object sender, EventArgs args){
onAwardEarned.Invoke();
LoadRewarded();
}
void OnRewardedFailed(object sender, EventArgs args){
DevLog.Log("Ad failed to load");
// MessageDialog.instance.ShowMessage("Sorry", "We couldn't Load the Ad right now. Please try again later.");
LoadRewarded();
}
void OnRewardCanceled(object sender, EventArgs args){
DevLog.Log("User canceled the ad");
// MessageDialog.instance.ShowMessage("Failed", "You closed the Ad. Please watch the full ad to receive the gift");
LoadRewarded();
}
}