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

Download V0.0.0.3

1. Điều kiện sử dụng

  • Tích hợp GSM SDK V1.2.3.9 trở lên

2. Các Class chính

  • GSMAdmobInfo: Sử dụng để đẩy các thông số setting như admobAppId, SdkVersion, AdUnitId lên GSM để kiểm tra xem phía game đã gắn đúng các thông số mà phía PM cần hay không

  • BaseAdmobAppOpenController: Là class Base về loại Ad AppOpen, có sẵn các phương thức Load, Show, Show First. Trong base sẽ có sẵn việc xử lý khi cứ thoát app, và quay lại thì sẽ tự động Show App Open.

    • Method ShowFirst: Dùng khi lần đầu tiên vào game, tại thời điểm ví dụ Loading, cần show AppOpen thì gọi method này.

    • Method Show: (Ít khi phía game phải dùng đến). Và có tác dụng Show AppOpen khi cần

    • Method LoadAd: Dùng để load mới 1 quảng cáo AppOpen nếu được cho phép.

    • Khi sử dụng BaseAdmobAppOpenController: Thì sẽ có sẵn 1 Counter log với Type= AdmobAppOpen_LoadAd

    • Settings phía GSM:

      • Chú ý các AdsName của từng AdUnitId khai báo như thế nào thì trong code lấy ra phải lấy đúng Name như vậy

      • Code mẫu:

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;
    }
}

Khi ở màn hình Loading khoảng 3-4s sau khi vào game, thì gọi ShowFirst

if (Application.internetReachability != NetworkReachability.NotReachable && sceneName == "Login")
{
    AdmobAppOpenController.Instance.ShowFirst();
    yield return new WaitForSecondsRealtime(0.2f);
    while (!AdmobAppOpenController.Instance.IsClosed)
    {
        yield return null;
    }
}

Last updated