Cómo crear eventos personalizados

Los eventos personalizados permiten a los publicadores usar AdMob mediación para agregar mediación en cascada a una red de publicidad externa que no es una de las redes de publicidad compatibles. En esta guía, se explica cómo usar un evento personalizado existente compilado para Android y iOS en un proyecto de Unity

Requisitos previos

  • Completa la sección Comenzar. Tu unidad La app ya debería tener importado el complemento Google Mobile Ads para Unity.

  • Adaptadores de eventos personalizados ya compilados para iOS y Android Para crear una configuración adaptadores de eventos, consulta nuestras guías de eventos personalizados en Android y iOS

Cómo definir un evento personalizado

Para que un evento personalizado participe en la mediación, este debe definirse en la interfaz web AdMob . Agrega un evento personalizado a ambos Grupos de mediación de iOS y Android

En esta captura de pantalla, se muestran algunos ejemplos de configuraciones de eventos personalizados:

Cómo completar parámetros
Nombre de clase (iOS)

En iOS, ingresa el nombre de la clase que implementa el evento personalizado.

Si tu clase se implementa en Swift, debes anteponer el nombre de la clase con el nombre de su app o módulo del framework (por ejemplo, appName.className).

El nombre del destino es obligatorio si tienes varios destinos en tu proyecto o si el nombre del proyecto es diferente del nombre objetivo. Con el nombre del destino, se vería así: appName_targetName.className. Además, recuerda reemplazar cualquier carácter que no sea alfanumérico, como los guiones con guiones bajos.

Nombre de la clase (Android) En Android, asegúrate de que el valor de Class Name sea el nombre de clase completamente calificado para Android (por ejemplo, com.google.ads.mediation.sample.customevent.SampleCustomEvent)
Etiqueta Ingresa un nombre único para el evento.
Parámetro Si quieres pasar un argumento de cadena a tu evento personalizado, por ejemplo, de la unidad de anuncios.

Importa bibliotecas de eventos personalizados

Es posible que los eventos personalizados requieran que se incluyan bibliotecas adicionales para funcionar. correctamente. Por ejemplo, es posible que debas incluir las siguientes bibliotecas:

  • SDK de terceros de Android
  • Evento personalizado de terceros de Android
  • SDK de anuncios de terceros para iOS
  • Evento personalizado de terceros de iOS

Tipos de bibliotecas

Hay varias formas de importar código de Android o iOS a un proyecto de Unity, como:

  • Cómo importar artefactos precompilados de Android o iOS con la dependencia externa Manager para Unity
  • Cómo importar complementos AAR y bibliotecas de Android
  • Cómo importar archivos fuente Java y Kotlin
  • Importar archivos fuente y bibliotecas estáticas de iOS

Según cómo estén empaquetadas las bibliotecas que uses, quizás necesites un la estrategia de importación para cada biblioteca. Cada opción se analiza con más detalle más adelante.

Importa artefactos precompilados de Android o iOS (recomendado)

Importa artefactos precompilados de Maven o CocoaPods con el recurso External Dependency Manager para Unity. Este complemento se incluye en el complemento GoogleMobileAds.

Para importar artefactos existentes, crea un archivo de configuración para definir tu . El nombre de archivo y la ruta de acceso deben cumplir con los siguientes requisitos:

  • El archivo debe existir en la carpeta /Editor/.
  • El nombre del archivo debe terminar con Dependencies.xml.

Por ejemplo, para importar adaptadores de eventos personalizados para una red de publicidad hipotética con el nombre AdPub, crea el archivo:

Assets/AdPub/Editor/AdPubDependencies.xml

A continuación, define tus dependencias dentro del archivo AdPubDependencies.xml. Reglas para configurar las importaciones en External Dependency Manager para Unity Iniciada. El El siguiente fragmento de código incluye el SDK de iOS y Android, y el evento personalizado bibliotecas para un “AdPub” hipotético red de publicidad.

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>

Si tu artefacto de evento personalizado ya tiene una dependencia en el anuncio obligatorio de red, no necesitas definir la dependencia del SDK de forma explícita: Ejemplo

External Dependency Manager supervisa automáticamente los cambios en la configuración y resuelve dependencias. También puedes ejecutar la resolución manual con el siguiente comando de menú:

Assets > External Dependency Manager > Android Resolver > Force Resolve

Importa complementos AAR y bibliotecas de Android.

Unity admite la importación de archivos *.aar y proyectos de bibliotecas de Android. Si su evento personalizado de Android se empaqueta de esta manera; consulte Complementos de AAR y Android Bibliotecas para obtener instrucciones sobre incluir esos archivos en tu proyecto de Unity.

