โฆษณาเปิดแอปเป็นรูปแบบโฆษณาพิเศษที่ออกแบบมาสําหรับผู้เผยแพร่โฆษณาที่ต้องการสร้างรายได้ จากหน้าจอโหลดของแอป ผู้ใช้ปิดโฆษณาเปิดแอปได้ทุกเมื่อ และโฆษณาได้รับการออกแบบ ให้แสดงเมื่อผู้ใช้เรียกแอปของคุณมาที่เบื้องหน้า
โฆษณาเปิดแอปจะแสดงพื้นที่การสร้างแบรนด์ขนาดเล็กๆ โดยอัตโนมัติเพื่อให้ผู้ใช้รู้ว่ากำลังอยู่ในแอปของคุณ ตัวอย่างลักษณะของโฆษณาเปิดแอปมีดังนี้

ข้อกำหนดเบื้องต้น
- ทำตามคู่มือเริ่มต้นใช้งาน
- ปลั๊กอิน Unity 7.1.0 ขึ้นไป
ทดสอบด้วยโฆษณาทดสอบเสมอ
โค้ดตัวอย่างต่อไปนี้มีรหัสหน่วยโฆษณาที่คุณใช้เพื่อขอ โฆษณาทดสอบได้ ซึ่งได้รับการกำหนดค่าเป็นพิเศษให้แสดงโฆษณาทดสอบแทน โฆษณาจริงสำหรับทุกคำขอ จึงใช้งานได้อย่างปลอดภัย
อย่างไรก็ตาม หลังจากลงทะเบียนแอปใน อินเทอร์เฟซเว็บของ AdMob และสร้างรหัสหน่วยโฆษณา ของคุณเองเพื่อใช้ในแอปแล้ว ให้กำหนดค่าอุปกรณ์เป็นอุปกรณ์ทดสอบอย่างชัดเจนในระหว่างการพัฒนา
Android
ca-app-pub-3940256099942544/9257395921
iOS
ca-app-pub-3940256099942544/5575463023
การใช้งาน
ขั้นตอนหลักในการผสานรวมโฆษณาเปิดแอปมีดังนี้
- สร้างคลาสยูทิลิตี
- โหลดโฆษณาเปิดแอป
- รอเหตุการณ์โฆษณาเปิดแอป
- พิจารณาการหมดอายุของโฆษณา
- รอเหตุการณ์สถานะแอป
- แสดงโฆษณาเปิดแอป
- ล้างข้อมูลโฆษณาเปิดแอป
- โหลดโฆษณาเปิดแอปถัดไปล่วงหน้า
สร้างคลาสยูทิลิตี
สร้างคลาสใหม่ชื่อ AppOpenAdController เพื่อโหลดโฆษณา คลาสนี้
ควบคุมตัวแปรอินสแตนซ์เพื่อติดตามโฆษณาที่โหลดแล้วและรหัสหน่วยโฆษณา
สำหรับแต่ละแพลตฟอร์ม
using System;
using UnityEngine;
using GoogleMobileAds.Api;
using GoogleMobileAds.Common;
/// <summary>
/// Demonstrates how to use the Google Mobile Ads app open ad format.
/// </summary>
[AddComponentMenu("GoogleMobileAds/Samples/AppOpenAdController")]
public class AppOpenAdController : MonoBehaviour
{
    // These ad units are configured to always serve test ads.
#if UNITY_ANDROID
    private string _adUnitId = "ca-app-pub-3940256099942544/9257395921";
#elif UNITY_IPHONE
    string _adUnitId = "ca-app-pub-3940256099942544/5575463023";
#else
    private string _adUnitId = "unused";
#endif
    public bool IsAdAvailable
    {
        get
        {
            return _appOpenAd != null;
        }
    }
    public void Start()
    {
        // Initialize Google Mobile Ads SDK.
        MobileAds.Initialize((InitializationStatus initStatus) =>
        {
            // This callback is called once the MobileAds SDK is initialized.
        });
    }
    /// <summary>
    /// Loads the app open ad.
    /// </summary>
    public void LoadAppOpenAd()
    {
    }
    /// <summary>
    /// Shows the app open ad.
    /// </summary>
    public void ShowAppOpenAd()
    {
    }
}
โหลดโฆษณาเปิดแอป
การโหลดโฆษณาเปิดแอปทำได้โดยใช้เมธอด Load() แบบคงที่ในคลาส
AppOpenAd เมธอดโหลดต้องใช้รหัสหน่วยโฆษณา ออบเจ็กต์ AdRequest และตัวแฮนเดิลการเสร็จสมบูรณ์ซึ่งจะเรียกใช้เมื่อโหลดโฆษณาสำเร็จหรือไม่สำเร็จ ระบบจะระบุออบเจ็กต์ AppOpenAd ที่โหลดแล้วเป็นพารามิเตอร์ในตัวแฮนเดิลการเสร็จสมบูรณ์ ตัวอย่างด้านล่างแสดงวิธีโหลด AppOpenAd
 // These ad units are configured to always serve test ads.
#if UNITY_ANDROID
   private string _adUnitId = "ca-app-pub-3940256099942544/9257395921";
#elif UNITY_IPHONE
   string _adUnitId = "ca-app-pub-3940256099942544/5575463023";
#else
  private string _adUnitId = "unused";
#endif
  private AppOpenAd appOpenAd;
  /// <summary>
  /// Loads the app open ad.
  /// </summary>
  public void LoadAppOpenAd()
  {
      // Clean up the old ad before loading a new one.
      if (appOpenAd != null)
      {
            appOpenAd.Destroy();
            appOpenAd = null;
      }
      Debug.Log("Loading the app open ad.");
      // Create our request used to load the ad.
      var adRequest = new AdRequest();
      // send the request to load the ad.
      AppOpenAd.Load(_adUnitId, adRequest,
          (AppOpenAd ad, LoadAdError error) =>
          {
              // if error is not null, the load request failed.
              if (error != null || ad == null)
              {
                  Debug.LogError("app open ad failed to load an ad " +
                                 "with error : " + error);
                  return;
              }
              Debug.Log("App open ad loaded with response : "
                        + ad.GetResponseInfo());
              appOpenAd = ad;
              RegisterEventHandlers(ad);
          });
  }
รอเหตุการณ์โฆษณาเปิดแอป
หากต้องการปรับแต่งลักษณะการทำงานของโฆษณาเพิ่มเติม คุณสามารถเชื่อมต่อกับเหตุการณ์ต่างๆ ในวงจรของโฆษณาได้ เช่น การเปิด การปิด และอื่นๆ ฟังเหตุการณ์ เหล่านี้โดยการลงทะเบียนผู้รับมอบสิทธิ์ตามที่แสดงด้านล่าง
private void RegisterEventHandlers(AppOpenAd ad)
{
    // Raised when the ad is estimated to have earned money.
    ad.OnAdPaid += (AdValue adValue) =>
    {
        Debug.Log(String.Format("App open ad paid {0} {1}.",
            adValue.Value,
            adValue.CurrencyCode));
    };
    // Raised when an impression is recorded for an ad.
    ad.OnAdImpressionRecorded += () =>
    {
        Debug.Log("App open ad recorded an impression.");
    };
    // Raised when a click is recorded for an ad.
    ad.OnAdClicked += () =>
    {
        Debug.Log("App open ad was clicked.");
    };
    // Raised when an ad opened full screen content.
    ad.OnAdFullScreenContentOpened += () =>
    {
        Debug.Log("App open ad full screen content opened.");
    };
    // Raised when the ad closed full screen content.
    ad.OnAdFullScreenContentClosed += () =>
    {
        Debug.Log("App open ad full screen content closed.");
    };
    // Raised when the ad failed to open full screen content.
    ad.OnAdFullScreenContentFailed += (AdError error) =>
    {
        Debug.LogError("App open ad failed to open full screen content " +
                       "with error : " + error);
    };
}
พิจารณาการหมดอายุของโฆษณา
หากต้องการไม่ให้แสดงโฆษณาที่หมดอายุแล้ว ให้เพิ่มเมธอดลงใน
AppOpenAdController ซึ่งจะตรวจสอบระยะเวลาตั้งแต่โหลดโฆษณา
จากนั้นใช้วิธีดังกล่าวเพื่อตรวจสอบว่าโฆษณายังคงใช้ได้หรือไม่
โฆษณาเปิดแอปมีระยะหมดเวลา 4 ชั่วโมง แคชเวลาในการโหลดใน_expireTime
ตัวแปร
// send the request to load the ad.
AppOpenAd.Load(_adUnitId, adRequest,
    (AppOpenAd ad, LoadAdError error) =>
    {
        // If the operation failed, an error is returned.
        if (error != null || ad == null)
        {
            Debug.LogError("App open ad failed to load an ad with error : " +
                            error);
            return;
        }
        // If the operation completed successfully, no error is returned.
        Debug.Log("App open ad loaded with response : " + ad.GetResponseInfo());
        // App open ads can be preloaded for up to 4 hours.
        _expireTime = DateTime.Now + TimeSpan.FromHours(4);
        _appOpenAd = ad;
    });
อัปเดตพร็อพเพอร์ตี้ IsAdAvailable เพื่อตรวจสอบ _expireTime เพื่อยืนยันว่าโฆษณาที่โหลด
ยังคงใช้งานได้
public bool IsAdAvailable
{
    get
    {
        return _appOpenAd != null
               && _appOpenAd.IsLoaded()
               && DateTime.Now < _expireTime;
    }
}
รอเหตุการณ์สถานะแอป
ใช้ AppStateEventNotifier เพื่อฟังเหตุการณ์ที่แอปพลิเคชันทำงานอยู่เบื้องหน้าและ
เบื้องหลัง คลาสนี้จะเรียกใช้เหตุการณ์ AppStateChanged ทุกครั้งที่
แอปพลิเคชันทำงานอยู่เบื้องหน้าหรือเบื้องหลัง
private void Awake()
{
    // Use the AppStateEventNotifier to listen to application open/close events.
    // This is used to launch the loaded ad when we open the app.
    AppStateEventNotifier.AppStateChanged += OnAppStateChanged;
}
private void OnDestroy()
{
    // Always unlisten to events when complete.
    AppStateEventNotifier.AppStateChanged -= OnAppStateChanged;
}
เมื่อเราจัดการสถานะ AppState.Foreground และ IsAdAvailable
เป็น true เราจะเรียกใช้ ShowAppOpenAd() เพื่อแสดงโฆษณา
private void OnAppStateChanged(AppState state)
{
    Debug.Log("App State changed to : "+ state);
    // if the app is Foregrounded and the ad is available, show it.
    if (state == AppState.Foreground)
    {
        if (IsAdAvailable)
        {
            ShowAppOpenAd();
        }
    }
}
แสดงโฆษณาเปิดแอป
หากต้องการแสดงโฆษณาเปิดแอปที่โหลดแล้ว ให้เรียกใช้เมธอด Show() ในอินสแตนซ์ AppOpenAd โฆษณาจะแสดงได้ครั้งเดียวต่อการโหลด ใช้เมธอด CanShowAd()
 เพื่อยืนยันว่าโฆษณาพร้อมแสดง
