Transacciones facturables

Si en tu contrato con Google se especifica la facturación por transacción, la app debe llamar a NavigationTransactionRecorder.pickup() y NavigationTransactionRecorder.dropoff() para marcar el inicio y el final de cada transacción, de modo que Google pueda hacer un seguimiento y registrar las transacciones facturables. Consulta los lineamientos de implementación en esta página para determinar cómo asignar transacciones facturables a viajes y entregas.

Obtén un objeto NavigationTransactionRecorder

Para usar los métodos pickup() y dropoff(), primero debes crear una instancia de NavigationTransactionRecorder llamando a NavigationApi.getTransactionRecorder, como se muestra en el siguiente ejemplo:

NavigationTransactionRecorder transactionRecorder = NavigationApi.getTransactionRecorder(application);

Inicia una transacción con pickup()

Cuando el conductor recoge a un pasajero o recoge un artículo para entregarlo, la aplicación debe llamar a NavigationTransactionRecorder.pickup(). Debes iniciar esta llamada cuando el conductor interactúe con tu app para registrar el punto de partida. No realices esta llamada como parte de la devolución de llamada onArrival().

En el siguiente código de muestra, se supone que el conductor presiona un botón en la IU de tu app cuando recoge a un pasajero o un elemento de entrega:

Button b = (Button) findViewById(R.id.btn_pickup);
b.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    transactionRecorder.pickup(
        null /* waypoint */,
        Arrays.asList("MY_TRANSACTION_ID"));
  }
});

Pasa los siguientes parámetros al método pickup():

  • Es el Waypoint en el que se produce el retiro, o bien null si el retiro no es parte de una sesión de navegación existente.
  • Uno o más IDs de transacción que se aplican a este retiro. Un ID de transacción es una cadena arbitraria que identifica de forma única una transacción facturable. Obtén más información sobre los IDs de transacción a continuación.

Finaliza una transacción con dropoff()

Cuando el conductor deja a un pasajero o entrega un artículo, tu aplicación debe llamar a NavigationTransactionRecorder.dropoff(). Debes iniciar esta llamada cuando el conductor interactúe con tu app para registrar el destino. No realices esta llamada como parte de la devolución de llamada onArrival().

En el siguiente código de muestra, se supone que el conductor presiona un botón en la IU de tu app cuando deja un pasajero o un elemento de entrega:

Waypoint waypoint = mNavigator.getCurrentRouteSegment().getDestinationWaypoint();

Button b = (Button) findViewById(R.id.btn_dropoff);
b.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    transactionRecorder.dropoff(
        waypoint,
        Arrays.asList("MY_TRANSACTION_ID"));
  }
});

Pasa los siguientes parámetros al método dropoff():

  • El Waypoint en el que se produce el destino, o bien null si el destino no es parte de una sesión de navegación existente
  • Uno o más IDs de transacción que se aplican a este destino. Un ID de transacción es una cadena arbitraria que identifica de forma única una transacción facturable. Obtén más información sobre los IDs de transacción a continuación.

Usa tu propio ID de transacción o genera uno

El ID de transacción proporciona una forma de vincular un viaje con una transacción de facturación de Google. Un ID de transacción es una string arbitraria con una longitud máxima de 64 caracteres. El ID debe ser único en todas las transacciones.

Te recomendamos que proporciones tu propio ID de transacción, uno que tus sistemas ya usen y almacenen.

Como alternativa, puedes generar un ID de transacción aleatorio y único llamando a NavigationTransactionRecorder.generateTransactionId(). Almacena el ID generado en caso de que tu organización lo necesite para conciliar las transacciones de viajes.

Lineamientos de implementación para el Grabador de transacciones de navegación

Usa los siguientes lineamientos para determinar cómo asignar transacciones facturables para viajes y entregas.

