Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using GoogleMobileAds.Api;
- using UniRx;
- using UnityEngine;
- [CreateAssetMenu(menuName = "Mobile Ads/Interstitial", fileName = "InterstitialAdUnit", order = 0)]
- public class InterstitialAdUnit : GoogleAdUnit
- {
- private InterstitialAd _interstitial;
- public Subject<Unit> OnLoaded { get; } = new Subject<Unit>();
- public Subject<Unit> OnShowed { get; } = new Subject<Unit>();
- public Subject<Unit> OnClosed { get; } = new Subject<Unit>();
- public override void Load()
- {
- // Initialize an InterstitialAd.
- _interstitial = new InterstitialAd(AdUnitID);
- _interstitial.OnAdLoaded += InterstitialOnOnAdLoaded;
- _interstitial.OnAdOpening += InterstitialOnOnAdOpening;
- _interstitial.OnAdClosed += InterstitialOnOnAdClosed;
- // Create an empty ad request.
- var request = new AdRequest.Builder()
- .AddExtra("npa", GoogleAds.NonPersonalizedAds.ToString())
- .Build();
- // Load the interstitial with the request.
- _interstitial.LoadAd(request);
- #if UNITY_EDITOR
- OnLoaded.OnNext(Unit.Default);
- #endif
- }
- private void InterstitialOnOnAdClosed(object sender, EventArgs e)
- {
- if (sender is InterstitialAd interstitialAd)
- interstitialAd.OnAdOpening -= InterstitialOnOnAdOpening;
- GoogleAdsHandler.MainThread.Post(_ => OnClosed.OnNext(Unit.Default), null);
- }
- private void InterstitialOnOnAdOpening(object sender, EventArgs e)
- {
- if (sender is InterstitialAd interstitialAd)
- interstitialAd.OnAdOpening -= InterstitialOnOnAdOpening;
- GoogleAdsHandler.MainThread.Post(_ => OnShowed.OnNext(Unit.Default), null);
- }
- private void InterstitialOnOnAdLoaded(object sender, EventArgs e)
- {
- if (sender is InterstitialAd interstitialAd)
- interstitialAd.OnAdLoaded -= InterstitialOnOnAdLoaded;
- Debug.Log("GoogleAdsHandler.MainThread = " + GoogleAdsHandler.MainThread);
- GoogleAdsHandler.MainThread.Post(_ => OnLoaded.OnNext(Unit.Default), null);
- }
- public override void Show()
- {
- _interstitial.Show();
- #if UNITY_EDITOR
- OnShowed.OnNext(Unit.Default);
- #endif
- }
- public override void ShowOnLoaded(Action<bool> onLoadedStatus)
- {
- if (_interstitial != null && _interstitial.IsLoaded())
- {
- onLoadedStatus?.Invoke(true);
- Show();
- }
- else
- {
- onLoadedStatus?.Invoke(false);
- OnLoaded.Take(1).Subscribe(_ =>
- {
- Show();
- onLoadedStatus?.Invoke(true);
- });
- Load();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment