Implémentation native d'APR pour Android

Le SDK Google Mobile Ads accepte également les styles de recherche personnalisés. Si votre application utilise déjà le SDK Google Mobile Ads, nous vous recommandons d'utiliser plutôt la version du SDK AFSMA.

Si vous effectuez une mise à niveau vers la version 19.0.0 ou une version antérieure, veuillez consulter notre guide de migration.

Conditions préalables

Dans ce guide d'implémentation, nous partons du principe que vous connaissez bien les éléments suivants:

Importer le SDK natif AFS

Ajouter le SDK

Pour ajouter le SDK natif AFS à votre application, procédez comme suit:

Ouvrez le fichier build.gradle dans le répertoire du module de votre application. Ajoutez une règle de compilation sous dependencies pour la dernière version du SDK:

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

Assurez-vous que votre build.gradle de premier niveau contient une référence au dépôt google() ou à maven { url "https://maven.google.com" }.

Suivez ces instructions pour inclure le plug-in de mise en correspondance des versions autonome Google Play dans votre projet. L'application de ce plug-in entraîne une erreur de compilation Gradle lorsque le SDK natif AFS est utilisé avec une version incompatible des services Google Play au lieu d'autoriser la compilation de l'application, mais de provoquer des plantages de l'exécution. Vous pouvez également appliquer la ResolutionStrategy failOnVersionConflict() à votre projet pour provoquer une erreur de compilation lorsque des versions incompatibles des services Google Play sont utilisées dans votre projet. Enregistrez les modifications et cliquez sur Sync Project with Gradle Files (Synchroniser le projet avec les fichiers Gradle) dans la barre d'outils.

Utiliser AndroidX au lieu des bibliothèques Android Support

À partir de la version 17.0.0 du SDK, votre application doit utiliser les bibliothèques Jetpack (AndroidX) au lieu des bibliothèques Android Support. Configuration requise:

  • Définissez com.android.tools.build:gradle sur la version 3.2.1 ou ultérieure.
  • Définissez compileSdkVersion sur 28 ou une version ultérieure.
  • Mettez à jour votre application pour utiliser Jetpack (AndroidX). Suivez les instructions de la section Migrer vers AndroidX.

Classes

Pour diffuser des annonces natives APR dans votre application, implémentez les classes suivantes:

SearchAdController

  • Cette classe permet de demander des annonces de manière asynchrone, de les mettre en cache et de les récupérer, et de les afficher.
  • Chaque contexte d'annonce nécessite un SearchAdController distinct. Par exemple, si vous disposez d'un écran qui affiche des annonces à côté d'une liste de résultats de recherche, et d'un autre écran qui affiche des annonces avec des informations sur un produit spécifique, vous devez créer deux instances distinctes de SearchAdController, une pour chaque cas.
  • Le constructeur doit fournir votre code de propriété Web (référence éditeur), l'ID de style à appliquer aux annonces renvoyées et SearchAdOptions. Le Context fourni dans le constructeur doit être le Activity, qui contient le SearchAdController et où vous allez placer l'annonce View.
  • Appelez loadAds pour indiquer une nouvelle recherche d'utilisateur et lancer une demande d'annonce asynchrone. Toutes les annonces chargées à partir d'appels précédents à loadAds sont supprimées du cache publicitaire interne lorsqu'un nouvel appel est effectué.
  • Créez un View avec createAdView pour afficher des créations publicitaires.
  • Une fois les annonces chargées, appelez populateAdView avec un View généré précédemment avec createAdView pour afficher une annonce mise en cache dans ce View. En plus de l'élément View, qui doit être renseigné, fournissez une valeur adKey, une chaîne arbitraire pour identifier l'annonce de manière unique. Cette opération associe la création publicitaire spécifique renvoyée par le cache à cette adKey. Ainsi, lorsque le même adKey est transmis à un appel ultérieur à populateAdView, la même annonce est renvoyée. Par exemple, si populateAdView est appelé pour la première fois avec adKey="keyA" et affiche une annonce pour des chaussures de randonnée, chaque appel ultérieur de populateAdView avec adKey="keyA" générera la même annonce pour les chaussures de randonnée. (En appelant loadAds, vous effacez toutes les annonces mises en cache et les clés d'annonce associées.)

SearchAdOptions

  • Transmettez cet objet au constructeur SearchAdController pour personnaliser la façon dont les annonces sont demandées et affichées. Appelez build() sur un SearchAdOptions.Builder pour créer un objet SearchAdOptions.

View

  • Créez un objet View pour contenir les annonces en appelant createAdView() au niveau de SearchAdController. Affiche une seule annonce à la fois, mais le même View peut être recyclé pour afficher différentes annonces au fil du temps.

SearchAdRequest

  • Appelez la méthode loadAds sur SearchAdController avec un SearchAdRequest pour lancer une demande d'annonce asynchrone. Appelez build() sur un SearchAdRequest.Builder pour créer un objet SearchAdRequest.

AdListener

  • Implémentez cette interface et transmettez-la au constructeur SearchAdController afin d'enregistrer des rappels pour plusieurs états.
  • Remarque: Les rappels AdListener ne seront pas appelés sur une requête annulée (appel à loadAds qui a été préempté par un autre appel à loadAds avant la résolution du premier appel).

Exemple d'implémentation

L'exemple ci-dessous montre comment créer un SearchAdController dans un exemple de 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);
}

Lorsque l'utilisateur lance une requête, créez un SearchAdRequest et appelez loadAds au niveau de l'élément SearchAdController pour lancer une demande d'annonce asynchrone.

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

Implémentez votre rappel onAdLoaded pour insérer une annonce chargée dans un affichage d'annonce.

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

Une annonce liée à la requête donnée s'affichera désormais dans adView.

Examiner les erreurs

SearchAdController nécessite un objet AdListener avec la méthode onAdLoaded() pour avertir votre application que les annonces sont prêtes à être diffusées. Vous devez également implémenter la méthode onAdFailedToLoad() afin de pouvoir détecter et corriger les erreurs. Par exemple, vous pouvez utiliser le AdListener suivant pour déboguer votre implémentation:

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

Les constantes utilisées dans la méthode de rappel onAdFailedToLoad() sont définies dans l'objet AdListener.