โฆษณาเปิดแอป

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

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

ข้อกำหนดเบื้องต้น

ทดสอบด้วยโฆษณาทดสอบเสมอ

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

อย่างไรก็ตาม หลังจากที่คุณลงทะเบียนแอปใน เว็บอินเทอร์เฟซของ Ad Manager และสร้างหน่วยโฆษณาของคุณเอง รหัสสำหรับใช้ในแอป ให้กำหนดค่าอุปกรณ์เป็นการทดสอบให้ชัดเจน อุปกรณ์ในระหว่าง ที่กำลังพัฒนา

/21775744923/example/app-open

การใช้งาน

ขั้นตอนหลักๆ ในการผสานรวมโฆษณาเปิดแอปมีดังนี้

  1. สร้างคลาสยูทิลิตี
  2. โหลดโฆษณาเปิดแอป
  3. ฟังเหตุการณ์โฆษณาเปิดแอป
  4. พิจารณาการหมดอายุของโฆษณา
  5. รอรับเหตุการณ์สถานะแอป
  6. แสดงโฆษณาเปิดแอป
  7. ล้างโฆษณาเปิดแอป
  8. โหลดโฆษณาเปิดแอปรายการถัดไปล่วงหน้า

สร้างคลาสยูทิลิตี

สร้างคลาสใหม่ชื่อ 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
{

    // This ad unit is configured to always serve test ads.
    private string _adUnitId = "/21775744923/example/app-open";

    public bool IsAdAvailable
    {
        get
        {
            return _appOpenAd != null;
        }
    }

    public void Start()
    {
        // Initialize the 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 วิธีโหลดต้องมีรหัสหน่วยโฆษณา AdManagerAdRequest และเครื่องจัดการเสร็จสมบูรณ์ เมื่อโหลดโฆษณาสำเร็จหรือไม่สำเร็จ ระบบจะระบุออบเจ็กต์ AppOpenAd ที่โหลดเป็นพารามิเตอร์ใน Completion Handler ตัวอย่างด้านล่างแสดงวิธีโหลด AppOpenAd


  // This ad unit is configured to always serve test ads.
  private string _adUnitId = "/21775744923/example/app-open";

  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 AdManagerAdRequest();

      // 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 โฆษณาจะแสดงได้ 1 ครั้งต่อการโหลดเท่านั้น ใช้ 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 คุณจะไม่มีโฆษณาเปิดแอปที่โหลดก่อนหน้านี้ซึ่งพร้อม แสดงได้ทันที ระยะเวลาระหว่างที่คุณขอโฆษณาและรับโฆษณา อาจสร้างสถานการณ์ที่ผู้ใช้ สามารถใช้แอปของคุณเป็นเวลาสั้นๆ โดยโฆษณาที่อยู่นอกบริบท ซึ่งควรหลีกเลี่ยงเนื่องจาก ผู้ใช้ได้รับประสบการณ์ที่ไม่ดี

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

แนวทางปฏิบัติแนะนำ

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

  • แสดงโฆษณาเปิดแอปแรกของคุณหลังจากที่ผู้ใช้ใช้แอปของคุณ 2-3 ครั้ง
  • แสดงโฆษณาเปิดแอปในช่วงเวลาที่ผู้ใช้กำลังรอ แอปของคุณไปโหลดขึ้นมา
  • หากคุณมีหน้าจอการโหลดใต้โฆษณาเปิดแอปและหน้าจอการโหลด โหลดเสร็จสมบูรณ์ก่อนจะปิดโฆษณา ปิดหน้าจอการโหลดใน เครื่องจัดการเหตุการณ์ OnAdDidDismissFullScreenContent
  • ในแพลตฟอร์ม iOS AppStateEventNotifier จะสร้างอินสแตนซ์ AppStateEventClient GameObject GameObject นี้จําเป็นสําหรับการเรียกเหตุการณ์ ดังนั้นอย่าลบออก เหตุการณ์จะหยุดทํางานหาก GameObject คือ ถูกทำลายแล้ว

แหล่งข้อมูลเพิ่มเติม