Implementação nativa do AFS para Android

O SDK dos anúncios para dispositivos móveis do Google também é compatível com estilos de pesquisa personalizados. Se o seu app já usa o SDK dos anúncios para dispositivos móveis do Google, recomendamos que você use o Versão do SDK do AFSMA como alternativa.

Se estiver fazendo upgrade da versão 18.1.0 ou anterior para a versão 19.0.0 ou anterior, consulte nosso guia de migração.

Pré-requisitos

Para seguir este guia de implementação, é necessário ter familiaridade com:

Importar o SDK nativo do AFS

Adicionar o SDK

Para adicionar o SDK nativo do AFS ao seu app, faça o seguinte:

Abra o arquivo build.gradle dentro do diretório do módulo do aplicativo. Adicione uma nova regra de build em dependencies para a versão mais recente do SDK:

dependencies {
  implementation 'com.google.android.gms:play-services-afs-native:19.1.0'
}

Verifique se o build.gradle de nível superior contém uma referência ao google() ou para maven { url "https://maven.google.com" }.

Siga estas instruções. para incluir o plug-in de correspondência da versão independente do Google Play no projeto. A aplicação deste plug-in causa um erro de build do Gradle quando o SDK nativo do AFS é usado com uma versão incompatível do Google Play Services em vez de permitir que o app crie, mas pode causar falhas no tempo de execução. Ou aplique o failOnVersionConflict() ResolutionStrategy ao seu projeto para causar um erro de build quando versões incompatíveis do Google Play Os serviços são usados no seu projeto. Salve as mudanças e clique em Sync Project with Gradle Files. na barra de ferramentas.

Usar o AndroidX em vez das Bibliotecas de Suporte do Android

A partir da versão 17.0.0 do SDK, o app precisa usar o Jetpack (AndroidX). Bibliotecas em vez de Bibliotecas de Suporte do Android. Requisitos de compatibilidade:

  • Defina com.android.tools.build:gradle como v3.2.1 ou mais recente.
  • Defina compileSdkVersion como 28 ou mais recente.
  • Atualizar o app para usar o Jetpack (AndroidX). siga as instruções Como migrar para o AndroidX.

Classes

Para veicular anúncios nativos do AFS no seu aplicativo, implemente as seguintes classes:

