Seyahatleri güncelleme ve durumlarını yönetme

Bu dokümanda, bir gezinin nasıl güncelleneceği ve durumunun nasıl yönetileceği açıklanmaktadır. bir geziyle ilgili alanları ayarlamak için saha maskesi kullanmayı içerir. Varsayılan olarak, Fleet Engine'i bu sitede açıklandığı gibi kurmuş ve bir bir seyahate atanmış aracı.

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.
  • Gezinin durumu değiştiğinde; Örneğin, araç kartındaki göz atmayı unutmayın.
  • Yolcu sayısı ve yolcu sayısı gibi gezi alanlarını güncellediğinizde karar verebilirsiniz.

Bir geziyi güncellemek için gRPC veya REST kullanarak bir istek gönderin.

  • UpdateTrip() yöntemi: gRPC veya REST
  • UpdateTripRequest mesajı: Yalnızca gRPC

Projenizin hizmet hesabı için uygun kimlik bilgilerini Fleet Engine: Hizmet hesabı rolleri başlıklı makalede açıklanmıştır.

Gezi alanlarını güncelleyin

Oluşturma alanı'ndaki Seyahat alanları bölümünde açıklanan gezi alanlarını güncelleyebilirsiniz. seyahat eder. Örneğin, bir gezi oluşturduktan sonra alıştırma yapın ve ardından gezi vehicle_id alanını şu şekilde güncelleyin: seyahati gerçekleştirecek araçla ilişkilendirmesini sağlar.

Alan maskeleri kullanma

Alan maskeleri, API çağrılarının bir istekte bulunması gereken alanları veya güncelleyin. FieldMask kullanma gereksiz işlerden kaçınır ve performansı artırır. Fleet Engine saha maskeleri kullanıyor Tüm kaynaklardaki alanları güncellemek için.

Seyahati araç kimliğiyle güncelleyin.

Fleet Engine'in takip edebilmesi için geziyi araç kimliği ile yapılandırmanız gerekir. görebilirsiniz. Aşağıdaki kod örneğinde, seyahati bir araç kimliğiyle güncelleyin.

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 gezinin durumunu TripStatus numaralandırmasından birini kullanarak belirtirsiniz değerler. Bir seyahatin durumu değiştiğinde; Örneğin ENROUTE_TO_PICKUP - ARRIVED_AT_PICKUP, Fleet Engine'de gezi durumunu güncelleyeceksiniz. Gezi yaşam döngüsü her zaman NEW durum değeriyle başlar ve şu değerle biter: COMPLETE veya CANCELED.

Örnek gezi güncellemesi

Aşağıda, art arda yapılan geri yükleme için seyahat durumunun nasıl güncelleneceği gösterilmektedir bir plan hazırladı.

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;
}

Gezilerin nasıl güncelleneceğiyle ilgili diğer örnekleri Diğer gezi türleri bölümünde bulabilirsiniz bölümüne bakın.

Gezi hatalarını işleme

Mevcut gezileri güncellerken veya bulurken DEADLINE_EXCEEDED hatası. Bu durumda Fleet Engine'in durumu bilinmiyor. Bunu araştırmak için önce sizinle aynı seyahat kimliğini kullanarak CreateTrip adlı satıcıyı tekrar arayın çalıştığınızı gösterir. Bu, bir 201 (CREATED) veya 409 (CONFLICT). İkinci durumda, önceki istek DEADLINE_EXCEEDED

Tüketici SDK'sındaki ağ hatalarının listesini inceleyin (Android veya iOS

Sırada ne var?