Criar eventos personalizados

Os eventos personalizados permitem que os editores usem AdMob Mediação para adicionar a mediação em hierarquia a uma rede de publicidade de terceiros que não é uma das redes de publicidade compatíveis. Este guia explica como usar um evento personalizado criado para Android e iOS em um projeto do Unity.

Pré-requisitos

  • Conclua Começar. Sua unidade app já deve ter o plug-in dos anúncios para dispositivos móveis do Google para Unity importado.

  • Adaptadores de eventos personalizados já criados para Android e iOS. Para criar imagens de eventos, consulte nossos guias de eventos personalizados em Android e iOS.

Definir um evento personalizado

Para que um evento personalizado participe da mediação, ele precisa ser definido na AdMob interface da Web. Adicione um evento personalizado a grupos de mediação para Android e iOS.

Esta captura de tela mostra alguns exemplos de configurações de eventos personalizados:

Como preencher os parâmetros
Nome da turma (iOS)

No iOS, insira o nome da classe que implementa o evento personalizado.

Se sua classe for implementada em Swift, você precisará prefixar o nome da classe com o nome do app / módulo de framework (por exemplo, appName.className).

O nome do destino é obrigatório se você tiver vários destinos no projeto ou se o nome do projeto é diferente do nome do destino. Com o nome do destino, ficaria assim: appName_targetName.className. Além disso, lembre-se de substituir quaisquer caracteres não alfanuméricos, como traços por sublinhados.

Nome da turma (Android) Para Android, verifique se o valor fornecido para Class Name é o nome de classe totalmente qualificado do Android (por exemplo, com.google.ads.mediation.sample.customevent.SampleCustomEvent).
Rótulo Insira um nome exclusivo para o evento.
Parâmetro Se você deseja passar um argumento de string para seu evento personalizado, por exemplo, um ID do bloco de anúncios.

Importar bibliotecas de eventos personalizados

Eventos personalizados podem exigir a inclusão de mais bibliotecas para funcionar corretamente. Por exemplo, talvez você precise incluir as seguintes bibliotecas:

  • SDK de terceiros do Android
  • Evento personalizado de terceiros do Android
  • SDK de anúncios de terceiros para iOS
  • Evento personalizado de terceiros no iOS

Tipos de biblioteca

Há várias maneiras de importar código Android ou iOS para um projeto do Unity. incluindo:

  • Como importar artefatos pré-criados do Android ou iOS usando a dependência externa Gerente do Unity
  • Importação de plug-ins AAR e bibliotecas do Android
  • Como importar arquivos de origem Java e Kotlin
  • Importação de arquivos de origem e bibliotecas estáticas do iOS

Dependendo de como as bibliotecas que você usa são empacotadas, pode ser necessário um estratégia de importação para cada biblioteca. Cada opção será discutida em mais detalhes posteriormente.

(Recomendado) Importar artefatos pré-criados do Android ou iOS

Importe artefatos pré-criados do Maven ou CocoaPods usando a API External Dependency Manager para Unity (link em inglês). Esse plug-in está incluído no plug-in GoogleMobileAds.

Para importar artefatos atuais, crie um arquivo de configuração para definir o as importações. O nome do arquivo e o caminho têm os seguintes requisitos:

  • O arquivo precisa existir na pasta /Editor/.
  • O nome do arquivo precisa terminar com Dependencies.xml.

Por exemplo, para importar adaptadores de eventos personalizados para uma rede de publicidade hipotética chamado AdPub, crie o arquivo:

Assets/AdPub/Editor/AdPubDependencies.xml

Em seguida, defina as dependências dentro do arquivo AdPubDependencies.xml. Regras para configurar as importações podem ser encontradas em External Dependency Manager para Unity Acessar iniciado. A O snippet de código a seguir inclui o SDK para Android e iOS e o evento personalizado bibliotecas para um "AdPub" hipotético rede de publicidade do Google.

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>

Se o artefato de evento personalizado já tiver uma dependência no anúncio necessário SDK da rede, não é preciso definir a dependência do SDK explicitamente: Exemplo

O External Dependency Manager monitora automaticamente as alterações de configuração e resolve as dependências. Também é possível executar uma resolução manual com o seguinte comando de menu:

Assets > External Dependency Manager > Android Resolver > Force Resolve

Importar plug-ins AAR e bibliotecas do Android

O Unity oferece suporte à importação de arquivos *.aar e a projetos de biblioteca do Android. Se seu evento personalizado do Android for empacotado dessa forma, consulte Plug-ins de AAR e Android Bibliotecas para instruções sobre como incluir esses arquivos no seu projeto do Unity.

