رویکردها
برای بهترین عملکرد با «موتور ناوگان»، جریانی از بهروزرسانیهای مکان خودرو حداقل یکبار در دقیقه و حداکثر یکبار در هر ۵ ثانیه به آن ارائه دهید. از یکی از روشهای زیر برای ارائه این بهروزرسانیها استفاده کنید:
- از کیت توسعه نرمافزار Driver استفاده کنید: سادهترین گزینه.
- استفاده از کد سفارشی: اگر مکانها ازطریق زیرینه شما منتقل میشوند، یا اگر از دستگاههایی غیراز Android یا iOS استفاده میکنید، مفید است. این سند این رویکرد را پوشش میدهد.
صرفنظر از نحوه ارائه بهروزرسانیهای مکان خودرو، پسزمینه شما مسئول بهروزرسانی Fleet Engine است، هم زمانی که خودرو تحویل در مسیر رسیدن به ایستگاه است و هم زمانی که به ایستگاه میرسد. این شامل خود انبار میشود. Fleet Engine این رویدادها را بهطور خودکار تشخیص نمیدهد.
نمونههای بهروزرسانی مکان خودرو
برای بهروزرسانی مکان خودرو در Fleet Engine، میتوانید از کتابخانه Java gRPC یا REST، همانطور که در مثال زیر نشان داده شده است، استفاده کنید. برای مشاهده فهرست کامل زبانهای پشتیبانیشده، به کتابخانههای مشتری برای سرویسهای وظیفه زمانبندیشده مراجعه کنید.
جاوا
static final String PROJECT_ID = "my-delivery-co-gcp-project";
static final String VEHICLE_ID = "vehicle-8241890";
DeliveryServiceBlockingStub deliveryService =
DeliveryServiceGrpc.newBlockingStub(channel);
// Vehicle settings
String vehicleName = "providers/" + PROJECT_ID + "/deliveryVehicles/" + VEHICLE_ID;
DeliveryVehicle myDeliveryVehicle = DeliveryVehicle.newBuilder()
.setLastLocation(DeliveryVehicleLocation.newBuilder()
.setSupplementalLocation(LatLng.newBuilder()
.setLatitude(37.3382)
.setLongitude(121.8863))
.setSupplementalLocationTime(now())
.setSupplementalLocationSensor(DeliveryVehicleLocationSensor.CUSTOMER_SUPPLIED_LOCATION)
.setSupplementalLocationAccuracy(DoubleValue.of(15.0))) // Optional
.build();
// DeliveryVehicle request
UpdateDeliveryVehicleRequest updateDeliveryVehicleRequest =
UpdateDeliveryVehicleRequest.newBuilder() // No need for the header
.setName(vehicleName)
.setDeliveryVehicle(myDeliveryVehicle)
.setUpdateMask(FieldMask.newBuilder()
.addPaths("last_location"))
.build();
try {
DeliveryVehicle updatedDeliveryVehicle =
deliveryService.updateDeliveryVehicle(updateDeliveryVehicleRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND:
break;
case PERMISSION_DENIED:
break;
}
return;
}
REST
PATCH https://fleetengine.googleapis.com/v1/providers/<project_id>/deliveryVehicles/<id>?updateMask=last_location
جزئیات درخواست
بدنه درخواست باید حاوی نهاد DeliveryVehicle باشد که فیلدها را بهصورت زیر مشخص میکند:
فیلدهای الزامی:
فیلد مقدار lastLocation.supplementalLocationمکان خودرو. lastLocation.supplementalLocationTimeآخرین مُهر زمان مشخصی که خودرو در این مکان بوده است. lastLocation.supplementalLocationSensorباید با CUSTOMER_SUPPLIED_LOCATIONپر شود.فیلدهای اختیاری:
فیلد مقدار lastLocation.supplementalLocationAccuracyدقت مکان ارائهشده، برحسب متر.
# Set JWT, PROJECT_ID, VEHICLE_ID, TASK1_ID, and TASK2_ID in the local
# environment
curl -X PATCH "https://fleetengine.googleapis.com/v1/providers/${PROJECT_ID}/deliveryVehicles/${VEHICLE_ID}?updateMask=remainingVehicleJourneySegments" \
-H "Content-type: application/json" \
-H "Authorization: Bearer ${JWT}" \
--data-binary @- << EOM
{
"lastLocation": {
"supplementalLocation": {"latitude": 12.1, "longitude": 14.5},
"supplementalLocationTime": "$(date -u --iso-8601=seconds)",
"supplementalLocationSensor": "CUSTOMER_SUPPLIED_LOCATION",
"supplementalLocationAccuracy": 15
}
}
EOM