โฆษณาที่มีการให้รางวัล

จัดทุกอย่างให้เป็นระเบียบอยู่เสมอด้วยคอลเล็กชัน บันทึกและจัดหมวดหมู่เนื้อหาตามค่ากำหนดของคุณ

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

สิ่งที่ต้องดำเนินการก่อน

สร้างออบเจ็กต์โฆษณาที่มีการให้รางวัล

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

using UnityEngine.Events;
using UnityEngine;
using GoogleMobileAds.Api;
using GoogleMobileAds.Common;
using UnityEngine.UI;
using System;
using System.Collections.Generic;

public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardedAd rewardedAd;
    ...

    public void Start()
    {
        ...

        this.rewardedAd = new RewardedAd(adUnitId);
    }
}

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

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

วิธีที่ง่ายที่สุดในการโหลดโฆษณาทดสอบคือการใช้รหัสหน่วยโฆษณาทดสอบสําหรับโฆษณาที่มีการให้รางวัลใน Android และ iOS ดังนี้

Android

ca-app-pub-3940256099942544/5224354917

iOS

ca-app-pub-3940256099942544/1712485313

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

ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทํางานของโฆษณาทดสอบของ SDK โฆษณาในอุปกรณ์เคลื่อนที่ได้ที่โฆษณาทดสอบ

โหลดโฆษณา

หากต้องการโหลดโฆษณาที่มีการให้รางวัล ให้เรียกใช้เมธอด loadAd() ของออบเจ็กต์ RewardedAd วิธีนี้กําหนดให้อินสแตนซ์ของ AdRequest เป็นอาร์กิวเมนต์

...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardedAd rewardedAd;
    ...

    public void Start()
    {
        ...

        this.rewardedAd = new RewardedAd(adUnitId);

        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the rewarded ad with the request.
        this.rewardedAd.LoadAd(request);
    }
}

[ไม่บังคับ] ตรวจสอบการเรียกกลับการยืนยันฝั่งเซิร์ฟเวอร์ (SSV)

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

ตัวอย่างโค้ดต่อไปนี้แสดงวิธีตั้งค่าตัวเลือก SSV หลังจากที่โหลดโฆษณาที่มีการให้รางวัลแล้ว

void HandleRewardedAdLoaded(RewardedAd ad, AdFailedToLoadEventArgs error)
{
    // Create and pass the SSV options to the rewarded ad.
    var options = new ServerSideVerificationOptions
                          .Builder()
                          .SetCustomData("SAMPLE_CUSTOM_DATA_STRING")
                          .Build()
    ad.SetServerSideVerificationOptions(options);
}

หากคุณต้องการตั้งค่าสตริงรางวัลที่กําหนดเอง คุณต้องทําก่อนแสดงโฆษณา

เหตุการณ์โฆษณา

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

using GoogleMobileAds.Api;
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardedAd rewardedAd;
    ...

    public void Start()
    {
        string adUnitId;
        #if UNITY_ANDROID
            adUnitId = "ca-app-pub-3940256099942544/5224354917";
        #elif UNITY_IPHONE
            adUnitId = "ca-app-pub-3940256099942544/1712485313";
        #else
            adUnitId = "unexpected_platform";
        #endif

        this.rewardedAd = new RewardedAd(adUnitId);

        // Called when an ad request has successfully loaded.
        this.rewardedAd.OnAdLoaded += HandleRewardedAdLoaded;
        // Called when an ad request failed to load.
        this.rewardedAd.OnAdFailedToLoad += HandleRewardedAdFailedToLoad;
        // Called when an ad is shown.
        this.rewardedAd.OnAdOpening += HandleRewardedAdOpening;
        // Called when an ad request failed to show.
        this.rewardedAd.OnAdFailedToShow += HandleRewardedAdFailedToShow;
        // Called when the user should be rewarded for interacting with the ad.
        this.rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
        // Called when the ad is closed.
        this.rewardedAd.OnAdClosed += HandleRewardedAdClosed;

        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the rewarded ad with the request.
        this.rewardedAd.LoadAd(request);
    }

    public void HandleRewardedAdLoaded(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleRewardedAdLoaded event received");
    }

    public void HandleRewardedAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
    {
        MonoBehaviour.print(
            "HandleRewardedAdFailedToLoad event received with message: "
                             + args.Message);
    }

    public void HandleRewardedAdOpening(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleRewardedAdOpening event received");
    }

    public void HandleRewardedAdFailedToShow(object sender, AdErrorEventArgs args)
    {
        MonoBehaviour.print(
            "HandleRewardedAdFailedToShow event received with message: "
                             + args.Message);
    }

    public void HandleRewardedAdClosed(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleRewardedAdClosed event received");
    }

    public void HandleUserEarnedReward(object sender, Reward args)
    {
        string type = args.Type;
        double amount = args.Amount;
        MonoBehaviour.print(
            "HandleRewardedAdRewarded event received for "
                        + amount.ToString() + " " + type);
    }
}

เหตุการณ์ OnUserEarnedReward มีอาร์กิวเมนต์เหตุการณ์พิเศษ ซึ่งส่งผ่านอินสแตนซ์ของ Reward ที่มี Type และ Amount ที่อธิบายรางวัลที่ให้ไว้แก่ผู้ใช้

public void HandleUserEarnedReward(object sender, Reward args)
{
    string type = args.Type;
    double amount = args.Amount;
     MonoBehaviour.print(
          "HandleRewardedAdRewarded event received for "
              + amount.ToString() + " " + type);
}

เหตุการณ์โฆษณาที่ใช้ได้

