Utwórz zdarzenia niestandardowe

Zdarzenia niestandardowe umożliwiają wydawcom korzystanie z AdMob zapośredniczenie, aby dodać zapośredniczenie kaskadowe w przypadku zewnętrznej sieci reklamowej, która nie jest inną siecią z obsługiwanych sieci reklamowych. Z tego przewodnika dowiesz się, jak korzystać z istniejących zdarzeń niestandardowych utworzonych na potrzeby Androida iOS w projekcie Unity.

Wymagania wstępne

  • Wykonaj czynności opisane w sekcji Pierwsze kroki. Twoja jedność aplikacja powinna już mieć zaimportowaną wtyczkę do reklam mobilnych Google dla Unity.

  • Adaptery zdarzeń niestandardowych, które zostały już utworzone na potrzeby Androida i iOS. Aby utworzyć niestandardowe znajdziesz w przewodnikach po zdarzeniach niestandardowych Android i iOS

Definiowanie zdarzenia niestandardowego

Aby zdarzenie niestandardowe mogło uczestniczyć w zapośredniczeniu, musi ono być należy zdefiniować w AdMob interfejsie internetowym. Dodaj niestandardowe do obu tagów Grupy zapośredniczenia na Androida i iOS.

Zrzut ekranu przedstawia przykładowe ustawienia zdarzenia niestandardowego:

Jak wypełniać parametry
Nazwa klasy (iOS)

W iOS wpisz nazwę klasy, która implementuje zdarzenie niestandardowe.

Jeśli Twoja klasa jest zaimplementowana w języku Swift, do jej nazwy musisz dodać prefiks nazwa jego aplikacji lub modułu platformy (np. appName.className).

Nazwa miejsca docelowego jest wymagana, jeśli w projekcie masz wiele celów lub jeśli nazwa projektu jest inna niż nazwa miejsca docelowego. Dzięki nazwie elementu docelowego wygląda tak: appName_targetName.className. Ponadto pamiętaj o zastąpieniu wszystkich znaków innych niż alfanumeryczne, np. myślników, podkreśleń.

Nazwa zajęć (Android) W przypadku Androida wartość Class Name musi wynosić pełną i jednoznaczną nazwę klasy dla Androida (na przykład com.google.ads.mediation.sample.customevent.SampleCustomEvent).
Etykieta Wpisz niepowtarzalną nazwę zdarzenia.
Parametr Jeśli chcesz przekazać do zdarzenia niestandardowego argument tekstowy, na przykład identyfikator jednostki reklamowej.

Importuj biblioteki zdarzeń niestandardowych

Zdarzenia niestandardowe mogą wymagać dołączenia dodatkowych bibliotek do działania bez obaw. Możesz na przykład dodać te biblioteki:

  • Pakiet SDK innej firmy na Androida
  • Zdarzenie niestandardowe firmy zewnętrznej w Androidzie
  • Pakiet SDK do wyświetlania reklam innych firm na iOS
  • Zdarzenie niestandardowe firmy zewnętrznej w systemie iOS

Typy bibliotek

Kod na Androida lub iOS można zaimportować do projektu Unity na kilka sposobów: w tym:

  • Importowanie gotowych artefaktów z Androida lub iOS przy użyciu zależności zewnętrznej Menedżer Unity
  • Importowanie wtyczek AAR i bibliotek Androida
  • Importowanie plików źródłowych Java i Kotlin
  • Importowanie plików źródłowych i bibliotek statycznych iOS

W zależności od sposobu pakietu bibliotek, których używasz, możesz potrzebować importowanie danych do poszczególnych bibliotek. Każdą z tych opcji omawiamy bardziej szczegółowo w dalszej części tego artykułu.

(Zalecane) Importowanie gotowych artefaktów z Androida lub iOS

Zaimportuj gotowe artefakty z Maven lub CocoaPods za pomocą interfejsu External Menedżer zależności w Unity Wtyczka jest dołączona do wtyczki GoogleMobileAds.