Lineamientos generales:

  • Debes informar las transacciones facturables cada vez que el SDK de Navigation para Android esté en uso, incluido el uso del proveedor de ubicación ajustada a la ruta, y también aunque la app no esté en primer plano durante un recorrido específico. Cuando quieras dejar de informar transacciones facturables, inhabilita la navegación llamando a stopGuidance() y desactiva la ubicación ajustada a la ruta con stopRequestingLocationUpdates().
  • Debes registrar los viajes y las entregas como transacciones independientes y separadas, incluso si un conductor realiza un viaje y una entrega al mismo tiempo.
  • Debes registrar los eventos de partida y destino de inmediato cuando ocurren.

Lineamientos para las transacciones de viajes:

  • Las sesiones de navegación que no involucren a un pasajero (por ejemplo, conducir a un punto de partida o dirigir a un conductor a una ubicación popular para que los busque en el futuro) no se registran como transacciones facturables.
  • El punto de partida y el destino de un pasajero se registran como una transacción facturable.
  • Un viaje para un grupo de pasajeros facturado como grupo se registra como una transacción facturable. En detalle, si el conductor recoge a dos o más pasajeros en una ubicación y los deja en otra, y les facturas como grupo, se cuenta como una sola transacción. Llama a pickup() solo una vez y a dropoff() solo una vez con el ID de transacción relevante.
  • Un viaje compartido para dos pasajeros facturados por separado se considera como dos transacciones facturables, incluso si se recogen y dejan a los pasajeros en las mismas ubicaciones. Llama a pickup() con ambos IDs de transacción (uno para cada transacción) cuando el conductor recoja a los pasajeros y llama a dropoff() con ambos IDs de transacción cuando el conductor deja a los pasajeros.
  • Las paradas discrecionales no se consideran transacciones facturables separadas. Algunos ejemplos incluyen dividir el viaje para recoger café o dejar a un copasajero al que no se le factura por separado. No llames a dropoff() para paradas como estas normalmente.
  • Si tu organización factura algunos viajes de forma indirecta en lugar de facturarse durante el viaje, debes tratarlos como si la facturación fuera por viaje. Por ejemplo, tu organización puede proporcionar un modelo de suscripción mensual para viajes ilimitados. Llama a pickup() y dropoff() para estos viajes.
  • Si tu organización ofrece servicios de autobús que recogen y dejan pasajeros en un conjunto fijo de paradas, pero no hace un seguimiento de las personas que suben y bajan en cada parada, debes obtener una licencia de producto por separado. Estos tipos de servicios de autobús están fuera del alcance de la facturación por transacción.
  • Si tu organización proporciona servicios de alquiler de vehículos que permiten a un pasajero hacer paradas ilimitadas durante un período prolongado que se factura como una tarifa, debes obtener una licencia de producto independiente. Estos servicios están fuera del alcance de la facturación por transacción.

Lineamientos para las transacciones de entrega:

  • Las sesiones de navegación que no incluyen un elemento para su entrega (por ejemplo, conducir a una tienda a fin de recoger productos para que se entregue) no se registran como transacciones facturables.
  • El retiro y la entrega de un pedido desde una sola ubicación se consideran como una transacción facturable. Un pedido puede incluir varios objetos físicos, por ejemplo, dos bolsas de víveres. Llama a pickup() cuando el conductor retire el pedido y a dropoff() cuando lo entregue.
  • Cuando un conductor recoge artículos de varias ubicaciones (por ejemplo, tiendas o restaurantes) como parte del mismo pedido, cada ubicación se registra como una transacción facturable independiente. Usa un ID de transacción diferente para cada ubicación.
  • Cuando un conductor recoge artículos de varios pedidos de clientes en la misma ubicación, cada pedido cuenta como una transacción facturable independiente. Usa un ID de transacción diferente para cada pedido.
  • Cuando dos conductores recogen y devuelven artículos por separado como parte del mismo pedido de un cliente, la entrega de cada conductor cuenta como una transacción facturable independiente, incluso si los artículos son de la misma ubicación de la tienda. Usa un ID de transacción diferente para cada controlador.