L'SDK Google Mobile Ads supporta anche gli stili di ricerca personalizzati. Se la tua app utilizza già l'SDK Google Mobile Ads, ti consigliamo di utilizzare Versione dell'SDK AFSMA .
Se esegui l'aggiornamento alla versione 19.0.0 o successiva dalla 18.1.0 o versione precedente, vedi la nostra guida alla migrazione.
Prerequisiti
Questa guida all'implementazione presuppone che tu abbia familiarità con quanto segue:
- Annunci associati alla ricerca personalizzata di AdSense con stili personalizzati degli annunci associati ai risultati di ricerca
- Sviluppo di app per Android
Importa l'SDK nativo AFS
Aggiungi l'SDK
Per aggiungere l'SDK nativo AFS alla tua app:
Apri il file build.gradle
nella directory del modulo dell'applicazione.
Aggiungi una nuova regola di build in dependencies
per la versione più recente dell'SDK:
dependencies {
implementation 'com.google.android.gms:play-services-afs-native:19.1.0'
}
Assicurati che l'elemento build.gradle
di primo livello contenga un riferimento a google()
repository maven { url "https://maven.google.com" }
.
Segui queste istruzioni
per includere il plug-in di abbinamento della versione autonoma di Google Play nel tuo progetto.
L'applicazione di questo plug-in causa un errore di generazione Gradle quando l'SDK nativo AFS è
viene utilizzato con una versione non compatibile di Google Play Services anziché consentire
l'app per creare, ma che potrebbero causare arresti anomali di runtime. In alternativa, applica il metodo
failOnVersionConflict()
ResolutionStrategy
al tuo progetto per causare un errore di build quando versioni non compatibili di Google Play
I servizi vengono utilizzati nel progetto.
Salva le modifiche e fai clic su Sync Project with Gradle Files (Sincronizza il progetto con i file Gradle)
la barra degli strumenti.
Utilizzare AndroidX invece di Android Support Libraries
A partire dalla versione 17.0.0
dell'SDK, la tua app deve utilizzare Jetpack (AndroidX)
Librerie anziché le librerie di assistenza Android. Requisiti di compatibilità:
- Imposta
com.android.tools.build:gradle
su 3.2.1 o versioni successive. - Imposta
compileSdkVersion
su 28 o su una data successiva. - Aggiorna l'app per utilizzare Jetpack (AndroidX); segui le istruzioni in Migrazione ad AndroidX.
Corsi
Per pubblicare annunci nativi AFS nella tua app, implementa le seguenti classi:
- Questa classe è responsabile della richiesta asincrona di annunci, della memorizzazione nella cache recupero degli annunci e rendering degli annunci.
- Ogni contesto dell'annuncio richiede un valore
SearchAdController
separato. ad esempio, una schermata che mostra gli annunci accanto a un elenco di risultati di ricerca e a un'altra che mostra annunci insieme ai dettagli di un prodotto specifico, devi e creare due istanze separate diSearchAdController
, una per ogni richiesta. - Al costruttore deve essere fornito il codice proprietà web (ID publisher),
ID stile da applicare a
annunci restituiti e
SearchAdOptions
. Il valoreContext
fornito nel costruttore deve essereActivity
che contieneSearchAdController
e in cui inserirà l'annuncioView
. - Chiama
loadAds
per indicare una ricerca di un nuovo utente e avviare un annuncio asincrono richiesta. Tutti gli annunci caricati dalle chiamate precedenti aloadAds
vengono cancellati da cache annunci interna quando viene effettuata una nuova chiamata. - Crea una
View
concreateAdView
per visualizzare le creatività degli annunci. - Dopo il caricamento degli annunci, chiama
populateAdView
con unView
generato in precedenza concreateAdView
per eseguire il rendering di un annuncio memorizzato nella cache in quelView
. Oltre alla sezioneView
che deve essere compilato, fornisci unadKey
, una stringa arbitraria a a identificare in modo univoco l'annuncio. Ciò associa la creatività specifica dell'annuncio restituita da cache con queladKey
, in modo che quando lo stessoadKey
viene passato a una chiamata futura apopulateAdView
, verrà restituito lo stesso annuncio. Ad esempio, sepopulateAdView
viene chiamato per la prima volta conadKey="keyA"
e restituisce una annuncio per le scarpe da trekking, ogni chiamata successiva apopulateAdView
conadKey="keyA"
completerà lo stesso annuncio per le scarpe da trekking. (Quando effettui una nuova chiamata aloadAds
cancella tutti gli annunci memorizzati nella cache e le chiavi annuncio associate.
- Passa questo oggetto al costruttore
SearchAdController
per personalizzare il modo in cui gli annunci vengono richiesti e visualizzati. Chiamabuild()
con unSearchAdOptions.Builder
per un oggettoSearchAdOptions
.
View
- Crea un oggetto
View
per contenere gli annunci chiamandocreateAdView()
sulSearchAdController
. Visualizza al massimo un annuncio alla volta, ma lo stessoView
può possono essere riciclati per visualizzare annunci diversi nel tempo.
- Chiama il metodo
loadAds
suSearchAdController
conSearchAdRequest
per avviare una richiesta di annuncio asincrona. Chiamabuild()
su unSearchAdRequest.Builder
per creare un oggettoSearchAdRequest
.
- Implementa questa interfaccia e passala al costruttore
SearchAdController
per registrare i callback per diversi stati. - Nota:
AdListener
di callback non verranno chiamati in seguito a una richiesta annullata (una chiamata aloadAds
prerilasciata da un'altra chiamata aloadAds
prima della prima chiamata risolta).
Esempio di implementazione
L'esempio seguente mostra la creazione di un SearchAdController
in un esempio
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 l'utente avvia una query, crea un SearchAdRequest
e chiama loadAds
su SearchAdController
per avviare una richiesta di annuncio asincrona.
// Create the request.
SearchAdRequest.Builder requestBuilder = new SearchAdRequest.Builder();
requestBuilder.setQuery("user query here");
// Load the ads.
adController.loadAds(requestBuilder.build());
Implementa il callback onAdLoaded
per completare un annuncio caricato in una visualizzazione dell'annuncio.
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");
}
Un annuncio correlato alla query verrà ora visualizzato nella sezione adView
.
Analisi degli errori
SearchAdController
richiede un oggetto AdListener
con onAdLoaded()
per notificare alla tua app che gli annunci sono pronti per la pubblicazione. Dovresti inoltre
implementare il metodo onAdFailedToLoad()
in modo da poter rilevare e correggere gli errori.
Ad esempio, puoi utilizzare il seguente AdListener
per eseguire il debug
implementazione:
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);
}
};
Costanti utilizzate nel metodo di callback onAdFailedToLoad()
sono definite in AdListener.