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:
- Anúncios personalizados de pesquisa do Google AdSense com estilos de pesquisa personalizados
- Desenvolvimento de apps Android
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:
- 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 deSearchAdController
, 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
. OContext
fornecido no construtor precisa ser oActivity
, que contémSearchAdController
e onde vai colocar o anúncioView
. - 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 paraloadAds
são excluídos do cache interno de anúncios quando uma nova chamada é feita. - Crie uma
View
comcreateAdView
para mostrar criativos de anúncios. - Depois que os anúncios forem carregados, chame
populateAdView
com umView
gerado anteriormente. comcreateAdView
para renderizar um anúncio armazenado em cache nessaView
. Além da seçãoView
que será preenchido, forneça umadKey
, 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 esseadKey
. Assim, quando o mesmoadKey
for transmitido para uma chamada futura, parapopulateAdView
, o mesmo anúncio será retornado. Por exemplo, sepopulateAdView
é chamado pela primeira vez comadKey="keyA"
e renderiza uma para botas para caminhada, cada chamada subsequente parapopulateAdView
comadKey="keyA"
vai preencher o mesmo anúncio de botas para caminhada. (Fazer uma nova chamada paraloadAds
limpa todos os anúncios em cache e as chaves de anúncios associadas.
- Transmita esse objeto ao construtor
SearchAdController
para personalizar como os anúncios são solicitados e exibidos. Chamebuild()
em umSearchAdOptions.Builder
para criar um objetoSearchAdOptions
.
View
- Crie um objeto
View
para reter anúncios chamandocreateAdView()
noSearchAdController
Exibe no máximo um anúncio por vez, mas o mesmoView
pode ser recicladas para exibir anúncios diferentes ao longo do tempo.
- Chame o método
loadAds
noSearchAdController
com umSearchAdRequest
para iniciar uma solicitação de anúncio assíncrona. Chamarbuild()
em umSearchAdRequest.Builder
para criar um objetoSearchAdRequest
.
- 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 paraloadAds
que foi interrompida por outra chamada paraloadAds
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.