Migrer vers le client GoogleApi

La version 11.2.0 du SDK des services Google Play inclut un nouveau moyen d'accéder au SDK Places pour Android. Le client GoogleApi est plus facile à utiliser que son prédécesseur (GoogleApiClient), car il gère automatiquement les connexions aux services Google Play. Cela réduit la quantité de code récurrent dans votre application et peut aider à éliminer de nombreux pièges courants. La nouvelle API offre un certain nombre d'améliorations:

  • Le processus de connexion est géré automatiquement. La nouvelle API nécessite donc moins de travail à implémenter.
  • Les appels d'API attendent désormais automatiquement que la connexion au service soit établie, ce qui évite d'avoir à attendre onConnected avant d'envoyer des requêtes.
  • L'API Tasks facilite la composition d'opérations asynchrones.
  • Le code est autonome et peut facilement être déplacé vers une classe utilitaire partagée ou une classe similaire.

Pour mettre à jour votre application afin qu'elle utilise le client GoogleApi, vous devez modifier votre implémentation du SDK Places pour Android. Ce guide décrit les modifications apportées au SDK Places pour Android et recommande les étapes à suivre pour mettre à jour votre application afin qu'elle utilise le nouveau client.

Présentation

Voici les principaux axes de modification:

  • Deux nouveaux points d'entrée sont disponibles: GeoDataClient et PlaceDetectionClient. Au lieu de créer une instance GoogleApiClient pour couvrir toutes les API, votre application doit maintenant instancier à la fois GeoDataClient et PlaceDetectionClient.
  • Étant donné que les rappels de connexion ne sont plus nécessaires, vous pouvez refactoriser votre application en toute sécurité pour les supprimer.
  • Les nouvelles méthodes de l'API Places sont désormais asynchrones et renvoient un Task au lieu d'un PendingResult.

Charger l'API Places

Pour charger l'API Places, déclarez les points d'entrée, puis instanciez les clients dans la méthode onCreate() de votre fragment ou de votre activité, comme illustré dans l'exemple suivant:

// The entry points to the Places API.
private GeoDataClient mGeoDataClient;
private PlaceDetectionClient mPlaceDetectionClient;

...
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Construct a GeoDataClient.
    mGeoDataClient = Places.getGeoDataClient(this, null);

    // Construct a PlaceDetectionClient.
    mPlaceDetectionClient = Places.getPlaceDetectionClient(this, null);

Comparatif

Les nouvelles méthodes de l'API Places sont désormais asynchrones et renvoient un Task au lieu d'un PendingResult. Les structures de données n'ont pas changé. Votre code existant pour la gestion des résultats ne devrait donc pas avoir besoin d'être mis à jour. Les exemples de code suivants comparent la nouvelle et l'ancienne version de GetCurrentPlace():

Nouvelle méthode

Task<PlaceLikelihoodBufferResponse> placeResult = mPlaceDetectionClient.getCurrentPlace(null);
placeResult.addOnCompleteListener(new OnCompleteListener<PlaceLikelihoodBufferResponse>() {
    @Override
    public void onComplete(@NonNull Task<PlaceLikelihoodBufferResponse> task) {
        PlaceLikelihoodBufferResponse likelyPlaces = task.getResult();
        for (PlaceLikelihood placeLikelihood : likelyPlaces) {
            Log.i(TAG, String.format("Place '%s' has likelihood: %g",
                placeLikelihood.getPlace().getName(),
                placeLikelihood.getLikelihood()));
        }
        likelyPlaces.release();
    }
});

Ancienne méthode

PendingResult<PlaceLikelihoodBuffer> result = Places.PlaceDetectionApi
    .getCurrentPlace(mGoogleApiClient, null);
result.setResultCallback(new ResultCallback<PlaceLikelihoodBuffer>() {
  @Override
  public void onResult(PlaceLikelihoodBuffer likelyPlaces) {
    for (PlaceLikelihood placeLikelihood : likelyPlaces) {
      Log.i(TAG, String.format("Place '%s' has likelihood: %g",
          placeLikelihood.getPlace().getName(),
          placeLikelihood.getLikelihood()));
    }
    likelyPlaces.release();
  }
});

En savoir plus

En savoir plus sur l'accès aux API Google