Prepara el vehículo

Configura objetos de escucha

Después de inicializar el SDK de Driver y crear una instancia de GMTDDeliveryDriverAPI, puedes configurar objetos de escucha de eventos para supervisar el éxito o el fracaso de las actualizaciones de vehículos que se envían a Fleet Engine y a tu backend. Estos objetos de escucha pueden activar acciones dentro de tu app para conductores, como notificarle al conductor si falla la comunicación con tu backend.

Cómo detectar eventos de actualización de vehículos

Cuando el conductor habilita las actualizaciones de ubicación en la app para conductores, el SDK para conductores envía actualizaciones de vehículos regulares a Fleet Engine y al backend del cliente a través de la clase GMTDDeliveryVehicleReporter. Para que la app responda a los eventos de actualización, configura el protocolo GMTDVehicleReporterListener.

Con GMTDVehicleReporterListener, puedes controlar los siguientes eventos:

  • vehicleReporter:didSucceedVehicleUpdate

    Informa a la app del controlador que los servicios de backend recibieron de forma correcta la ubicación del vehículo y la actualización del estado.

  • vehicleReporter:didFailVehicleUpdate:withError

    Informa al objeto de escucha que no se pudo actualizar un vehículo. Siempre que el conductor tenga habilitadas las actualizaciones de ubicación, la clase GMTDDeliveryVehicleReporter seguirá enviando los datos más recientes al motor de flota.

En el siguiente ejemplo, se muestra cómo configurar GMTDVehicleReporterListener para controlar estos eventos:

Swift

import GoogleRidesharingDriver

private let providerID = "INSERT_YOUR_PROVIDER_ID"

class SampleViewController: UIViewController, GMTDVehicleReporterListener {
  private let mapView: GMSMapView

  override func viewDidLoad() {
    // Assumes you have implemented the sample code up to this step.
    deliveryDriverAPI.vehicleReporter.add(self)
  }

  func vehicleReporter(_ vehicleReporter: GMTDDeliveryVehicleReporter, didSucceed vehicleUpdate: GMTDVehicleUpdate) {
    // Handle update succeeded.
  }

  func vehicleReporter(_ vehicleReporter: GMTDDeliveryVehicleReporter, didFail vehicleUpdate: GMTDVehicleUpdate, withError error: Error) {
    // Handle update failed.
  }
}

Objective-C

SampleViewController.h
@interface SampleViewController : UIViewController<GMTDVehicleReporterListener>
@end

SampleViewController.m
#import "SampleViewController.h"
#import "SampleAccessTokenProvider.h"
#import <GoogleRidesharingDriver/GoogleRidesharingDriver.h>

static NSString *const PROVIDER_ID = @"INSERT_YOUR_PROVIDER_ID";

@implementation SampleViewController {
 GMSMapView *_mapView;
}

- (void)viewDidLoad {
  // ASSUMES YOU IMPLEMENTED HAVE THE SAMPLE CODE UP TO THIS STEP.
  [delivervehicleReporter addListener:self];
}

- (void)vehicleReporter:(GMTDDeliveryVehicleReporter *)vehicleReporter didSucceedVehicleUpdate:(GMTDVehicleUpdate *)vehicleUpdate {
  // Handle update succeeded.
}

- (void)vehicleReporter:(GMTDDeliveryVehicleReporter *)vehicleReporter didFailVehicleUpdate:(GMTDVehicleUpdate *)vehicleUpdate withError:(NSError *)error {
  // Handle update failed.
}

@end

Cómo habilitar las actualizaciones de ubicación

Para habilitar las actualizaciones de ubicación, en la app para conductores de GMTDDeliveryVehicleReporter, establece locationTrackingEnabled en YES. Luego, la clase GMTDDeliveryVehicleReporter envía actualizaciones de ubicación de forma automática a Flet Engine. Además, cuando el GMSNavigator está en el modo de navegación, que es cuando se establece un destino a través de setDestinations, la clase GMTDDeliveryVehicleReporter envía automáticamente actualizaciones de la ruta y la hora de llegada estimada.

El SDK del controlador configura la ruta para que coincida con la ruta de navegación actual del conductor. Para garantizar actualizaciones de ubicación precisas, configura el punto de referencia en -setDestinations:callback: para que coincida con el destino en Fleet Engine.

En el siguiente ejemplo, se muestra cómo habilitar las actualizaciones de ubicación:

Swift

import GoogleRidesharingDriver

private let providerID = "INSERT_YOUR_PROVIDER_ID"

class SampleViewController: UIViewController, GMTDVehicleReporterListener {
  private let mapView: GMSMapView

  override func viewDidLoad() {
    // Assumes you have implemented the sample code up to this step.
    deliveryDriverAPI.vehicleReporter.locationTrackingEnabled = true
  }
}

Objective-C

SampleViewController.m
#import "SampleViewController.h"
#import "SampleAccessTokenProvider.h"
#import <GoogleRidesharingDriver/GoogleRidesharingDriver.h>

static NSString *const PROVIDER_ID = @"INSERT_YOUR_PROVIDER_ID";

@implementation SampleViewController {
 GMSMapView *_mapView;
}

- (void)viewDidLoad {
  // ASSUMES YOU HAVE IMPLEMENTED THE SAMPLE CODE UP TO THIS STEP.
  deliveryDriverAPI.vehicleReporter.locationTrackingEnabled = YES;
}

@end

Cómo establecer el intervalo de actualización (opcional)

De forma predeterminada, cuando estableces locationTrackingEnabled en YES, el SDK del controlador envía actualizaciones de ubicación a Fleet Engine en un intervalo de 10 segundos. Puedes cambiar el intervalo de actualización con locationUpdateInterval a un intervalo mínimo de 5 segundos o un máximo de 60 segundos. Las actualizaciones más frecuentes pueden generar solicitudes y errores más lentos.