Aby zaimportować istniejące artefakty, utwórz plik konfiguracji w celu zdefiniowania importowanie danych. Nazwa pliku i ścieżka muszą spełniać te wymagania:

  • Plik musi znajdować się w folderze /Editor/.
  • Nazwa pliku musi kończyć się na Dependencies.xml.

Aby np. zaimportować adaptery zdarzeń niestandardowych na potrzeby hipotetycznej sieci reklamowej o nazwie AdPub, utwórz plik:

Assets/AdPub/Editor/AdPubDependencies.xml

Następnie zdefiniuj zależności w pliku AdPubDependencies.xml. Reguły konfigurowania importowania można znaleźć na stronie Zewnętrzny menedżer zależności dla Unity programie Rozpoczęto. ten fragment kodu zawiera SDK na Androida i iOS oraz zdarzenie niestandardowe bibliotek do hipotetycznego „AdPub” w sieci reklamowej.

Assets/AdPub/Editor/AdPubDependencies.xml

<dependencies>
  <androidPackages>
    <androidPackage spec="com.adpub.android:adpub-sdk:1.0.0" />
    <androidPackage spec="com.adpub.android:adpub-custom-event:1.0.0">
      <repositories>
        <repository>https://repo.maven.apache.org/maven2/</repository>
        <repository>https://dl.google.com/dl/android/maven2/</repository>
      </repositories>
    </androidPackage>
  </androidPackages>
  <iosPods>
    <iosPod name="AdPubSDK" version="1.0" />
    <iosPod name="AdPubCustomEvent" version="1.0">
      <sources>
        <source>https://github.com/CocoaPods/Specs</source>
      </sources>
    </iosPod>
  </iosPods>
</dependencies>

Jeśli artefakt zdarzenia niestandardowego jest już zależny od wymaganej reklamy pakietu SDK sieci, nie musisz jawnie definiować zależności SDK: Przykład

Zewnętrzny menedżer zależności automatycznie monitoruje zmiany w konfiguracji i usuwa zależności. Możesz też ręcznie rozwiązać problem za pomocą następujące polecenie menu:

Assets > External Dependency Manager > Android Resolver > Force Resolve

Importowanie wtyczek AAR i bibliotek Androida

Unity obsługuje importowanie plików *.aar oraz projektów z biblioteki Androida. Jeśli niestandardowe zdarzenie Androida jest spakowane w ten sposób. Więcej informacji: Wtyczki AAR i Android Biblioteki jak uwzględnić je w projekcie Unity.

Importuj pliki źródłowe Java i Kotlin

Od wersji Unity 2018.2 lub nowszej, jeśli kod zdarzenia niestandardowego na Androidzie zawiera nieskompilowanych plików *.java lub *.kt, możesz użyć plików źródłowych Java lub Kotlin jako wtyczki.

Importowanie plików źródłowych i bibliotek statycznych na iOS

Unity obsługuje artefakty *.framework oraz pliki źródłowe *.h i *.m. Importuję Artefakty iOS i pliki źródłowe zostały objaśnione w przewodniku Unity dotyczącym kreacji natywnych .

Testowanie zdarzeń niestandardowych za pomocą inspektora reklam

Do testowania możesz używać inspektora reklam o prawidłowym zaimportowaniu zdarzeń niestandardowych do Twojej aplikacji. Reklama inspektora można otworzyć za pomocą gestów lub automatycznie, korzystając z minimalnej ilości kodu.

(Opcjonalnie) Wywołaj natywne metody pakietu SDK innej firmy za pomocą skryptów w C#

Pakiety SDK zewnętrznych sieci reklamowych mogą mieć specjalne wymagania, bezpośrednio przy wywoływaniu metod Androida lub iOS. Proces wywoływania tych metod są następujące:

  1. Zdefiniowanie wspólnego interfejsu dla klientów platformy
  2. Wdrażanie domyślnego klienta na nieobsługiwanych platformach
  3. Wdrażanie klienta na Androida do wywoływania metod Androida
  4. Implementacja klienta na iOS do wywoływania metod w iOS
  5. Wdrażanie klienta z fabryki na warunkowo Przełączanie się między klientami na iOS i Androida
  6. Zdefiniuj interfejs API umożliwiający dostęp do wszystkich funkcji pakietów SDK zewnętrznych sieci reklamowych