OnAdLoaded
มีการเรียกใช้เมื่อโหลดโฆษณาเสร็จแล้ว
OnAdFailedToLoad
มีการเรียกใช้เมื่อโหลดโฆษณาไม่สําเร็จ พร็อพเพอร์ตี้ Message ของ AdErrorEventArgs ที่ระบุอธิบายประเภทของความล้มเหลวที่เกิดขึ้น
OnAdOpening
มีการเรียกใช้เมื่อโฆษณาแสดง ครอบคลุมบนหน้าจอของอุปกรณ์ เราขอแนะนําให้คุณหยุดเอาต์พุตเสียงของแอปหรือ Game Loop ชั่วคราวหากจําเป็น
OnAdFailedToShow
มีการเรียกใช้เมื่อโฆษณาแสดงไม่สําเร็จ พร็อพเพอร์ตี้ Message ของ AdErrorEventArgs ที่ระบุอธิบายประเภทของความล้มเหลวที่เกิดขึ้น
OnUserEarnedReward
มีการเรียกใช้เมื่อผู้ใช้ควรได้รับรางวัลเมื่อดูวิดีโอ พารามิเตอร์ Reward อธิบายรางวัลที่แสดงต่อผู้ใช้
OnAdClosed
มีการเรียกใช้เมื่อโฆษณาวิดีโอที่มีการให้รางวัลปิดอยู่เนื่องจากผู้ใช้แตะไอคอนปิดหรือใช้ปุ่มย้อนกลับ หากแอปหยุดเอาต์พุตเสียงหรือ Game Loop ไว้ชั่วคราว แอปนี้เหมาะที่จะกลับมาทํางานอีกครั้ง

แสดงโฆษณา

ก่อนที่จะแสดงโฆษณาที่มีการให้รางวัลแก่ผู้ใช้ ผู้ใช้ต้องแสดงตัวเลือกที่ชัดเจนเพื่อดูเนื้อหาที่มีการให้รางวัลเพื่อแลกกับรางวัล โฆษณาที่มีการให้รางวัลต้องเป็นเนื้อหาที่เลือกใช้เสมอ

หากต้องการแสดงโฆษณาที่มีการให้รางวัล ให้ตรวจสอบเมธอด IsLoaded() เพื่อยืนยันว่าโฆษณาโหลดเสร็จแล้ว จากนั้นโทรหา show() โดยตัวอย่างมีดังนี้

private void UserChoseToWatchAd()
{
  if (this.rewardedAd.IsLoaded()) {
    this.rewardedAd.Show();
  }
}

การใช้ OnAdClosed เพื่อโหลดโฆษณาที่มีการให้รางวัลครั้งถัดไปซ้ํา

RewardedAd เป็นออบเจ็กต์แบบใช้ครั้งเดียว ซึ่งหมายความว่าเมื่อโฆษณาที่มีการให้รางวัลแสดงขึ้น ก็จะใช้ออบเจ็กต์นั้นโหลดโฆษณาอื่นไม่ได้ หากต้องการขอโฆษณาที่มีการให้รางวัลอื่น คุณจะต้องสร้างออบเจ็กต์ RewardedAd ใหม่

แนวทางปฏิบัติแนะนําคือการโหลดโฆษณาที่มีการให้รางวัลอีกรายการหนึ่งในเหตุการณ์โฆษณา OnAdClosed เพื่อให้โฆษณาที่มีการให้รางวัลครั้งถัดไปเริ่มโหลดทันทีที่ปิดโฆษณาก่อนหน้า

...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardedAd rewardedAd;
    ...

    public void CreateAndLoadRewardedAd()
    {
        #if UNITY_ANDROID
            string adUnitId = "ca-app-pub-3940256099942544/5224354917";
        #elif UNITY_IPHONE
            string adUnitId = "ca-app-pub-3940256099942544/1712485313";
        #else
            string adUnitId = "unexpected_platform";
        #endif

        this.rewardedAd = new RewardedAd(adUnitId);

        this.rewardedAd.OnAdLoaded += HandleRewardedAdLoaded;
        this.rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
        this.rewardedAd.OnAdClosed += HandleRewardedAdClosed;

        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the rewarded ad with the request.
        this.rewardedAd.LoadAd(request);
    }

...

    public void HandleRewardedAdClosed(object sender, EventArgs args)
    {
        this.CreateAndLoadRewardedAd();
    }
}

กําลังโหลดโฆษณาที่มีการให้รางวัลหลายรายการ

หากต้องการโหลดโฆษณาที่มีการให้รางวัลหลายรายการ ให้ทําตามขั้นตอนที่ระบุไว้ในส่วนสร้างออบเจ็กต์โฆษณาที่มีการให้รางวัล และโหลดโฆษณาสําหรับโฆษณาแต่ละรายการที่ต้องการโหลด ข้อมูลโค้ดด้านล่างแสดงวิธีโหลดโฆษณาที่มีการให้รางวัล 2 รายการสําหรับตําแหน่งโฆษณา 2 ตําแหน่งที่แตกต่างกัน

...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardedAd gameOverRewardedAd;
    private RewardedAd extraCoinsRewardedAd;
    ...
    public void Start()
    {
        ...

        this.gameOverRewardedAd = CreateAndLoadRewardedAd(adUnitId);
        this.extraCoinsRewardedAd = CreateAndLoadRewardedAd(adUnitId);
    }

    public RewardedAd CreateAndLoadRewardedAd(string adUnitId)
    {
        RewardedAd rewardedAd = new RewardedAd(adUnitId);

        rewardedAd.OnAdLoaded += HandleRewardedAdLoaded;
        rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
        rewardedAd.OnAdClosed += HandleRewardedAdClosed;

        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the rewarded ad with the request.
        rewardedAd.LoadAd(request);
        return rewardedAd;
    }
}

ตัวอย่าง