/// <summary>
/// Shows the app open ad.
/// </summary>
public void ShowAppOpenAd()
{
    if (appOpenAd != null && appOpenAd.CanShowAd())
    {
        Debug.Log("Showing app open ad.");
        appOpenAd.Show();
    }
    else
    {
        Debug.LogError("App open ad is not ready yet.");
    }
}
ล้างข้อมูลโฆษณาเปิดแอป
เมื่อใช้งาน AppOpenAd เสร็จแล้ว ให้เรียกใช้เมธอด Destroy()
ก่อนที่จะทิ้งการอ้างอิง
appOpenAd.Destroy();
การเรียกนี้จะแจ้งให้ปลั๊กอินทราบว่าไม่ได้ใช้ออบเจ็กต์นั้นอีกต่อไปและสามารถเรียกคืนหน่วยความจำที่ออบเจ็กต์นั้นใช้ได้ การไม่เรียกใช้เมธอดนี้จะทำให้เกิดหน่วยความจำรั่ว
โหลดโฆษณาเปิดแอปถัดไปล่วงหน้า
AppOpenAd เป็นออบเจ็กต์ที่ใช้ได้ครั้งเดียว ซึ่งหมายความว่าเมื่อแสดงโฆษณาที่เปิดแอปแล้ว
จะใช้ออบเจ็กต์นั้นอีกไม่ได้ หากต้องการขอโฆษณาที่เปิดแอปอีกรายการ
คุณจะต้องสร้างออบเจ็กต์ AppOpenAd ใหม่
หากต้องการเตรียมโฆษณาเปิดแอปสำหรับโอกาสในการแสดงผลครั้งถัดไป ให้โหลดโฆษณาเปิดแอปไว้ล่วงหน้าเมื่อมีการเรียกใช้เหตุการณ์โฆษณา OnAdFullScreenContentClosed หรือ
OnAdFullScreenContentFailed
private void RegisterReloadHandler(AppOpenAd ad)
{
    ...
    // Raised when the ad closed full screen content.
    ad.OnAdFullScreenContentClosed += ()
    {
        Debug.Log("App open ad full screen content closed.");
        // Reload the ad so that we can show another as soon as possible.
        LoadAppOpenAd();
    };
    // Raised when the ad failed to open full screen content.
    ad.OnAdFullScreenContentFailed += (AdError error) =>
    {
        Debug.LogError("App open ad failed to open full screen content " +
                       "with error : " + error);
        // Reload the ad so that we can show another as soon as possible.
        LoadAppOpenAd();
    };
}
การเริ่มแอปแบบ Cold Start และหน้าจอการโหลด
เอกสารประกอบจนถึงตอนนี้ถือว่าคุณแสดงโฆษณาเปิดแอปเฉพาะเมื่อผู้ใช้ เปิดแอปของคุณในเบื้องหน้าเมื่อแอปถูกระงับในหน่วยความจำ "Cold Start" จะเกิดขึ้นเมื่อ แอปของคุณเปิดขึ้น แต่ก่อนหน้านี้ไม่ได้ถูกระงับในหน่วยความจำ
ตัวอย่างของ Cold Start คือเมื่อผู้ใช้เปิดแอปเป็นครั้งแรก เมื่อมีการเริ่มแอปแบบ Cold Start คุณจะไม่มีโฆษณาเปิดแอปที่โหลดไว้ก่อนหน้านี้ซึ่งพร้อม แสดงทันที ความล่าช้าระหว่างเวลาที่คุณขอโฆษณาและเวลาที่คุณได้รับโฆษณา กลับอาจทำให้เกิดสถานการณ์ที่ผู้ใช้สามารถใช้แอปของคุณได้ในระยะเวลาสั้นๆ ก่อนที่จะ ประหลาดใจกับโฆษณาที่ไม่อยู่ในบริบท คุณควรหลีกเลี่ยงการทำเช่นนี้เนื่องจากจะทำให้ผู้ใช้ได้รับประสบการณ์การใช้งานที่ไม่ดี
วิธีที่แนะนำในการใช้โฆษณาเปิดแอปเมื่อเริ่มแอปเป็นครั้งแรกคือการใช้หน้าจอการโหลด เพื่อโหลดชิ้นงานเกมหรือแอป และแสดงโฆษณาจากหน้าจอการโหลด เท่านั้น หากแอปโหลดเสร็จสมบูรณ์และส่งผู้ใช้ไปยังเนื้อหาหลักของแอปแล้ว อย่าแสดงโฆษณา
แนวทางปฏิบัติแนะนำ
โฆษณาเปิดแอปช่วยให้คุณสร้างรายได้จากหน้าจอการโหลดของแอปเมื่อแอปเปิดตัวครั้งแรก และระหว่างการสลับแอป แต่สิ่งสำคัญคือต้องคำนึงถึงแนวทางปฏิบัติแนะนำต่อไปนี้ เพื่อให้ผู้ใช้เพลิดเพลินกับการใช้แอป
- แสดงโฆษณาการเปิดแอปครั้งแรกหลังจากที่ผู้ใช้ใช้แอปของคุณ 2-3 ครั้ง
- แสดงโฆษณาเปิดแอปในช่วงเวลาที่ผู้ใช้ต้องรอให้แอปโหลด
- หากคุณมีหน้าจอการโหลดภายใต้โฆษณาเมื่อเปิดแอปและหน้าจอการโหลด
โหลดเสร็จก่อนที่จะปิดโฆษณา ให้ปิดหน้าจอการโหลดใน
OnAdDidDismissFullScreenContentตัวแฮนเดิลเหตุการณ์
- ในแพลตฟอร์ม iOS AppStateEventNotifierจะสร้างอินสแตนซ์ของAppStateEventClient GameObjectเหตุการณ์ต้องมีGameObjectนี้จึงจะเริ่มทำงานได้ ดังนั้นอย่าทำลาย เหตุการณ์จะหยุดทำงานหากมีการทำลายGameObject
แหล่งข้อมูลเพิ่มเติม
- ตัวอย่าง HelloWorld การติดตั้งใช้งานโฆษณาทุกรูปแบบขั้นต่ำ