SearchAdController

  • Esta classe é responsável por solicitar anúncios, armazenamento em cache e recuperação e renderização de anúncios.
  • Cada contexto de anúncio precisa de um SearchAdController separado. por exemplo, se você têm uma tela que exibe anúncios junto com uma lista de resultados de pesquisa e outra que mostra anúncios e detalhes de um produto específico, criar duas instâncias separadas de SearchAdController, uma para cada caso.
  • O construtor precisa receber seu código de propriedade da Web (ID do editor), ID de estilo para aplicar à anúncios retornados e SearchAdOptions. O Context fornecido no construtor precisa ser o Activity, que contém SearchAdController e onde vai colocar o anúncio View.
  • Chame loadAds para indicar uma nova pesquisa de usuário e iniciar um anúncio assíncrono. solicitação. Todos os anúncios carregados de chamadas anteriores para loadAds são excluídos do cache interno de anúncios quando uma nova chamada é feita.
  • Crie uma View com createAdView para mostrar criativos de anúncios.
  • Depois que os anúncios forem carregados, chame populateAdView com um View gerado anteriormente. com createAdView para renderizar um anúncio armazenado em cache nessa View. Além da seção View que será preenchido, forneça um adKey, uma string arbitrária para identifiquem o anúncio de maneira exclusiva. Isso associa o criativo de anúncio específico retornado o cache com esse adKey. Assim, quando o mesmo adKey for transmitido para uma chamada futura, para populateAdView, o mesmo anúncio será retornado. Por exemplo, se populateAdView é chamado pela primeira vez com adKey="keyA" e renderiza uma para botas para caminhada, cada chamada subsequente para populateAdView com adKey="keyA" vai preencher o mesmo anúncio de botas para caminhada. (Fazer uma nova chamada para loadAds limpa todos os anúncios em cache e as chaves de anúncios associadas.

SearchAdOptions

  • Transmita esse objeto ao construtor SearchAdController para personalizar como os anúncios são solicitados e exibidos. Chame build() em um SearchAdOptions.Builder para criar um objeto SearchAdOptions.

View

  • Crie um objeto View para reter anúncios chamando createAdView() no SearchAdController Exibe no máximo um anúncio por vez, mas o mesmo View pode ser recicladas para exibir anúncios diferentes ao longo do tempo.

SearchAdRequest

  • Chame o método loadAds no SearchAdController com um SearchAdRequest para iniciar uma solicitação de anúncio assíncrona. Chamar build() em um SearchAdRequest.Builder para criar um objeto SearchAdRequest.

AdListener

  • Implemente essa interface e a transmita para o construtor SearchAdController. para registrar callbacks para vários estados.
  • Observação: callbacks AdListener não serão chamados em uma solicitação cancelada (uma chamada para loadAds que foi interrompida por outra chamada para loadAds antes da primeira chamada resolvida).

Implementação de exemplo

O exemplo abaixo demonstra a criação de um SearchAdController em uma amostra Activity.

//  MainActivity.java implementation
//  (MainActivity is a subclass of Activity)

SearchAdController adController;
// adContainer where we will place our ads in this example.
ViewGroup adContainer;

protected void onCreate(Bundle bundle){
  super.onCreate(bundle);
  adContainer = (ViewGroup) findViewById(...);
  // Specify ad options (not required).
  SearchAdOptions.Builder adOptionsBuilder = new SearchAdOptions.Builder();
  adOptionsBuilder.setAdType(SearchAdOptions.AD_TYPE_TEXT);
  adOptionsBuilder.setPrefetch(true);
  adOptionsBuilder.setNumAdsRequested(3);
  // Provide a callback to trigger when ads are loaded.
  AdListener adListener = new AdListener() {
    public void onAdLoaded() {
      createAndShowAd();
    }
  };
  // Instantiate the SearchAdController.
  adController = new SearchAdController(this, "your-client-id", "your-style-id",
                                        adOptionsBuilder.build(), adListener);
}

Quando o usuário iniciar uma consulta, crie um SearchAdRequest e chame loadAds. no SearchAdController para iniciar uma solicitação de anúncio assíncrona.

// Create the request.
SearchAdRequest.Builder requestBuilder = new SearchAdRequest.Builder();
requestBuilder.setQuery("user query here");
// Load the ads.
adController.loadAds(requestBuilder.build());

Implemente o callback onAdLoaded para preencher um anúncio carregado em uma visualização de anúncio.

private void createAndShowAd() {
  // Create a new view that will contain the ad.
  View adView = adController.createAdView();
  // Attach the new view to the view hierarchy.
  adContainer.addView(adView);
  // Display the ad inside the adView. We need to provide an adKey to
  // indicate which ad is to be displayed in the adView. In this example, 
  // since we only have one ad, we can provide any constant string. However, 
  // if you intend to display multiple ads, each ad you wish to display
  // should be given a unique adKey of your choosing.
  adController.populateAdView(adView, "demoAd");
}

Um anúncio relacionado à consulta específica vai aparecer no adView.

Como investigar erros

O SearchAdController exige um objeto AdListener com o onAdLoaded(). para notificar seu app de que os anúncios estão prontos para exibição. Você também deve implemente o método onAdFailedToLoad() para detectar e corrigir erros. Por exemplo, use o AdListener a seguir para depurar seu implementação:

AdListener adListener = new AdListener() {
    public void onAdLoaded() {
        // Called when an ad is loaded.
        Toast.makeText(MainActivity.this, "Ad Loaded",
                Toast.LENGTH_SHORT).show();
        Log.d(MainActivity.class.getSimpleName(), "Ad Loaded");
    }

    public void onAdLeftApplication() {
        // Called when an ad leaves the application
        // (to go to the browser for example).
        Toast.makeText(MainActivity.this, "Ad Left Application",
                Toast.LENGTH_SHORT).show();
        Log.d(MainActivity.class.getSimpleName(), "Ad Left Application");
    }

    @Override
    public void onAdFailedToLoad(int errorCode) {
        // Called when an ad request failed.
        Toast.makeText(MainActivity.this, "Ad Failed to Load: " + errorCode,
                Toast.LENGTH_SHORT).show();
        Log.e(MainActivity.class.getSimpleName(), "Ad Failed to Load: " +
                errorCode);
    }
};

Constantes usadas no método de callback onAdFailedToLoad() são definidos no AdListener.