Cómo importar archivos fuente Java y Kotlin

A partir de Unity 2018.2 o versiones posteriores, si el código de evento personalizado de Android consta de archivos *.java o *.kt sin compilar, puedes usar archivos fuente Java o Kotlin como complementos.

Importa archivos fuente y bibliotecas estáticas de iOS

Unity admite artefactos *.framework, *.h y archivos de origen *.m. Importando Los artefactos y archivos fuente de iOS se explican en la guía de Unity para formatos nativos complementos.

Cómo probar eventos personalizados con el inspector de anuncios

El Inspector de anuncios se puede usar para hacer pruebas que los eventos personalizados se hayan importado correctamente a tu aplicación. Anuncio el inspector se puede abrir con solo gestos o de manera programática con muy poco código.

Llama a los métodos nativos del SDK de terceros desde secuencias de comandos de C# (opcional)

Los SDK de redes de publicidad de terceros podrían tener requisitos especiales llamando directamente a los métodos de Android o iOS. El proceso para llamar a estos métodos son las siguientes:

  1. Cómo definir una interfaz común para los clientes de la plataforma
  2. Cómo implementar un cliente predeterminado para las plataformas no compatibles
  3. Cómo implementar un cliente de Android para llamar a los métodos de Android
  4. Implementa un cliente de iOS para llamar a los métodos de iOS
  5. Implementar un cliente fábrica para que, de forma condicional, cambiar entre los clientes iOS y Android
  6. Define una API para acceder a todas las funciones del SDK de redes de publicidad de terceros

En la siguiente sección, se muestra cómo se implementan estos pasos para una situación hipotética red de publicidad llamada "AdPub" en una API de C# que pueda llamar a los métodos en Android y iOS:

Android

package com.adpub.android;

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

iOS

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

Cómo definir una interfaz común para los clientes de la plataforma

Crea una interfaz IAdPubClient con un método que represente el elemento la API de iOS y Android.

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

Define un cliente predeterminado para las plataformas no compatibles

Crea una clase DefaultClient que implemente la interfaz IAdPubClient que solo registra el nombre del método. Usa esta implementación para el editor de Unity y todas plataformas distintas a Android o iOS.

Assets/AdPub/Common/DefaultClient.cs

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

Implementa un cliente de plataforma iOS

Crea una clase iOSAdPubClient que implemente la interfaz IAdPubClient en iOS Esta implementación usa InteropServices para llamar El método setHasUserConsent() en la clase AdPubSdk de 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

A continuación, implementa el método GADUAdPubSetHasUserConsent() que se definió. arriba. Crea AdPubClientBridge.m con un método C GADUAdPubSetHasUserConsent() para controlar la llamada de método desde Unity y, luego, invocar el AdPubSDK.

AdPubClientBridge es un archivo fuente de iOS y se debe colocar en el Plugins/iOS, como se explica en la guía de Unity para anuncios nativos complementos.

Assets/AdPub/Plugins/iOS/AdPubClientBridge.m

#import <AdPubSDK/AdPubSDK.h>

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

Cómo implementar un cliente de la plataforma de Android

Crea una clase AndroidAdPubCient que implemente la interfaz IAdPubClient en Android Esta implementación usa el ayudante de Java para Android clases para llamar al método estático de Android setHasUserConsent().

Como las clases auxiliares de Java para Android solo están disponibles durante la durante el tiempo de ejecución, puedes evitar errores de compilación con el compilador UNITY_ANDROID. directiva para unir la clase, como se muestra en el fragmento de código. Como alternativa, puedes usar Assembly definiciones en Unity 2017.4 y versiones posteriores para resolver este problema.

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

Crea un método de fábrica para devolver la implementación correcta del cliente

Ahora que tienes implementaciones del cliente para cada plataforma, crea una AdPubClientFactory para mostrar la implementación correcta de la clase IAdPubClient según la plataforma del entorno de ejecución. Esta clase utiliza compilador directivas devuelve el IAdPubClientcliente correcto.

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

Definir una API pública para cada método de interfaz

Crea una clase AdPubApi que tenga llamadas de método para cada método de cliente en tu IAdPubClient. Esta clase usa AdPubClientFactory para obtener un de IAdPubClient y llama a ese cliente para obtener el SDK subyacente funcionalidades.

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

Llama a la API que acabas de definir

Puedes llamar a la API definida anteriormente de la siguiente manera:

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

Ejemplos adicionales de adaptadores de red de publicidad de terceros

Visita GitHub del complemento Google Mobile Ads para Unity repositorio para ver otros ejemplos de adaptadores de mediación de terceros que implementan APIs de C# para unir llamadas a métodos de iOS y Android.