Cómo migrar al cliente de GoogleApi

La versión 11.2.0 del SDK de Servicios de Google Play incluye una nueva forma de acceder al SDK de Places para Android. El cliente GoogleApi es más fácil de usar que su predecesor (GoogleApiClient), ya que administra automáticamente las conexiones a los Servicios de Google Play. Esto reduce la cantidad de código estándar en tu app y puede ayudar a eliminar muchos de los errores comunes. La nueva API ofrece varias mejoras:

  • El proceso de conexión se administra automáticamente, por lo que la implementación de la API nueva requiere menos trabajo.
  • Las llamadas a la API ahora esperan automáticamente a que se establezca la conexión del servicio, lo que elimina la necesidad de esperar onConnected antes de realizar solicitudes.
  • La API de Tasks facilita la redacción de operaciones asíncronas.
  • El código es autónomo y se puede mover fácilmente a una clase de utilidad compartida o a una similar.

La actualización de tu app para que use el cliente GoogleApi requiere algunos cambios en tu implementación del SDK de Places para Android. En esta guía, se describen los cambios en el SDK de Places para Android y se recomiendan los pasos que debes seguir cuando actualices tu app para usar el cliente nuevo.

Descripción general

Las principales áreas de cambio son las siguientes:

  • Hay dos puntos de entrada nuevos: GeoDataClient y PlaceDetectionClient. En lugar de crear una instancia de GoogleApiClient para abarcar todas las APIs, tu app ahora debe crear una instancia de GeoDataClient y PlaceDetectionClient.
  • Dado que ya no se requieren devoluciones de llamada de conexión, puedes refactorizar de forma segura tu app para quitarlas.
  • Los nuevos métodos de la API de Places ahora son asíncronos y muestran un Task en lugar de un PendingResult.

Carga la API de Places

Para cargar la API de Places, declara los puntos de entrada y, luego, crea una instancia de los clientes en el método onCreate() de tu fragmento o actividad, como se muestra en el siguiente ejemplo:

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

Comparación

Los nuevos métodos de la API de Places ahora son asíncronos y muestran un Task en lugar de un PendingResult. Las estructuras de datos no cambiaron, por lo que no debería ser necesario actualizar tu código existente para manejar los resultados. En los siguientes ejemplos de código, se comparan las versiones nueva y anterior de GetCurrentPlace():

La nueva forma

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

El método tradicional

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

Más información

Obtén más información para acceder a las APIs de Google.