W następnej sekcji pokazujemy, jak te kroki zastosować w przypadku hipotetycznego sieć reklamowa o nazwie „AdPub” w interfejsie API C#, który może wywoływać metody w Androidzie oraz iOS:

Android

package com.adpub.android;

public class AdPubSdk
{
    public static void setHasUserConsent(boolean hasUserConsent);
}

iOS

@interface AdPubSdk : NSObject
+ (void)setHasUserConsent:(BOOL)hasUserConsent;
@end

Zdefiniowanie wspólnego interfejsu dla klientów platformy

Utwórz interfejs IAdPubClient za pomocą metody, która reprezentuje źródło API na Androida i iOS.

Assets/AdPub/Common/IAdPubClient.cs

namespace AdPub.Common
{
    public interface IAdPubClient
    {
        ///<summary>
        /// Sets a flag indicating if the app has user consent for advertisement.
        ///</summary>
        void SetHasUserConsent(bool hasUserConsent);
    }
}

Zdefiniuj domyślnego klienta dla nieobsługiwanych platform

Utwórz klasę DefaultClient implementującą interfejs IAdPubClient, który po prostu rejestruje nazwę metody. Używaj tej implementacji w edytorze Unity i wszystkich na platformach innych niż Android i iOS.

Assets/AdPub/Common/DefaultClient.cs

namespace AdPub.Common
{
    public class DefaultClient : IAdPubClient
    {
        public void SetHasUserConsent(bool hasUserConsent)
        {
            Debug.Log("SetHasUserConsent was called.");
        }
    }
}

Wdróż klienta platformy iOS

Utwórz klasę iOSAdPubClient implementującą interfejs IAdPubClient w iOS. Ta implementacja wykorzystuje InteropServices do połączenia metody setHasUserConsent() w klasie AdPubSdk systemu iOS.

Assets/AdPub/Platforms/iOS/iOSAdPubClient.cs

// Wrap this class in a conditional operator to make sure it only runs on iOS.
#if UNITY_IOS

// Reference InteropServices to include the DLLImportAttribute type.
using System.Runtime.InteropServices;

using AdPub.Common;

namespace AdPub.Platforms.Android
{
    public class iOSAdPubClient : IAdPubClient
    {
        public void SetHasUserConsent(bool hasUserConsent)
        {
            GADUAdPubSetHasUserConsent(hasUserConsent);
        }

        [DllImport("__Internal")]
        internal static extern void GADUAdPubSetHasUserConsent(bool hasUserConsent);
    }
}
#endif

Następnie wdróż zdefiniowaną metodę GADUAdPubSetHasUserConsent() powyżej. Tworzenie obiektu AdPubClientBridge.m za pomocą metody C GADUAdPubSetHasUserConsent() do obsługi wywołania metody z Unity i wywoływania AdPubSDK.

AdPubClientBridge to plik źródłowy iOS i musi zostać umieszczony w elemencie Plugins/iOS zgodnie z opisem w przewodniku Unity dotyczącym kreacji natywnych

Assets/AdPub/Plugins/iOS/AdPubClientBridge.m

#import <AdPubSDK/AdPubSDK.h>

void GADUAdPubSetHasUserConsent(BOOL hasUserConsent) {
  [AdPubSDK setHasUserConsent:hasUserConsent];
}

Wdróż klienta platformy Android

Utwórz klasę AndroidAdPubCient implementującą interfejs IAdPubClient w na urządzeniu z Androidem. Ta implementacja korzysta z Asystenta w Javie dla Androida zajęcia aby wywołać metodę statyczną setHasUserConsent() Androida.

