Bu belgede, bir seyahatin nasıl güncelleneceği ve durumunun nasıl yönetileceği açıklanmaktadır. Bu süreçte, geziyle ilgili alanları ayarlamak için saha maskesi kullanılması gerekir. Bu sitede açıklandığı gibi Fleet Engine'ı kurduğunuz ve bir seyahate atanmış bir araçla çalıştığınız varsayılır.
Gezi güncellemesiyle ilgili temel bilgiler
Sisteminiz aşağıdaki durumlarda bir geziyi güncellemek için Fleet Engine'i kullanır:
- Oluşturulduktan sonra bir seyahate araç atarken.
- Yolculuğun durumu değiştiğinde (ör. araç yol noktalarından geçtiğinde).
- Yolcu sayısı ve bırakma noktası gibi seyahat alanlarını güncellediğinizde
Bir geziyi güncellemek için gRPC ve REST'i kullanarak istek gönderin.
Projenizin hizmet hesabı için Fleet Engine: Hizmet hesabı rolleri bölümünde açıklandığı şekilde uygun kimlik bilgilerini kullanın.
Gezi alanlarını güncelleme
Tek bir varış noktası gezi oluşturma başlıklı makalenin Seyahat alanları bölümünde açıklanan gezi alanlarından herhangi birini güncelleyebilirsiniz. Örneğin, bir gezi oluşturduktan sonra ilk olarak bir araç bulmak ve ardından yolculuğu gerçekleştirecek araçla ilişkilendirmek için gezi vehicle_id
alanını güncellemek yaygın bir uygulamadır.
Alan maskeleri kullanma
Alan maskeleri, API çağırıcılarının bir isteğin içermesi veya güncellemesi gereken alanları listelemesi için bir yoldur. FieldMask kullanılması gereksiz işlerin önüne geçer ve performansı artırır. Fleet Engine, tüm kaynaklardaki alanları güncellemek için alan maskelerini kullanır.
Seyahati araç kimliğiyle güncelleyin.
Fleet Engine'ın aracı rotasında izleyebilmesi için bir geziyi araç kimliğiyle yapılandırmanız gerekir. Aşağıdaki kod örneğinde, seyahatin araç kimliğiyle nasıl güncelleneceği gösterilmektedir.
static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "trip-8241890";
String tripName = "providers/" + PROJECT_ID + "/trips/" + TRIP_ID;
TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);
// The trip settings to update.
Trip trip = Trip.newBuilder()
.setVehicleId("8241890")
.build();
// The trip update request.
UpdateTripRequest updateTripRequest =
UpdateTripRequest.newBuilder() // No need for the header.
.setName(tripName)
.setTrip(trip)
.setUpdateMask(FieldMask.newBuilder().addPaths("vehicle_id"))
.build();
// Error handling.
// If the Fleet Engine has both a trip and vehicle with IDs, and if the
// credentials validate, then the service updates the trip.
try {
Trip updatedTrip = tripService.updateTrip(updateTripRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND: // Neither the trip nor vehicle exist.
break;
case PERMISSION_DENIED:
break;
}
return;
}
Gezilerin durumunu yönetme
Bir seyahatin durumunu, TripStatus
numaralandırma değerlerinden birini kullanarak belirtirsiniz. Bir seyahatin durumu değiştiğinde (ör. ENROUTE_TO_PICKUP
yerine ARRIVED_AT_PICKUP
) Fleet Engine'de seyahat durumunu güncellersiniz. Gezi yaşam döngüsü her zaman NEW
olan bir durum değeriyle başlar ve COMPLETE
veya CANCELED
olan bir değerle biter.
Örnek gezi güncellemesi
Aşağıda, Fleet Engine'de arka arkaya bir gezi için seyahat durumunun nasıl güncelleneceği gösterilmektedir.
static final String PROJECT_ID = "my-rideshare-co-gcp-project";
static final String TRIP_ID = "trip-8241890";
String tripName = "providers/" + PROJECT_ID + "/trips/" + TRIP_ID;
TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);
// Trip settings to be updated.
Trip trip = Trip.newBuilder()
.setTripStatus(TripStatus.ARRIVED_AT_PICKUP)
.build();
// Trip update request
UpdateTripRequest updateTripRequest = UpdateTripRequest.newBuilder()
.setName(tripName)
.setTrip(trip)
.setUpdateMask(FieldMask.newBuilder().addPaths("trip_status"))
.build();
// Error handling.
try {
Trip updatedTrip = tripService.updateTrip(updateTripRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND: // The trip doesn't exist.
break;
case FAILED_PRECONDITION: // The given trip status is invalid.
break;
case PERMISSION_DENIED:
break;
}
return;
}
Diğer gezi türleri bölümünde, gezilerin nasıl güncelleneceğiyle ilgili diğer örneklere göz atabilirsiniz.
Gezi hatalarını işleme
Mevcut gezileri güncellerken veya bulurken DEADLINE_EXCEEDED
hatasıyla karşılaşabilirsiniz. Bu durumda Fleet Engine'ın durumu bilinmez.
Bu sorunu incelemek için önce güncellemeye veya izlemeye çalıştığınız seyahat kimliğini kullanarak CreateTrip
'yi tekrar arayın. Bu, 201 (CREATED) veya 409 (CONFLICT) döndürmelidir. İkinci durumda, önceki istek DEADLINE_EXCEEDED
'ten önce başarılı olmuştur.
Android veya iOS için Tüketici SDK'sındaki ağ hatalarının listesini inceleyin.