Admob Plugin
Là 1 Plugin có các Base Class cho các loại Ad như AppOpen, và một số tracking tự động
Last updated
Là 1 Plugin có các Base Class cho các loại Ad như AppOpen, và một số tracking tự động
Last updated
using GoogleMobileAds.Api;
using GSM;
using GSM.Core;
using System;
using System.Collections.Generic;
using UnityEngine;
public class AdmobAppOpenController : BaseAdmobAppOpenController
{
private static AdmobAppOpenController _instance;
public static AdmobAppOpenController Instance => _instance;
[SerializeField] private GameObject overlayBackground;
// Id Test
private string _adUnitId = "";
private void Awake()
{
if (_instance == null)
{
_instance = this;
DontDestroyOnLoad(this.gameObject);
}
else
{
Destroy(gameObject);
}
GetAdSettingGSM();
}
private void GetAdSettingGSM()
{
GSMSettings settings = GSMInitialization.GsmSettings;
if (settings != null)
{
var appOpenAdUnit = settings.GetAdmobAdUnit("AppOpen");
if (appOpenAdUnit != null)
{
_adUnitId = appOpenAdUnit.adUnitId;
}
}
else
{
Debug.LogError("GSMSettings not found");
}
}
public override string GetAdmobAdUnitId()
{
return _adUnitId;
}
protected override bool ExecuteShowAd()
{
if (MaxAdsController.Instance == null) return false;
overlayBackground?.SetActive(true);
//Kiểm tra nếu vừa mới click AdReward, Inter của Max
//và FireBase RemoteConfig không cho hiện AppOpen
//khi Click Ad ra ngoài thì không hiện AppOpen
if (MaxAdsController.Instance.IsRewardOrInterClicked && !FirebaseServiceController.Instance.GetConfigActiveAOAWhenClickAds())
{
MaxAdsController.Instance.ReleaseMarkAdClick();
return false;
}
MaxAdsController.Instance.ReleaseMarkAdClick();
Debug.Log("AppOpen: Showing app open ad.");
return base.ExecuteShowAd();
}
public override bool GetCanShow()
{
//Xử lý Logic cho phép hiển thị quảng cáo AppOpen
OpenAdsData appOpenAdsData = new OpenAdsData();
if (FirebaseServiceController.Instance != null)
appOpenAdsData = JsonUtility.FromJson<OpenAdsData>(FirebaseServiceController.Instance.GetOpenAdsData());
if (appOpenAdsData.activeMode == 0) return false;// tắt trên remove
if (!PlayerPrefs.HasKey("MaxPassedLevel")) return false; // chưa đủ level
string maxPass = PlayerPrefs.GetString("MaxPassedLevel");
int chapterPass = int.Parse(maxPass.Split('_')[0]);
int levelPass = int.Parse(maxPass.Split("_")[1]);
if (chapterPass < appOpenAdsData.Chapter) return false;
if (chapterPass == appOpenAdsData.Chapter && levelPass < appOpenAdsData.Level) return false;
var playerClass = PlayerPrefs.GetInt("typeUser", 0) + 1;
for (int i = 0; i < appOpenAdsData.typeUser.Count; i++)
{
if (playerClass == appOpenAdsData.typeUser[i])
return true;
}
return false;
}
protected override string GetGroup()
{
return string.Empty;
}
protected override string GetSubGroup()
{
return string.Empty;
}
protected override string GetTargetLevel()
{
return PlayerPrefs.GetString("level_played", "0_0_0");
}
protected override string GetUserType()
{
return string.Empty;
}
protected override void OnAdFullScreenContentFailed(AdError error)
{
Debug.Log("AppOpen: OnAdFullScreenContentFailed");
overlayBackground?.SetActive(false);
base.OnAdFullScreenContentFailed(error);
Time.timeScale = 1;
}
protected override void OnAdFullScreenContentClosed()
{
Debug.Log("AppOpen: OnAdFullScreenContentClosed");
overlayBackground?.SetActive(false);
base.OnAdFullScreenContentClosed();
Time.timeScale = 1;
}
}
[Serializable]
public class OpenAdsData
{
public int activeMode;
public List<int> typeUser;
public int Chapter;
public int Level;
public int Stage;
public OpenAdsData()
{
activeMode = 1;
typeUser = new List<int>() { };
Chapter = 1;
Level = 7;
Stage = 1;
}
}if (Application.internetReachability != NetworkReachability.NotReachable && sceneName == "Login")
{
AdmobAppOpenController.Instance.ShowFirst();
yield return new WaitForSecondsRealtime(0.2f);
while (!AdmobAppOpenController.Instance.IsClosed)
{
yield return null;
}
}