Für eine optimale Leistung mit Fleet Engine sollten Sie einen Stream von Fahrzeugstandortaktualisierungen bereitstellen. Dazu haben Sie zwei Möglichkeiten:
- Driver SDK verwenden: Die einfachste Option. Weitere Informationen finden Sie in der Driver SDK-Dokumentation für Android oder iOS.
- Benutzerdefinierten Code verwenden: Diese Option ist nützlich, wenn Standorte über Ihr Back-End weitergeleitet werden oder wenn Sie andere Geräte als Android- oder iOS-Geräte verwenden. Dieser Leitfaden behandelt diesen Ansatz.
Wenn Sie den Standort des Fahrzeugs nicht mit dem Driver SDK aktualisieren, können Sie Fleet Engine direkt mit dem Standort des Fahrzeugs aufrufen. Für jedes aktive Fahrzeug erwartet Fleet Engine mindestens einmal pro Minute und höchstens einmal alle 5 Sekunden eine Standortaktualisierung. Für diese Aktualisierungen sind nur die Berechtigungen Fleet Engine Driver SDK User erforderlich.
Beispiel für die Aktualisierung des Fahrzeugstandorts
Um den Standort eines Fahrzeugs zu aktualisieren, können Sie die Java-gRPC-Bibliothek oder REST verwenden, wie es im folgenden Beispiel gezeigt wird. Eine vollständige Liste der unterstützten Sprachen finden Sie unter Clientbibliotheken für On-Demand-Fahrtdienste.
Java
static final String PROJECT_ID = "project-id";
static final String VEHICLE_ID = "vid-8241890";
VehicleServiceBlockingStub vehicleService = VehicleService.newBlockingStub(channel);
String vehicleName = "providers/" + PROJECT_ID + "/vehicles/" + VEHICLE_ID;
Vehicle updatedVehicle = Vehicle.newBuilder()
.setLastLocation(VehicleLocation.newBuilder()
.setSupplementalLocation(LatLng.newBuilder()
.setLatitude(37.3382)
.setLongitude(121.8863))
.setSupplementalLocationTime(now())
.setSupplementalLocationSensor(LocationSensor.CUSTOMER_SUPPLIED_LOCATION)
.setSupplementalLocationAccuracy(DoubleValue.of(15.0))) // Optional
.build();
UpdateVehicleRequest updateVehicleRequest = UpdateVehicleRequest.newBuilder()
.setName(vehicleName)
.setVehicle(updatedVehicle)
.setUpdateMask(FieldMask.newBuilder()
.addPaths("last_location"))
.build();
try {
Vehicle updatedVehicle =
vehicleService.updateVehicle(updateVehicleRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND:
// Most implementations will call CreateVehicle in this case
break;
case PERMISSION_DENIED:
break;
}
return;
}
// If no Exception, Vehicle updated successfully.
REST
curl -X PUT \
"https://fleetengine.googleapis.com/v1/providers/project-id/vehicles/vid-8241890?updateMask=last_location" \
-H "Authorization: Bearer $JWT" \
-H "Content-Type: application/json" \
--data-binary @- << EOM
{
"supplementalLocation": {"latitude": 12.1, "longitude": 14.5},
"supplementalLocationTime": "$(date -u --iso-8601=seconds)",
"supplementalLocationSensor": "CUSTOMER_SUPPLIED_LOCATION",
"supplementalLocationAccuracy": 15
}
EOMWeitere Informationen finden Sie in der Referenz zu providers.vehicles.update.