Reklamy z nagrodą

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Reklamy z nagrodą to reklamy, z którymi użytkownicy mogą wchodzić w interakcje w zamian za nagrody w aplikacji. Z tego przewodnika dowiesz się, jak zintegrować reklamy z nagrodą z AdMob w aplikacji Unity. Poznaj historie sukcesu klientów: studium przypadku 1, studium przypadku 2.

Wymagania wstępne

Tworzenie obiektu reklamy z nagrodą

RewardedAd żądania reklamy wideo z nagrodą. Pierwszym krokiem na drodze do wyświetlenia reklamy z nagrodą jest utworzenie obiektu RewardedAd przez wywołanie konstruktora z identyfikatorem jednostki reklamowej do wczytania reklamy. Dane znajdziesz w tym fragmencie kodu:

Aby łatwiej zintegrować reklamy za pomocą Edytora Unity, wypróbuj nową stronę miejsc docelowych reklam w wersji beta.

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

Zawsze testuj z reklamami testowymi

Tworząc i testując aplikacje, upewnij się, że używasz reklam testowych zamiast produkcyjnych. Jeśli tego nie zrobisz, Twoje konto może zostać zawieszone.

Najłatwiejszym sposobem wczytywania reklam testowych jest użycie specjalnych identyfikatorów jednostek reklamowych dla reklam z nagrodą na Androida i iOS:

Android

ca-app-pub-3940256099942544/5224354917

iOS

ca-app-pub-3940256099942544/1712485313

Zostały one tak skonfigurowane, aby zwracać reklamy testowe dla każdego żądania. Możesz ich używać we własnych aplikacjach podczas kodowania, testowania i debugowania. Pamiętaj, aby zastąpić je własnym identyfikatorem jednostki reklamowej, zanim opublikujesz aplikację.

Więcej informacji o działaniu reklam testowych pakietu SDK do reklam mobilnych znajdziesz w artykule Test Ads (Reklamy testowe).

Wczytywanie reklamy

Aby wczytać reklamę z nagrodą, wywołaj metodę RewardedAd loadAd(). Ta metoda wymaga wystąpienia AdRequest jako argumentu.

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

[Opcjonalnie] Weryfikowanie wywołań zwrotnych po stronie serwera (SSV)

Aplikacje, które wymagają dodatkowych danych w weryfikacji po stronie serwera, powinny używać niestandardowej funkcji danych o reklamach z nagrodą. Każda wartość ciągu ustawiona w obiekcie reklamy z nagrodą jest przekazywana do parametru zapytania custom_data wywołania zwrotnego SSV. Jeśli nie ustawisz żadnej niestandardowej wartości danych, w wywołaniu zwrotnym SSV nie będzie podana wartość parametru zapytania custom_data.

Poniższy przykładowy kod pokazuje, jak ustawić opcje weryfikacji po wyświetleniu reklamy z nagrodą.

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

Jeśli chcesz ustawić niestandardowy ciąg nagród, musisz to zrobić przed wyświetleniem reklamy.

Zdarzenia reklamowe

Aby jeszcze bardziej dostosować działanie reklamy, możesz brać pod uwagę wiele zdarzeń w cyklu życia reklamy: wczytywanie, otwieranie, zamykanie itd. Wykrywaj te zdarzenia, rejestrując przedstawiciela z odpowiednim modułem obsługi zdarzeń. Najważniejsze zdarzenie to OnUserEarnedReward, które jest wywoływane, gdy użytkownik otrzymuje nagrodę za obejrzenie filmu. Możesz też zaimplementować inne zdarzenia reklamowe, jak pokazano poniżej.

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

Zdarzenie OnUserEarnedReward zawiera specjalne argumenty zdarzeń. Przekazuje wystąpienie elementu Reward z elementami Type i Amount opisującymi nagrodę przyznaną użytkownikowi:

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

Dostępne zdarzenia reklamowe

OnAdLoaded
Wywołane po zakończeniu wczytywania reklamy.
OnAdFailedToLoad
Wywoływane, gdy nie można wczytać reklamy. Właściwość Message podanej właściwości AdErrorEventArgs opisuje typ niepowodzenia.
OnAdOpening
Wywoływane po wyświetleniu reklamy i zasłaniające ekran urządzenia. W razie potrzeby możesz wstrzymać odtwarzanie dźwięku wyjściowego lub odtwarzanie w pętli gry.
OnAdFailedToShow
Wywołane, gdy reklama się nie wyświetli. Właściwość Message podanej właściwości AdErrorEventArgs opisuje typ niepowodzenia.
OnUserEarnedReward
Wywoływane, gdy użytkownik powinien otrzymać nagrodę za obejrzenie filmu. Parametr Reward opisuje nagrodę, która zostanie wyświetlona użytkownikowi.
OnAdClosed
wywoływane, gdy reklama wideo z nagrodą została zamknięta ze względu na kliknięcie ikony zamknięcia lub przycisku Wstecz; Jeśli aplikacja wstrzymała odtwarzanie dźwięku lub pętlę gry, to idealne miejsce, żeby je wznowić.

Wyświetlanie reklamy

Przed wyświetleniem reklamy z nagrodą użytkownicy muszą wybrać opcję jednoznacznego wyświetlenia treści reklamy z nagrodą. Reklamy z nagrodą zawsze muszą być zaakceptowane.

Aby wyświetlić reklamę z nagrodą, sprawdź metodę IsLoaded(), by potwierdzić, że reklama została zakończona, a potem wywołaj metodę show(). Oto przykład:

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

Korzystanie z aplikacji OnAdClosed do wczytywania następnej reklamy z nagrodą

RewardedAd to obiekt jednorazowy. Oznacza to, że po wyświetleniu reklamy z obiektem nie można użyć jej do wczytania innej reklamy. Aby poprosić o kolejną reklamę z nagrodą, musisz utworzyć nowy obiekt RewardedAd.

Sprawdzoną metodą jest wczytanie kolejnej reklamy z nagrodą w zdarzeniu OnAdClosed, aby następna reklama zaczęła się wyświetlać zaraz po odrzuceniu poprzedniej:

...
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();
    }
}

Wczytuję wiele reklam z nagrodą

Aby wczytać wiele reklam z nagrodą, wykonaj czynności podane w sekcji Tworzenie obiektu reklamy z nagrodą i wczytywanie reklamy dla każdej reklamy, którą chcesz wczytać. Fragment kodu poniżej pokazuje, jak wczytać 2 reklamy z nagrodą w 2 różnych miejscach docelowych.

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

Przykłady