Importar arquivos de origem Java e Kotlin

A partir do Unity 2018.2 ou mais recente, se o código do evento personalizado do Android incluir de arquivos *.java ou *.kt descompilados, você pode usar arquivos de origem Java ou Kotlin como plug-ins.

Importar arquivos de origem e bibliotecas estáticas do iOS

O Unity oferece suporte a artefatos *.framework, *.h e arquivos de origem *.m. Importando Os artefatos e arquivos de origem do iOS são explicados no guia do Unity para plug-ins.

Testar eventos personalizados com o Ad Inspector

O Ad Inspector pode ser usado para testar se os eventos personalizados foram importados corretamente para seu aplicativo. Anúncio Ele pode ser aberto com apenas gestos ou de maneira programática com o mínimo de código.

(Opcional) Chamar métodos nativos de SDK de terceiros de scripts C#

Os SDKs das redes de publicidade de terceiros podem ter requisitos especiais que exigem fazer chamadas diretas de métodos do Android ou iOS. O processo para chamar esses métodos diretamente são os seguintes:

  1. Definir uma interface comum para clientes da plataforma
  2. Implementar um cliente padrão para plataformas sem suporte
  3. Implementar um cliente Android para chamar métodos do Android
  4. Implementar um cliente iOS para chamar métodos do iOS
  5. Implemente um cliente fábrica para condicionalmente alternar entre clientes iOS e Android
  6. Definir uma API para acessar todas as funcionalidades do SDK da rede de publicidade de terceiros

A seção a seguir mostra como essas etapas são implementadas para um cenário hipotético rede de publicidade chamada "AdPub" em uma API C# que possa chamar os métodos no Android e iOS:

Android

package com.adpub.android;

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

iOS

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

Definir uma interface comum para clientes da plataforma

Crie uma interface IAdPubClient com um método que represente o API Android e 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);
    }
}

Definir um cliente padrão para plataformas sem suporte

Crie uma classe DefaultClient implementando a interface IAdPubClient que apenas registra o nome do método. Use esta implementação para o editor do Unity e todos os plataformas que não sejam Android ou iOS.

Assets/AdPub/Common/DefaultClient.cs

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

Implementar um cliente da plataforma iOS

Crie uma classe iOSAdPubClient implementando a interface IAdPubClient em no iOS. Esta implementação usa InteropServices para chamar o método setHasUserConsent() na classe AdPubSdk do 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

Em seguida, implemente o método GADUAdPubSetHasUserConsent() definido acima. Criar AdPubClientBridge.m com um método C GADUAdPubSetHasUserConsent() para processar a chamada de método do Unity e invocar o AdPubSDK.

AdPubClientBridge é um arquivo de origem do iOS e precisa ser colocado dentro do Plugins/iOS, conforme explicado no guia do Unity para imagens plug-ins.

Assets/AdPub/Plugins/iOS/AdPubClientBridge.m

#import <AdPubSDK/AdPubSDK.h>

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

Implementar um cliente da plataforma Android

Crie uma classe AndroidAdPubCient implementando a interface IAdPubClient em Android Esta implementação usa o assistente Java para Android aulas para chamar o método estático setHasUserConsent() do Android.

Como as classes auxiliares Java do Android só estão disponíveis durante a no ambiente de execução, você pode evitar erros de compilação usando o compilador UNITY_ANDROID diretiva para encapsular a classe, conforme mostrado no snippet de código. Como alternativa, você pode usar o Assembly definições no Unity 2017.4 e versões mais recentes.

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

Criar um método de fábrica para retornar a implementação correta do cliente

Agora que você tem implementações do cliente para cada plataforma, crie uma AdPubClientFactory para retornar a implementação correta da IAdPubClient, dependendo da plataforma de ambiente de execução. Esta classe usa compilador diretivas para retornar o cliente IAdPubClient correto.

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 uma API pública para cada método de interface

Crie uma classe AdPubApi que tenha chamadas de método para cada método cliente na sua IAdPubClient. Essa classe usa AdPubClientFactory para receber uma instância do IAdPubClient e chama esse cliente para o SDK subjacente 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);
        }
    }
}

Chame a API recém-definida

Veja como chamar a API definida acima:

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

Outros exemplos de adaptadores de redes de publicidade de terceiros

Acesse o GitHub do plug-in dos anúncios para dispositivos móveis do Google para Unity repositório para ver mais exemplos de adaptadores de mediação de terceiros que implementam APIs C# para unir chamadas a métodos do iOS e do Android.