Jako że klasy pomocnicze Androida w języku Java są dostępne tylko w środowisku wykonawczym, możesz zapobiec błędom kompilacji, używając kompilatora UNITY_ANDROID dyrektywa do zapakowania zgodnie z tym, co pokazujemy we fragmencie kodu. Możesz też użyć narzędzia Assembly definicje w Unity 2017.4 i nowszych, aby rozwiązać ten problem.

Assets/AdPub/Platforms/Android/AndroidAdPubClient.cs

// Wrap this class in a conditional operator to make sure it only runs on Android.
#if UNITY_ANDROID

// Reference the UnityEngine namespace which contains the JNI Helper classes.
using UnityEngine;

using AdPub.Common;

namespace AdPub.Platforms.Android
{
    public class AndroidAdPubClient : IAdPubClient
    {
        public void SetHasUserConsent(bool hasUserConsent)
        {
             // Make a reference to the com.adpub.AdPubSDK.
            AndroidJavaClass adPubSdk = new AndroidJavaClass("com.adpub.AdPubSdk");

            // Call the native setHasUserConsent method of com.adpub.AdPubSDK.
            adPubSdk.CallStatic("setHasUserConsent", hasUserConsent);
        }
    }
}
#endif

Utwórz metodę fabryczną, która zwróci prawidłową implementację klienta

Teraz, gdy masz już wdrożenia klienta na każdej platformie, utwórz AdPubClientFactory do zwrócenia prawidłowej implementacji modelu interfejsu IAdPubClient w zależności od platformy środowiska wykonawczego. Te zajęcia korzystają z funkcji kompilator dyrektyw zwraca odpowiedniego IAdPubClientklienta.

Assets/AdPub/Common/AdPubClientFactory.cs

namespace AdPub.Common
{
    public class AdPubClientFactory
    {
        // Return the correct platform client.
        public static IAdPubClient GetClient()
        {
#if   !UNITY_EDITOR && UNITY_ANDROID
            return new AdPub.Platforms.Android.AndroidAdPubClient();
#elif !UNITY_EDITOR && UNITY_IOS
            return new AdPub.Platforms.iOS.iOSAdPubClient();
#else
            // Returned for the Unity Editor and unsupported platforms.
            return new DefaultClient();
#endif
        }
    }
}

Zdefiniuj publiczny interfejs API dla każdej metody interfejsu

Utwórz klasę AdPubApi zawierającą wywołania metod dla poszczególnych metod klienta w interfejsu IAdPubClient. Ta klasa używa: AdPubClientFactory, aby uzyskać wystąpienie IAdPubClient i wywołuje tego klienta, aby pobrać bazowy pakiet SDK funkcje.

Assets/AdPub/AdPubApi.cs

using AdPub.Common;

namespace AdPub
{
    public class AdPubApi
    {
        private static readonly IAdPubClient client = GetAdPubClient();

        // Returns the correct client for the current runtime platform.
        private static IAdPubClient GetAdPubClient()
        {
            return AdPubClientFactory.GetClient();
        }

        // Sets the user consent using the underlying SDK functionality.
        public static void SetHasUserConsent(bool hasUserConsent)
        {
            client.SetHasUserConsent(hasUserConsent);
        }
    }
}

Wywołaj nowo zdefiniowany interfejs API

Aby wywołać zdefiniowany powyżej interfejs API:

Assets/Scripts/AdPubController.cs

using UnityEngine;
using AdPub;

public class AdPubController : MonoBehaviour
{
    // TODO: Get consent from the user and update this userConsent field.
    public bool userConsent;

    // Called on startup of the GameObject it's assigned to.
    public void Start()
    {
        // Pass the user consent to AdPub.
        AdPubApi.SetHasUserConsent(userConsent);
    }
}

Dodatkowe przykłady adaptera zewnętrznej sieci reklamowej

Otwórz stronę GitHub z wtyczką do reklam mobilnych Google dla Unity repozytorium więcej przykładów zewnętrznych adapterów zapośredniczenia implementujących interfejsy API C#. , aby zawijać wywołania metod w iOS i Androidzie.