Fleet Engine On-İsteğe Bağlı Rides and Deliveries API'si, gezileri yönetmenize olanak tanır ve araç durumu hakkında daha fazla bilgi edinin. Sürücü SDK'sı, Tüketici SDK'sı ve oluşturarak Fleet Engine ile iletişim kurabilen arka uç hizmeti gibi gRPC veya REST çağrıları için geçerlidir.
Ön koşullar
Geliştirme için Google Cloud Platform'u SDK'yı (gcloud) kullanıyorsanız ve kimliği doğrulandığında akılda kalıcı bir yolunu sunar.
kabuk
gcloud auth login
Şuna benzer bir başarı mesajı görmeniz gerekir:
You are now logged in as [my-user@example.com].
Your current project is [project-id]. You ...
İsteğe Bağlı Yolculuklar ve Teslimatlar Çözümü Fleet Engine API'lerinin uygun şekilde yapılandırıldığından emin olun.
kabuk
gcloud --project=project-id services enable fleetengine.googleapis.com
Bu komut hatayla sonuçlanırsa proje yöneticinizle iletişime geçin ve Google destek temsilcinize ulaşın.
Günlük Kaydı
Fleet Engine, aldığı API çağrılarıyla ilgili günlük mesajları yazabilir Google Cloud Platform günlüklerine işlenmesini sağlar. Ayrıntılı bilgi için Cloud Logging günlüklerin nasıl okunacağı ve analiz edileceğine dair genel bakış.
Şu tarihten önce oluşturulan projeler için günlük kaydı varsayılan olarak etkinleştirilmemiş olabilir: 10 Şubat 2022. Bkz. günlük kaydı belgeleri inceleyebilirsiniz.
İstemci Kitaplıkları
Yaygın olarak kullanılan birkaç programlama dilinde istemci kitaplıkları yayınlıyoruz. Bu kitaplıkları, ham REST veya gRPC yerine daha iyi bir geliştirici deneyimi sağlamaya yardımcı olur. Sunucu uygulamanız için istemci kitaplıklarını nasıl edineceğinizle ilgili talimatlar için bkz. İstemci Kitaplıkları.
Bu belgelerdeki Java örneklerinde gRPC hakkında bilgi sahibi olduğu varsayılır.
Kimlik Doğrulama ve Yetkilendirme
Gezi ve Sipariş İlerlemesi tarafından sağlanan özellikleri Google Cloud Console. Bu API'ler ve SDK'lar, aşağıdaki koşulları karşılayan JSON Web Jetonlarının kullanılmasını gerektirir: alan adındaki hizmet hesapları kullanılarak imzalandı Cloud Console.
Bulut projesi kurulumu
Bulut projenizi kurmak için önce projenizi, ardından hizmet hesapları oluşturabilir.
Google Cloud projenizi oluşturmak için:
- Google Cloud Console'u kullanarak bir Google Cloud projesi oluşturun.
- API'ler ve Hizmetler Kontrol Paneli'ni kullanarak Yerel Yolculuklar ve Teslimatlar API'si.
Hizmet hesapları bir veya daha fazla rolle ilişkilendirilmiş. Bu kitleler, Değişikliğe bağlı olarak farklı izin grupları veren JSON Web Jetonları rollerini anlatacağım. Genellikle kötüye kullanım olasılığını azaltmak için birden fazla ve her biri gereken minimum rol kümesine sahip olmalıdır.
Gezi ve Sipariş İlerlemesi aşağıdaki rolleri kullanır:
Rol | Açıklama |
---|---|
Fleet Engine Tüketici SDK'sı Kullanıcısı
roles/fleetengine.consumerSdkUser |
Araç arama ve bilgi alma izni verir araçlar ve geziler hakkında konuşuyorum. Bununla bir hizmet hesabı tarafından oluşturulan jetonlar rolü genellikle araç paylaşımı veya teslimat tüketici uygulaması mobil cihazlarından kullanılır. |
Fleet Engine Sürücü SDK Kullanıcısı
roles/fleetengine.driverSdkUser |
Araç konumlarını ve rotalarını güncelleme izni verir ve araçlar ve yolculuklar hakkında bilgi almak için. Jetonlar oluşturuldu bu role sahip bir hizmet hesabı tarafından genellikle araç paylaşımı veya teslimat sürücüsü uygulaması mobil cihazları. |
Fleet Engine İsteğe Bağlı Yönetici
roles/fleetengine.ondemandAdmin |
Tüm araç ve gezi kaynakları için okuma ve yazma izni verir. Bu role sahip ana hesapların JWT kullanması gerekmez ve bunun yerine Uygulama Varsayılan Kimlik Bilgilerini kullanın. Özel JWT talepleri yoksayılır. Bu rol güvenilir ortamlarla (müşteri arka ucu) sınırlı olmalıdır. |
roles/fleetengine.serviceSuperUser |
Tüm araçlara ve yolculuk API'lerine izin verir. Basılan jetonlar
bu role sahip bir hizmet hesabı tarafından genellikle arka ucunuzdan kullanılır
sunucular. Bu rol kullanımdan kaldırıldı. Tercih
Bunun yerine roles/fleetengine.ondemandAdmin . |
Örneğin, bu üç rolün her biri için birer hizmet hesabı oluşturun ve rolleri açıklayacağım.
gcloud --project=project-id iam service-accounts create fleet-engine-consumer-sdk gcloud projects add-iam-policy-binding project-id \ --member=serviceAccount:fleet-engine-consumer-sdk@project-id.iam.gserviceaccount.com \ --role=roles/fleetengine.consumerSdkUser gcloud --project=project-id iam service-accounts create fleet-engine-driver-sdk gcloud projects add-iam-policy-binding project-id \ --member=serviceAccount:fleet-engine-driver-sdk@project-id.iam.gserviceaccount.com \ --role=roles/fleetengine.driverSdkUser gcloud --project=project-id iam service-accounts create fleet-engine-su gcloud projects add-iam-policy-binding project-id \ --member=serviceAccount:fleet-engine-su@project-id.iam.gserviceaccount.com \ --role=roles/fleetengine.serviceSuperUser
Sürücü ve Tüketici SDK'ları bu standart roller temel alınarak oluşturulmuştur.
Alternatif olarak, izin verilen özel roller de bir araya getirilecek rastgele izin grubudur. Sürücü ve Tüketici SDK'ları, gerekli izin eksik. Bu nedenle, önemle özel roller yerine yukarıda sunulan standart rol grubunu kullanma.
Güvenilmeyen istemciler için JWT jetonları oluşturmanız gerekirse Böylece, Hizmet Hesabı Jeton Oluşturucu Rolü'nü kullanarak kullanıcılar jeton oluşturabilirler. gcloud komut satırı araçlarını kullanın.
gcloud projects add-iam-policy-binding project-id \
--member=user:my-user@example.com \
--role=roles/iam.serviceAccountTokenCreator
my-user@example.com
nerede kullanılır?
kimliği gcloud (gcloud auth list
--format='value(account)'
) ile doğrulayın.
Fleet Engine Kimlik Doğrulama Kitaplığı
Fleet Engine, aşağıdakilere erişimi kısıtlamak için JSON Web Jetonlarını (JWT) kullanır Fleet Engine API'leri. Yeni Fleet Engine Kimlik Doğrulama Kitaplığı, GitHub'da bulabilirsiniz, Fleet Engine JWT'lerinin yapımını basitleştirir ve bunları güvenli bir şekilde imzalar.
Kitaplık aşağıdaki avantajları sunar:
- Fleet Engine Jetonları oluşturma işlemini basitleştirir.
- Kimlik bilgisi dosyalarını kullanmak dışında jeton imzalama mekanizmaları sağlar (ör. bir hizmet hesabının kimliğine bürünme.)
- İmzalanmış jetonları bir gRPC koçanından veya GAPIC istemcisi.
Yetkilendirme için JSON Web Token (JWT) oluşturma
Fleet Engine Auth Kitaplığı kullanılmadığında, JSON Web Jetonları (JWT) doğrudan kod tabanınızda oluşturulur. Bu hem geniş kapsamlı ve Fleet Engine'le ilişkisini anlıyor. Bu nedenle Fleet Engine Auth Kitaplığı'ndan yararlanmanızı ÖNEMLE tavsiye ederiz.
Fleet Engine içinde JSON Web Jetonları (JWT'ler) kısa ömürlü kimlik doğrulama sağlar ve cihazların yalnızca tek bir cihazdaki araçları, yolculukları veya görevleri bu verilere erişebilir. JWT'ler bir başlık ve hak talebi bölümü içerir. Üstbilgi bölümünde kullanılacak özel anahtar (hizmet hesaplarından alınır) ve şifreleme algoritmasından faydalanırsınız. Hak talebi bölümünde, jetonun oluşturulma zamanı, jetonların geçerlilik süresi, kullanım alanları erişimi talep etme ve diğer yetkilendirme bilgilerini edinin. erişim; Örneğin, araç kimliği.
JWT başlığı bölümü aşağıdaki alanları içerir:
Alan | Açıklama |
---|---|
Alg | Kullanılacak algoritma. "RS256". |
typ | Jetonun türü. "JWT". |
çocuk | Hizmet hesabınızın özel anahtar kimliği. Bu değeri hizmet hesabı JSON dosyanızın "private_key_id" alanında. Doğru izin düzeyine sahip bir hizmet hesabından anahtar kullandığınızdan emin olun. |
JWT hak talepleri bölümü aşağıdaki alanları içerir:
Alan | Açıklama |
---|---|
iss | Hizmet hesabınızın e-posta adresi. |
yerine girdi | Hizmet hesabınızın e-posta adresi. |
Aud | Hizmet hesabınızın SERVICE_NAME hizmeti (bu örnekte https://fleetengine.googleapis.com/) |
iat | Jetonun oluşturulduğu zamana ait zaman damgası (geçen saniye cinsinden belirtilir) 1 Ocak 1970'te 00:00:00'dan (UTC) beri. Eğiklik için 10 dakika bekleyin. Öğe veya gelecekte bir zaman damgası çok ilerideyse sunucu hata bildirebilir. |
exp | Jetonun süresinin dolacağı zaman damgası (geçen saniye cinsinden belirtilir) 1 Ocak 1970'te 00:00:00'dan (UTC) beri. Zaman damgası daha uzun bir zaman aralığı için. |
authorization | Kullanım alanına bağlı olarak "vehicleid" veya "tripid" içerebilir. |
JWT jetonu oluşturmak, jetonun imzalanması anlamına gelir. Talimatlar ve kod örnekleri için JWT'yi oluşturmak ve imzalamak için bkz. OAuth olmadan hizmet hesabını yetkilendirme. Ardından, imzalı bir jetonu gRPC çağrılarına veya kullanılan diğer yöntemlere ekleyebilirsiniz Fleet Engine'e erişmek için gereklidir.
JWT Hak Talepleri
JWT yükünü oluştururken yetkilendirmeye ek bir talep ekleyin
vehicleid
veya tripid
anahtarının
çağrının yapıldığı araç kimliği veya gezi kimliği.
Sürücü SDK'sı, vehicleid
bir seyahat aracı olabilir. Fleet Engine arka ucu, aracın
, değişikliği yapılmadan önce istenen geziyle ilişkilendirilir.
Tüketici SDK'sı her zaman tripid
hak talebini kullanır.
Araç Paylaşımı veya Teslimat Sağlayıcısı, vehicleid
ya da tripid
öğesini "*" ile kullanmalıdır. -
tüm Araçlar ve Seyahatlerle eşleşir. JWT'nin her iki jetonu da içerebileceğini unutmayın.
Bu işlem, jeton imzalama uygulamasını basitleştirebilir.
JWT Kullanım Alanları
Aşağıda Sağlayıcı sunucusu için örnek bir jeton gösterilmektedir:
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_provider_service_account"
}
.
{
"iss": "provider@yourgcpproject.iam.gserviceaccount.com",
"sub": "provider@yourgcpproject.iam.gserviceaccount.com",
"aud": "https://fleetengine.googleapis.com/",
"iat": 1511900000,
"exp": 1511903600,
"authorization": {
"vehicleid": "*",
"tripid": "*"
}
}
Aşağıda Tüketici uygulaması için örnek bir jeton gösterilmektedir:
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_consumer_service_account"
}
.
{
"iss": "consumer@yourgcpproject.iam.gserviceaccount.com",
"sub": "consumer@yourgcpproject.iam.gserviceaccount.com",
"aud": "https://fleetengine.googleapis.com/",
"iat": 1511900000,
"exp": 1511903600,
"authorization": {
"tripid": "trip_54321"
}
}
Aşağıda Sürücü uygulaması için örnek bir jeton gösterilmektedir:
{
"alg": "RS256",
"typ": "JWT",
"kid": "private_key_id_of_driver_service_account"
}
.
{
"iss": "driver@yourgcpproject.iam.gserviceaccount.com",
"sub": "driver@yourgcpproject.iam.gserviceaccount.com",
"aud": "https://fleetengine.googleapis.com/",
"iat": 1511900000,
"exp": 1511903600,
"authorization": {
"vehicleid": "driver_12345"
}
}
- Başlıktaki
kid
alanı için hizmet hesabınızın özel anahtarını belirtin Kimlik. Bu değeri, hizmetinizinprivate_key_id
alanında bulabilirsiniz. account JSON dosyası. iss
vesub
alanları için hizmet hesabınızın e-posta adresini belirtin. Bu değeri, hizmet hesabınızınclient_email
alanında bulabilirsiniz. JSON dosyası.aud
alanı için https://SERVICE_NAME/ değerini belirtin.iat
alanı için jetonun oluşturulduğu andaki zaman damgasını kullanın. 1 Ocak 1970 tarihinde 00:00:00 UTC itibarıyla geçen saniye olarak belirtilir. Eğiklik için 10 dakika bekleyin. Zaman damgası çok geçmişteyse ya da ileride sunucu hata bildirebilir.exp
alanında, jetonun süresinin dolduğu sıradaki zaman damgasını kullanın. 1 Ocak 1970 00:00:00 (UTC) tarihinden itibaren saniye olarak belirtilir. Maksimum izin verilen değeriat
+ 3600'dür.
Bir mobil cihaza iletilmek üzere JWT'yi imzalarken Sürücü veya Tüketici SDK'sı rolü için hizmet hesabı. Aksi halde, mobil cihaz, olmaması gereken durumu değiştirebilir.
Benzer şekilde, ayrıcalıklı çağrılar için kullanılacak JWT'yi imzalarken kullanın. Aksi halde, işlemi başarısız olur.
Test için JWT oluşturma
Terminalden jeton oluşturmak test sırasında faydalı olabilir.
Bu adımları uygulamak için kullanıcınız hesap, Hizmet Hesabı Jetonu Oluşturucu rolüne sahip olmalıdır:
gcloud projects add-iam-policy-binding project-id \
--member=user:my-user@example.com \
--role=roles/iam.serviceAccountTokenCreator
Aşağıdaki içerikle unsigned_token.json
adında yeni bir dosya oluşturun. iat
özelliği, dönemden sonraki saniye sayısı cinsinden geçerli zamandır.
terminalinizde date +%s
çalıştırarak alınır. exp
özelliği
dönemden sonraki saniye sayısı cinsinden geçerlilik süresi (şu şekilde hesaplanabilir:
3.600 ekleyerek iat
. Son kullanma tarihi
duymuş olabilirsiniz.
{ "aud": "https://fleetengine.googleapis.com/", "iss": "super-user-service-account@project-id.iam.gserviceaccount.com", "sub": "super-user-service-account@project-id.iam.gserviceaccount.com", "iat": iat, "exp": exp, "authorization": { "vehicleid": "*", "tripid": "*" } }
Ardından Super hesabınız adına jetonu imzalamak için aşağıdaki gcloud komutunu çalıştırın Kullanıcı hizmet hesabı:
gcloud beta iam service-accounts sign-jwt --iam-account=super-user-service-account@project-id.iam.gserviceaccount.com unsigned_token.json signed_token.jwt
İmzalanmış Base64 kodlu bir JWT artık dosyanın içinde depolanmalıdır
signed_token.jwt
Jeton önümüzdeki bir saat boyunca geçerlidir.
Artık Araçları Listele üzerinde curl
komutu çalıştırarak jetonu test edebilirsiniz
REST uç noktası:
curl -X GET "https://fleetengine.googleapis.com/v1/providers/project-id/vehicles" -H "Authorization: Bearer $(cat signed_token.jwt)"
Araçlar ve yaşam döngüleri
Araç, bir sürücü-araç çiftini temsil eden tüzel kişidir. Şu anda, Sürücü ve Araç ayrı ayrı izlenemez. Araç Paylaşma veya Teslimat Sağlayıcısı kodu, Hizmet hesabını içeren Google Cloud projesinin proje kimliği Filo Motoru API'lerini çağırmak için kullanılır) ve Yolculuk Paylaşımı veya Teslimat Sağlayıcıya ait Araç Kimliği.
Yedi gün geçmesine rağmen UpdateVehicle
aracılığıyla güncellenmeyen bir Araç
otomatik olarak silinir ve varsa atanmış gezileri,
ataması kaldırıldı. Bir aracı ulaşılabilir durumda tutmak için önerilen yaklaşım
konumunu düzenli aralıklarla güncellemektir. Çoğunda yapılan güncellemeler
Vehicle
varlığındaki diğer alanlar da
yeni alan değeri mevcut değerden farklı olur.
NOT: Vehicle
varlığındaki device_settings
gibi bazı alanlar hata ayıklama amacıyla yapılıyor
bilgileri için de geçerlidir. Bunların güncellendiğinde
Vehicle
öğesinin ömrünü uzatır.
CreateVehicle
adlı kullanıcının
Zaten mevcut olan sağlayıcı kimliği/araç kimliği çifti. 2024 yılında, 2024 yılında
Sık sık güncellenmediği durumlar iki şekilde ele alınabilir: sık sık telefon etmek
Beklenen bir sağlayıcı kimliği/araç kimliği çiftine sahip CreateVehicle
ve siliniyor
Araç zaten varsa bu hatayı alma; veya bir anahtar kelimeden sonra CreateVehicle
UpdateVehicle
, NOT_FOUND
hatasıyla döndürülüyor.
Araç konumu güncellemeleri
Fleet Engine ile en iyi performansı elde etmek için Fleet Engine'e bir araç akışı sağlayın Konum güncellemeleri. Bu güncellemeleri sağlamak için aşağıdaki yöntemlerden birini kullanın:
- Sürücü SDK'sını kullanın: Android, iOS -- en basit seçenektir.
- Özel kod kullanın (konumlar şunlardır: veya Android ya da Chrome OS dışında bir cihaz kullanıyorsanız iOS.
Araç türleri
Araç varlığında, şunları içeren zorunlu VehicleType
alanı yer alır:
Category
enum (şu şekilde belirtilebilir): AUTO
, TAXI
, TRUCK
,
TWO_WHEELER
, BICYCLE
veya PEDESTRIAN
. Araç türü
SearchVehicles
ve ListVehicles
reklam grubundaki filtre ölçütlerini kullanın.
Araçlar için tüm rotalarda ilgili RouteTravelMode
kullanılacaksa
kategorisi AUTO
, TWO_WHEELER
, BICYCLE
veya PEDESTRIAN
olarak ayarlanmış.
Kategori TAXI
veya TRUCK
değerine ayarlanırsa yönlendirme
AUTO
moduna ayarlar.
Araç özellikleri
Araç varlığı, yinelenen bir VehicleAttribute
alanı içeriyor. Bu
özellikleri Fleet Engine tarafından yorumlanmaz. SearchVehicles
API, eşleşen Vehicles
öğesinin tümünü içermesini zorunlu kılan bir alan içeriyor
eklenen özellikler belirtilen değere ayarlanır.
Özellik alanının, desteklenen diğer birkaç alanın yanı sıra olduğunu unutmayın.
(ör. vehicle_type
ve supported_trip_types
) Vehicle
mesajında.
Araç kalan ara noktaları
Araç varlığı, yinelenen bir TripWaypoint
alanı içeriyor (RPC | REST),
waypoints
(TBG | REST) olarak adlandırılır.
Bu alan, gezilerdeki geri kalan ara noktaları içerir. Sırayla
araç buralara ulaştığında. Fleet Engine, bu alanı geziler olarak hesaplar
arabaya atanır ve yolculuklar durumu değiştikçe aracı günceller.
Bu referans noktaları, TripId
alanı ve WaypointType
alanı ile tanımlanabilir.
Bir aracın eşleşmeler için uygunluğunu genişletme
Genellikle, yolculuk paylaşımından Araç Paylaşımı veya Teslimat Sağlayıcısının hizmetleri sorumludur
araçlara yapılan talep. Hizmet, araç özelliklerini kullanarak
daha fazla aramada kullanılıyor. Örneğin, sağlayıcı
tarafından sağlanan ayrıcalık veya yetenek düzeylerine karşılık gelen özellikler grubu
araç. Örneğin, üç seviye, boole değeri olan bir özellik kümesi olabilir
değerleri: is_bronze_level
, is_silver_level
ve is_gold_level
. Araç
üçü de için uygun olabilir. Fleet Engine, bir
bir geziyi tekrarlarsanız, arama o aracı da içerir.
Özelliklerin bu şekilde kullanılması, çeşitli özellikler sunan araçlar için de geçerlidir
özellikler.
Araç özelliklerini güncellemenin iki yolu vardır. Biri UpdateVehicle
API'ye gidin. Bu API kullanılırken Araç Özellikleri grubunun tamamı:
değerine ayarlayın. Yalnızca tek bir özelliği güncellemek mümkün değildir.
Diğer yöntem UpdateVehicleAttributes
API'sidir. Bu yöntem yalnızca
özelliklerin güncellenmesini sağlar. İstekte yer alan özellikler
yeni bir değere ayarlanmış veya belirtilmemiş özellikler değiştirilmez.
Nasıl Yapılır?: Araç Oluşturma
Filoda izlenecek her Araç için bir Vehicle
varlığı oluşturulmalıdır.
Bir oluşturmak için CreateVehicleRequest
ile CreateVehicle
uç noktasını kullanın
Araç.
Vehicle
öğesinin provider_id
öğesi proje kimliği olmalıdır
(ör.my-on-demand-project) [ör. my-on-demand-project]
Fleet Engine'i çağırmak için kullanılacak Hizmet Hesapları. Lütfen
Birden fazla hizmet hesabı, aynı Yolculuk Paylaşımı için Fleet Engine'e erişebilir
veya Teslimat Sağlayıcısı olarak, Fleet Engine şu anda
Aynı Vehicles
öğesine erişen birden fazla Google Cloud projesi var.
Vehicle
, OFFLINE
veya ONLINE
durumunda oluşturulabilir. Eğer
ONLINE
oluşturulduysa SearchVehicles
talebine yanıt olarak hemen iade edilebilir
daha fazla bilgi edineceksiniz.
CreateVehicle
görüşmesine ilk last_location
dahil edilebilir.
İzin verildiği takdirde, ONLINE
durumunda Vehicle
oluşturulmamalıdır:
last_location
.
Araçla ilgili ayrıntılar için Araç Türleri bölümüne bakın tür alanına ekleyin.
Ayrıntılar için Araç Özellikleri bölümüne bakın. değerini girin.
CreateVehicle
öğesinden döndürülen değer, oluşturulan Vehicle
varlığıdır.
Örnek
kabuk
curl -X POST \
"https://fleetengine.googleapis.com/v1/providers/project-id/vehicles?vehicleId=vid-8241890" \
-H "Authorization: Bearer $JWT" \
-H "Content-Type: application/json" \
--data-binary @- << EOM
{
"vehicleState": "OFFLINE",
"supportedTripTypes": ["EXCLUSIVE"],
"maximumCapacity": 4,
"vehicleType": {"category": "AUTO"},
"attributes": [{"key": "on_trip", "value": "false"}]
}
EOM
Görüntüleyin providers.vehicles.create bir referans noktası olarak kabul edilir.
Java
static final String PROJECT_ID = "project-id";
VehicleServiceBlockingStub vehicleService =
VehicleService.newBlockingStub(channel);
String parent = "providers/" + PROJECT_ID;
Vehicle vehicle = Vehicle.newBuilder()
.setVehicleState(VehicleState.OFFLINE) // Initial state
.addSupportedTripTypes(TripType.EXCLUSIVE)
.setMaximumCapacity(4)
.setVehicleType(VehicleType.newBuilder().setCategory(VehicleType.Category.AUTO))
.addAttributes(VehicleAttribute.newBuilder()
.setKey("on_trip").setValue("false")) // Opaque to the Fleet Engine
// Add .setBackToBackEnabled(true) to make this vehicle eligible for trip
// matching while even if it is on a trip. By default this is disabled.
.build();
CreateVehicleRequest createVehicleRequest =
CreateVehicleRequest.newBuilder() // no need for the header
.setParent(parent)
.setVehicleId("vid-8241890") // Vehicle ID assigned by Rideshare or Delivery Provider
.setVehicle(vehicle) // Initial state
.build();
// In this case, the Vehicle is being created in the OFFLINE state and
// no initial position is being provided. When the Driver App checks
// in with the Rideshare or Delivery Provider, the state can be set to ONLINE and
// the Driver App will update the Vehicle Location.
try {
Vehicle createdVehicle =
vehicleService.createVehicle(createVehicleRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case ALREADY_EXISTS:
break;
case PERMISSION_DENIED:
break;
}
return;
}
// If no Exception, Vehicle created successfully.
Araç oluşturma için Google Cloud platform günlükleri
Bir
CreateVehicle
uç noktasına çağrı alınır. Günlük girişi
CreateVehicle
isteğindeki değerlerle ilgili bilgiler. Arama
başarılı olursa, Vehicle
ile ilgili bilgileri de
geri döndü.
kabuk
gcloud --project=project-id logging read --freshness=1h '
jsonPayload.request.vehicleId="vid-8241890"
jsonPayload.@type="type.googleapis.com/maps.fleetengine.v1.CreateVehicleLog"
'
Aşağıdakine benzer bir kayıt yazdırılmalıdır:
---
insertId: c2cf4d3a180251c1bdb892137c14f022
jsonPayload:
'@type': type.googleapis.com/maps.fleetengine.v1.CreateVehicleLog
request:
vehicle:
attributes:
- key: on_trip
value: 'false'
maximumCapacity: 4
state: VEHICLE_STATE_OFFLINE
supportedTrips:
- EXCLUSIVE_TRIP
vehicleType:
vehicleCategory: AUTO
vehicleId: vid-8241890
response:
attributes:
- key: on_trip
value: 'false'
availableCapacity: 4
currentRouteSegmentHandle: AdSiwAwCO9gZ7Pw5UZZimOXOo41cJTjg/r3SuwVPQmuuaV0sU3+3UCY+z53Cl9i6mWHLoCKbBt9Vsj5PMRgOJ8zX
maximumCapacity: 4
name: providers/project-id/vehicles/vid-8241890
state: VEHICLE_STATE_OFFLINE
supportedTrips:
- EXCLUSIVE_TRIP
vehicleType:
vehicleCategory: AUTO
labels:
vehicle_id: vid-8241890
logName: projects/project-id/logs/fleetengine.googleapis.com%2Fcreate_vehicle
receiveTimestamp: '2021-09-22T03:25:16.361159871Z'
resource:
labels:
location: global
resource_container: projects/project-id
type: fleetengine.googleapis.com/Fleet
timestamp: '2021-09-22T03:25:15.724998Z'
Araç oluşturmayla ilgili Cloud Pub/Sub bildirimleri
Fleet Engine API, yeni bir otomatik olarak oluşturulur. Bu bildirimleri almak için lütfen şu yönergeleri izleyin: talimatları burada bulabilirsiniz.
NASIL YAPILIR? Bir aracın konumunu güncelleme
Aracın konumunu güncellemek için Sürücü SDK'sını kullanmıyorsanız bir Fleet Engine'e aracın konumuyla birlikte doğrudan çağrı. Tüm etkin araçlarda Fleet Engine, en az dakikada bir, en çok dakikada bir konum güncellemesi bekler 5 saniyede bir. Bu güncellemeler için yalnızca Fleet Engine Sürücü SDK Kullanıcısı gerekir ayrıcalıkları.
Örnek
kabuk
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
}
EOM
Görüntüleyin providers.vehicles.update bir referans noktası olarak kabul edilir.
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.
NASIL YAPILIR? Diğer Araç alanlarını güncelleme
Araç durumunun diğer özelliklerinde güncellemeler şundan daha seyrek yapılır:
veya konum güncellemeleri. last_location
dışındaki özelliklerde yapılan güncellemeler için gerekli
Fleet Engine Süper Kullanıcı ayrıcalıkları.
UpdateVehicleRequest
, hangi alanların gösterileceğini belirten bir update_mask
içerir
güncelleyin. Alanın davranışı, aşağıdaki örnekteki gibi Protobuf dokümanlarındaki gibidir:
sahip olacaksınız.
Araç Özellikleri bölümünde belirtildiği gibi,
attributes
alanına, korunacak tüm özelliklerin yazılması gerekir. Google
bir anahtar/değer çiftinin değerini sadece tek bir
UpdateVehicle
arama. Belirli özelliklerin değerlerini güncellemek için
UpdateVehicleAttributes
API kullanılabilir.
Örnek
Bu örnekte back_to_back
etkinleştirilir.
kabuk
curl -X PUT \
"https://fleetengine.googleapis.com/v1/providers/project-id/vehicles/vid-8241890?updateMask=vehicle_state,attributes,back_to_back_enabled" \
-H "Authorization: Bearer $JWT" \
-H "Content-Type: application/json" \
--data-binary @- << EOM
{
"vehicleState": "ONLINE",
"attributes": [
{"key": "on_trip", "value": "true"},
{"key": "cash_only", "value": "false"}
],
"backToBackEnabled": true
}
EOM
Görüntüleyin providers.vehicles.update bir referans noktası olarak kabul edilir.
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()
.setVehicleState(VehicleState.ONLINE)
.addAllAttributes(ImmutableList.of(
VehicleAttribute.newBuilder().setKey("on_trip").setValue("true").build(),
VehicleAttribute.newBuilder().setKey("cash_only").setValue("false").build()))
.setBackToBackEnabled(true)
.build();
UpdateVehicleRequest updateVehicleRequest = UpdateVehicleRequest.newBuilder()
.setName(vehicleName)
.setVehicle(updatedVehicle)
.setUpdateMask(FieldMask.newBuilder()
.addPaths("vehicle_state")
.addPaths("attributes")
.addPaths("back_to_back_enabled"))
.build();
// Attributes and vehicle state are being updated, so both are
// included in the field mask. Note that of on_trip were
// not being updated, but rather cash_only was being changed,
// the desired value of "on_trip" would still need to be written
// as the attributes are completely replaced in an update operation.
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.
Araç Güncellemeleri için Google Cloud platform günlükleri
Bir
UpdateVehicle
uç noktasına çağrı alınır. Günlük girişi
UpdateVehicle
isteğindeki değerlerle ilgili bilgiler. Arama
başarılı olursa, Vehicle
ile ilgili bilgileri de
geri döndü.
kabuk
gcloud --project=project-id logging read --freshness=1h '
jsonPayload.request.vehicleId="vid-8241890"
jsonPayload.@type="type.googleapis.com/maps.fleetengine.v1.UpdateVehicleLog"
'
Araç güncellemeleri için Cloud Pub/Sub bildirimleri
Fleet Engine API, mevcut bir araç güncellendi. Bu bildirimleri almak için lütfen şu yönergeleri izleyin: talimatları burada bulabilirsiniz.
NASIL YAPILIR? Araç arama
Fleet Engine, araç aramayı destekler. SearchVehicles
API, aşağıdakiler gibi bir göreve en uygun yakındaki sürücüleri bulmanızı sağlar:
yolcu veya teslimat talebi. SearchVehicles
API, bir
görev özellikleri ile eşleşen sürücülerin sıralı listesi
filonuzu test edin. Daha fazla bilgi için bkz.
Yakındaki sürücüleri bulma.
Örnek
Kullanılabilir araçlar ararken, Fleet Engine, aşağıdaki yollarda bulunan araçları hariç tutar: varsayılan olarak etkin yolculuk sayısı. Araç paylaşma veya teslimat sağlayıcısı hizmetleri, bunları arama isteklerine açıkça dahil etmesi gerekir. Aşağıdaki örnekte, bu araçları Grand'ten bir geziyle eşleşen araçları aramaya dahil edebilir Balai Sidang Jakarta Kongre Merkezi'ne ev sahipliği yapan Indonesia East Alışveriş Merkezi.
kabuk
Öncelikle, önceki adımlarda oluşturduğumuz aracın konumunu güncelleyin. uygun. Gerçek dünyada bu, çalışan Sürücü SDK'sı tarafından yapılır. araçtaki bir Android veya iOS cihazda.
curl -X PUT \
"https://fleetengine.googleapis.com/v1/providers/project-id/vehicles/vid-8241890?updateMask=last_location,attributes" \
-H "Authorization: Bearer $JWT" \
-H "Content-Type: application/json" \
--data-binary @- << EOM
{
"lastLocation": {
"updateTime": "$( date -u +"%Y-%m-%dT%H:%M:%SZ" )",
"location": {
"latitude": "-6.195139",
"longitude": "106.820826"
}
},
"attributes": [{"key": "on_trip", "value": "false"}]
}
EOM
Arama gerçekleştirilirse en azından bu araç getirilmelidir.
curl -X POST \
"https://fleetengine.googleapis.com/v1/providers/project-id/vehicles:search" \
-H "Authorization: Bearer $JWT" \
-H "Content-Type: application/json" \
--data-binary @- << EOM
{
"pickupPoint": {
"point": {"latitude": "-6.195139", "longitude": "106.820826"}
},
"dropoffPoint": {
"point": {"latitude": "-6.1275", "longitude": "106.6537"}
},
"pickupRadiusMeters": 2000,
"count": 10,
"minimumCapacity": 2,
"tripTypes": ["EXCLUSIVE"],
"vehicleTypes": [{"category": "AUTO"}],
"filter": "attributes.on_trip=\"false\"",
"orderBy": "PICKUP_POINT_ETA",
"includeBackToBack": true
}
EOM
Görüntüleyin providers.vehicles.search bir referans noktası olarak kabul edilir.
Java
static final String PROJECT_ID = "project-id";
VehicleServiceBlockingStub vehicleService = VehicleService.newBlockingStub(channel);
String parent = "providers/" + PROJECT_ID;
SearchVehiclesRequest searchVehiclesRequest = SearchVehiclesRequest.newBuilder()
.setParent(parent)
.setPickupPoint( // Grand Indonesia East Mall
TerminalLocation.newBuilder().setPoint(
LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
.setDropoffPoint( // Balai Sidang Jakarta Convention Center
TerminalLocation.newBuilder().setPoint(
LatLng.newBuilder().setLatitude(-6.213796).setLongitude(106.807195)))
.setPickupRadiusMeters(2000)
.setCount(10)
.setMinimumCapacity(2)
.addTripTypes(TripType.EXCLUSIVE)
.addVehicleTypes(VehicleType.newBuilder().setCategory(VehicleType.Category.AUTO))
.setFilter("attributes.on_trip=\"false\"")
.setOrderBy(VehicleMatchOrder.PICKUP_POINT_ETA)
.setIncludeBackToBack(true) // Fleet Engine includes vehicles that are en route.
.build();
// Error handling
// If matches are returned and the authentication passed, the request completed
// successfully
try {
SearchVehiclesResponse searchVehiclesResponse =
vehicleService.searchVehicles(searchVehiclesRequest);
// Search results: Each vehicle match contains a vehicle entity and information
// about the distance and ETA to the pickup point and dropoff point.
List<VehicleMatch> vehicleMatches = searchVehiclesResponse.getMatchesList();
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND:
break;
case PERMISSION_DENIED:
break;
}
return;
}
Araç filtreleme sorgusu
SearchVehicles
ve ListVehicles
, araç özelliklerinde filtrelemeyi destekler
kullanabilirsiniz. Filtre sorgusu söz dizimi için bkz.
Örnekler için AIP-160.
Filtre sorgularının YALNIZCA araç özelliklerinde filtrelemeyi desteklediğini ve
diğer alanlar için kullanılamaz. Filtre sorgusu, bir AND
ifadesi olarak işlev görür
(ör. minimum_capacity
veya vehicle_types
)
SearchVehiclesRequest
.
NASIL YAPILIR?: Araçları listeleme
SearchVehicles
, sıralamada az sayıda araç bulmak için optimize edildi
çok hızlı sipariş verir ve genellikle yakındaki sürücüleri bulmak için kullanılır.
kısa bir açıklamadır. Ancak bazen belirli gereksinimleri karşılayan tüm araçları bulmak
gerekli olsa bile arama kriterlerini karşılamaya devam edecektir. ListVehicles
bu kullanım alanı için
tasarladık.
ListVehicles
API, belirli bazı araçları karşılayan tüm araçları bulmanıza olanak tanır
istek seçenekleri. ListVehicles
API, aşağıdaki konumlardaki araçların sayfalara ayrılmış bir listesini döndürür:
karşılayıp karşılamadığını
görmeye yarar.
Araç özelliklerine göre filtreleme yapmak için lütfen Araç filtreleme sorgusu.
Örnek
Bu örnekte, vehicle_type
ve özellikleri
filter
dizesi.
kabuk
curl -X POST \
"https://fleetengine.googleapis.com/v1/providers/project-id/vehicles:list" \
-H "Authorization: Bearer $JWT" \
-H "Content-Type: application/json" \
--data-binary @- << EOM
{
"vehicleTypes": [{"category": "AUTO"}],
"filter": "attributes.on_trip=\"false\"",
}
EOM
Görüntüleyin providers.vehicles.list bir referans noktası olarak kabul edilir.
Java
static final String PROJECT_ID = "project-id";
VehicleServiceBlockingStub vehicleService = VehicleService.newBlockingStub(channel);
String parent = "providers/" + PROJECT_ID;
ListVehiclesRequest listVehiclesRequest = ListVehiclesRequest.newBuilder()
.setParent(parent)
.addTripTypes(TripType.EXCLUSIVE)
.addVehicleTypes(VehicleType.newBuilder().setCategory(VehicleType.Category.AUTO))
.setFilter("attributes.on_trip=\"false\"")
.setIncludeBackToBack(true) // Fleet Engine includes vehicles that are en route.
.build();
// Error handling
// If matches are returned and the authentication passed, the request completed
// successfully
try {
ListVehiclesResponse listVehiclesResponse =
vehicleService.listVehicles(listVehiclesRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND:
break;
case PERMISSION_DENIED:
break;
}
return;
}
Geziler ve yaşam döngüleri
Triest API ve yaşam döngüsü, Vehicle API ve yaşam döngüsüne benzer.
Yolculuk Paylaşımı Sağlayıcısı, Fleet Engine'i kullanarak gezi oluşturmaktan sorumludur
kullanır. Fleet Engine, hem RPC hizmeti hem de
TripService
ve REST kaynakları, provider.trips
, Bu arayüzler Seyahat varlığı oluşturma, bilgi isteği, arama ve
işlevselliği ve güncelleme yeteneğini içerir.
Trip
, yaşam döngüsü boyunca ilerlemesini izlemek için bir durum alanına sahiptir.
NEW
aralığındaki değerler, COMPLETE
artı CANCELED
ve UNKNOWN_TRIP_STATUS
arasında taşınır
, RPC için trip_status
konusuna bakın
veya REST için TripStatus'a gidin.
NEW
ENROUTE_TO_PICKUP
ARRIVED_AT_PICKUP
ENROUTE_TO_INTERMEDIATE_DESTINATION
ARRIVED_AT_INTERMEDIATE_DESTINATION
ENROUTE_TO_DROPOFF
COMPLETE
Hizmetiniz, CANCELED
seyahatini bu durumların herhangi birinden güncelleyebilir.
Hizmetiniz bir gezi oluşturduğunda motor, durumu NEW
olarak ayarlar. CEVAP
vehicle_id
isteğe bağlıdır. Araçlarda olduğu gibi, hizmetler atanmamış gezileri otomatik olarak siler
haber almadan yedi gün sonra. Hizmetiniz bir seyahat planı oluşturmaya çalışırsa
kimliği zaten mevcut, hata döndürülür. Bir gezi aşağıdaki durumlarda "etkin" olarak kabul edilir:
COMPLETE
veya CANCELED
dışında bir durumda. Bu ayrım
Araç varlığındaki active_trips
ve SearchTripsRequest
alanında önemli.
Hizmetiniz bir geziye atanan vehicle_id
öğesini yalnızca seyahat sırasında değiştirebilir
etkin. Örneğin, bu işlemi, sürücünün araç kullanırken
ve seyahat farklı bir araca yeniden atanır.
Arka arkaya uygulanırken durum önemlidir seyahat desteği. Bu destek, Sağlayıcı'nın bir Araca yeni bir seyahat ataması yapabilmesini sağlar. Araç aktif bir Seyahatteyken. Kod art arda yapılan geziler, tek bir geziyle aynıdır ve her bir seyahat için araç kimliği. Fleet Engine, yeni seyahatin kalkış ve varış noktalarını ara işaretler. Art arda yapılan geziler hakkında daha fazla bilgi için Çok noktalı geziler oluşturun.
Gezinin kalan ara noktaları
Seyahat varlığı, yinelenen bir TripWaypoint
alanı (RPC | REST) içeriyor.
remainingWaypoints
(RPC | REST) olarak adlandırılır.
Bu alan, aracın sırayla gitmesi gereken tüm ara noktaları içerir
gitmeden önce gidelim. Şunun hesaplamasında:
Aracın kalan ara noktaları.
Arka arkaya ve Araba Paylaşımı kullanım durumlarında bu liste,
bu geziden önce geçilecek ancak ara noktaların dahil olmadığı diğer geziler
bu seyahatten sonra. Listedeki ara nokta, TripId
ile tanımlanabilir
ve WaypointType
.
Yolculuk durumu ile Araçta kalan ara noktalar arasındaki ilişki
Aracın kalan ara noktaları (RPC | REST),
Fleet Engine bir seyahat durumu değişikliği isteği aldığında güncellenir. İlgili içeriği oluşturmak için kullanılan
önceki ara nokta, aracın kalan ara noktaları listesinden kaldırılır:
tripStatus
(RPC | REST)
diğer durum ENROUTE_TO_XXX olarak değiştirildi. Yani,
ENROUTE_TO_PICKUP olan seyahat durumu ARRIVED_AT_PICKUP, seyahatin
teslim alma noktası yine de aracın kalan ara nokta listesinde yer alır, ancak yolculuk sırasında
durum ENROUTE_TO_INTERMEDIATE_ROAS veya ENROUTE_TO_DROPOFF olarak değiştirilirse
başlangıç noktası aracın kalan ara noktalarından kaldırılır.
Bu, ARRIVED_AT_INTERMEDIATE_ROAS ve ENROUTE_TO_INTERMDEDIATE_DESTINATION. ARRIVED_AT_INTERMEDIATE_ROAS olduğunda, Mevcut ara hedef, aracın geri kalanından kaldırılmayacak araç, bir sonraki ara noktaya yönlendirildiğini bildirene kadar ara nokta listesini çıkarır.
Yolculuk durumu COMPLETED
olarak değiştirildiğinde, bu geziye ait hiçbir ara nokta görünmez
aracın kalan ara nokta listesindedir.
NASIL YAPILIR?: Gezi oluşturun
Her gezi isteğinin izlenebilmesi için bir Trip
varlığı oluşturulmalıdır ve
filodaki Araçlarla eşleştirildi. CreateTrip
uç noktasını CreateTripRequest
ile kullanın
tıklayın.
Gezi oluşturmak için aşağıdaki özellikler gereklidir:
parent
- Google Cloud projesi oluşturuldu.trip_id
- Araç Paylaşımı Sağlayıcısı tarafından oluşturulan bir dize.trip
: Geziyi açıklayan temel meta verileri içeren kapsayıcı.trip_type
- Gezide başka yolcuların olup olmadığını temsil eden sıralama aynı araçta farklı bir kalkış ve varış noktasından (SHARED
) veya yalnızca tek taraflı (EXCLUSIVE
).pickup_point
- Verinin başlangıç noktasını temsil eden TerminalLocation hayal edin. RPC referansına bakın veya REST referansı
Gezi oluştururken number_of_passengers
, dropoff_point
sağlayabilirsiniz
ve vehicle_id
. Bu alanlar zorunlu olmamakla birlikte, sağladığınızda
bu veriler saklanır. Diğer tüm Seyahat alanları yoksayılır. Örneğin, tüm seyahatler
trip_status
NEW
puanla geçseniz bile trip_status
ile NEW
CANCELED
(oluşturma isteğinde).
Örnek
Aşağıdaki örnekte Grand Indonesia East Mall'a bir gezi oluşturulmaktadır. Gezi
ve özeldir. Trip
için provider_id
özelliği şu şekilde olmalıdır:
proje kimliği ile aynıdır. Örnekte Araç Paylaşma Sağlayıcısı
Google Cloud Projesi, project-id. Bu proje,
Fleet Engine'i çağırmak için kullanılan Hizmet Hesapları. Gezinin durumu: NEW
.
Daha sonra servis, seyahati bir araçla eşleştirdikten sonra
UpdateTrip
ve gezi bir araca atandığında vehicle_id
değerini değiştirin.
kabuk
curl -X POST \
"https://fleetengine.googleapis.com/v1/providers/project-id/trips?tripId=tid-1f97" \
-H "Authorization: Bearer $JWT" \
-H "Content-Type: application/json" \
--data-binary @- << EOM
{
"tripType": "EXCLUSIVE",
"numberOfPassengers": 2,
"pickupPoint": {
"point": {"latitude": "-6.195139", "longitude": "106.820826"}
},
"dropoffPoint": {
"point": {"latitude": "-6.1275", "longitude": "106.6537"}
}
}
EOM
Görüntüleyin providers.trips.create bir referans noktası olarak kabul edilir.
Java
static final String PROJECT_ID = "project-id";
TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);
String parent = "providers/" + PROJECT_ID;
Trip trip = Trip.newBuilder()
.setTripType(TripType.EXCLUSIVE) // Use TripType.SHARED for carpooling
.setPickupPoint( // Grand Indonesia East Mall
TerminalLocation.newBuilder().setPoint(
LatLng.newBuilder().setLatitude(-6.195139).setLongitude(106.820826)))
// Provide the number of passengers if available.
.setNumberOfPassengers(2)
// Provide the drop-off point if available.
.setDropoffPoint(
TerminalLocation.newBuilder().setPoint(
LatLng.newBuilder().setLatitude(-6.1275).setLongitude(106.6537)))
.build();
CreateTripRequest createTripRequest =
CreateTripRequest.newBuilder() // no need for the header
.setParent(parent)
.setTripId("tid-1f97") // Trip ID assigned by the Provider
.setTrip(trip) // Initial state
.build();
// Error handling
// If Fleet Engine does not have trip with that id and the credentials of the
// requestor pass, the service creates the trip successfully.
try {
Trip createdTrip =
tripService.createTrip(createTripRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case ALREADY_EXISTS:
break;
case PERMISSION_DENIED:
break;
}
return;
}
Seyahat Oluşturma için Google Cloud platform günlükleri
Bir
CreateTrip
uç noktasına çağrı alınır. Günlük girişi
CreateTrip
isteğindeki değerlerle ilgili bilgiler. Arama
başarılı olursa döndürülen Trip
ile ilgili bilgileri de içerir.
NASIL YAPILIR?: Gezi güncelleme
Gezi varlığı, hizmet tarafından izlemeyi etkinleştiren ve
ve üçüncü tarafın
Tüketici SDK'sı. Özellikleri güncellemek için UpdateTripRequest
işlevini kullanın.
mesajını alırsınız. Bu işlem, Seyahat alanlarını isteğin field_mask
doğrultusunda günceller.
UpdateTripRequest konusuna bakın.
Araç Paylaşımı Sağlayıcısı, aşağıdaki özelliklerin güncellenmesinden sorumludur:
- Gezi durumu.
- Araç kimliği. Oluşturulma sırasında veya aracı bir araçla eşleştirdikten sonra hayal edin.
- Teslim alma, bırakma veya ara noktalarla ilgili değişiklikler.
Fleet Engine, Sürücü SDK'sı veya Tüketici SDK'sı aracılığıyla yolculuk paylaşımı özelliği:
- Rotalar
- TVS
- Kalan mesafe
- Araç konumu
- Kalan ara noktalar
Trip
RPC'deki bölümüne bakın veya
REST'te Resource.Trip
.
Seyahat Güncellemeleri için Google Cloud platform günlükleri
Bir
UpdateTrip
uç noktasına çağrı alınır. Günlük girişi
UpdateTrip
isteğindeki değerlerle ilgili bilgiler. Arama başarılı olursa
ayrıca, döndürülen Trip
ile ilgili bilgileri de içerir.
Nasıl yapılır? Gezi arama
Fleet Engine, gezi aramayı destekler. Daha önce de belirtildiği gibi, Gezi
yedi gün sonra otomatik olarak silinir. Dolayısıyla SearchTrips
tüm Seyahat geçmişinin eksiksiz bir şekilde gösterilmesini sağlar.
SearchTrips
esnek bir API olsa da aşağıdaki listede iki kullanım alanı sunulmuştur.
Bir Aracın Aktif Seyahatlerini Belirleme -- Sağlayıcı, bir aracın o anda aktif olan gezileri belirleyebilir.
SearchTripsRequest
içinde,vehicle_id
, değerlendirilen araca veactive_trips_only
olarak ayarlandıtrue
olarak ayarlanmalıdır.Sağlayıcı ile Filo Motoru Durumunu Uzlaştırma -- Sağlayıcı,
SearchTrips
ile Fleet Engine'in Seyahat durumu durumunun eşleştiğinden emin olun. Bu, özellikle TripStatus için önemlidir. Bir seyahatin durumu değeriCOMPLETE
veyaCANCELED
olarak doğru şekilde ayarlanmadıysa AraçSearchVehicles
tarafından dahil edilmez.
SearchTrips
öğesini bu şekilde kullanmak için vehicle_id
alanını boş bırakıp active_trips_only
olarak ayarlayın
true
olarak ve minimum_staleness
değerini çoğu seyahat süresinden daha uzun bir süreye ayarlayın.
Örneğin, bir saat değerini kullanabilirsiniz. Sonuçlar arasında
TAMAMLANDI veya İPTAL EDİLDİ ve bir saatten uzun süredir güncellenmedi. Sağlayıcı
bu Seyahatleri inceleyerek, Fleet Engine'deki durumlarının
düzgün bir şekilde güncellendi.
Sorun giderme
DEADLINE_EXCEEDED
hatası durumunda Fleet Engine'in durumu:
bilinmiyor. Sağlayıcı CreateTrip
işlemini tekrar yapmalıdır. Bu durumda,
201 (CREATED) veya 409 (CONFLICT). İkinci durumda ise önceki istek başarılı oldu.
DEADLINE_EXCEEDED
tarihinden önce. Daha fazla bilgi için Consumer API kılavuzlarına göz atın.
Seyahat hatalarını ele alma hakkında: Android
veya iOS'ten seçin.
Ortak araba kullanımı desteği
TripType.SHARED
destekleyen bir araca birden fazla SHARED
seyahati atayabilirsiniz.
Şuna atanan tüm Seyahatler için geçilmeyen tüm ara noktaların sırasını belirtmeniz gerekir:
Bu paylaşılan yolculuktaki Araç (Trip.vehicle_waypoints
)
Paylaşılan seyahat için vehicle_id
(CreateTrip
veya UpdateTrip
isteğinde).
RPC için vehicle_waypoints
konusuna bakın
veya REST için vehicleWaypoints
.
Birden çok hedef desteği
Ara hedef belirleme
intermediateDestinations
alanı ve intermediateDestinationIndex
alanı
Yolculuk (RPC | REST)
birlikte kullanılması gerekir.
Ara hedefi güncelleyin
Ara hedefleri UpdateTrip
üzerinden güncelleyebilirsiniz. Güncellenirken
ara hedeflerin tam bir listesini sağlamalısınız,
yalnızca yeni gelenleri değil, ziyaret edilenleri
herhangi bir değişiklik yapılmaması gerekir.
intermediateDestinationIndex
,
yeni eklenen/değiştirilmiş ara hedef, yeni/güncellenen ara hedef
hedef, Aracın waypoints
veya Seyahatin remainingWaypoints
öğesine eklenmez.
Bunun nedeni, intermediateDestinationIndex
öncesindeki tüm ara hedeflerdir
önceden ziyaret edilmiş gibi ele alınır.
Gezi durumu değişiklikleri
(RPC | REST) içindeki intermediateDestinationsVersion
alanı
Fleet Engine'e gönderilen Seyahat durumu güncelleme isteğinde,
bir ara hedef geçildi. Hedeflenen ara hedef
intermediateDestinationIndex
alanı aracılığıyla belirtilir.
tripStatus
(RPC | REST), ENROUTE_TO_INTERMEDIATE_VAR olduğunda,
[0..N-1] aracın geçeceği ara hedefi belirtir.
tripStatus
ARRIVED_AT_INTERMEDIATE_ROAS olduğunda,
[0..N-1] aracın hangi ara hedefte olduğunu gösterir.
Örnek
Aşağıdaki kod örneğinde, yol boyunca bir gezi durumunun nasıl güncelleneceği ilk ara hedefine ulaşılırsa, o hedef için bir dönüşüm hacmi ve seyahat, başlangıç noktasından geçtiğinden emin olun.
Java
static final String PROJECT_ID = "project-id";
static final String TRIP_ID = "multi-destination-trip-A";
String tripName = "providers/" + PROJECT_ID + "/trips/" + TRIP_ID;
Trip trip = …; // Fetch trip object from FleetEngine or your storage.
TripServiceBlockingStub tripService = TripService.newBlockingStub(channel);
// Trip settings to update.
Trip trip = Trip.newBuilder()
// Trip status cannot go back to a previous status once it is passed
.setTripStatus(TripStatus.ENROUTE_TO_INTERMEDIATE_DESTINATION)
// Enrouting to the first intermediate destination.
.setIntermediateDestinationIndex(0)
// intermediate_destinations_version MUST be provided to ensure you
// have the same picture on intermediate destinations list as FleetEngine has.
.setIntermediateDestinationsVersion(
trip.getIntermediateDestinationsVersion())
.build();
// Trip update request
UpdateTripRequest updateTripRequest =
UpdateTripRequest.newBuilder()
.setName(tripName)
.setTrip(trip)
.setUpdateMask(
FieldMask.newBuilder()
.addPaths("trip_status")
.addPaths("intermediate_destination_index")
// intermediate_destinations_version must not be in the
// update mask.
.build())
.build();
// Error handling
try {
Trip updatedTrip = tripService.updateTrip(updateTripRequest);
} catch (StatusRuntimeException e) {
Status s = e.getStatus();
switch (s.getCode()) {
case NOT_FOUND: // Trip does not exist.
break;
case FAILED_PRECONDITION: // The given trip status is invalid, or the
// intermediate_destinations_version
// doesn’t match FleetEngine’s.
break;
case PERMISSION_DENIED:
break;
}
return;
}
NASIL YAPILIR?: Fleet Engine API'sinden bildirim mesajlarına abone olma
Fleet Engine API, Google Cloud Pub/Sub'ı kullanır Google Cloud'un tüketici sürümü tarafından oluşturulan konuyla ilgili bildirimler yayınlamak Proje. Google Cloud'unuzda Fleet Engine için Pub/Sub varsayılan olarak etkin değil belirler. Pub/Sub'ı etkinleştirmek için lütfen bir destek kaydı oluşturun veya Müşteri Mühendisinizle iletişime geçin.
Cloud projenizde konu oluşturmak için bu talimatları uygulayın. Konu kimliği "fleet_engine_notifications" olmalıdır.
Konu, Fleet Engine'i çağıran Cloud projesinde oluşturulmalıdır. API'ler.
Konu oluşturulduktan sonra Fleet Engine API'ye izin vermeniz gerekir
konusunda yayınlama izni olur. Bunu yapmak için, ilgilendiğiniz konuyu
az önce oluşturuldu ve yeni bir izin ekleyin. İzin düzenleyiciyi açmak için BİLGİ PANELİNİ GÖSTER'i tıklamanız gerekebilir.
Ana hesap, geo-fleet-engine@system.gserviceaccount.com
olmalıdır
ve rol Pub/Sub publisher
olmalıdır.
Bildirimlere abone olmak amacıyla Cloud Projenizi ayarlamak için bu talimatları uygulayın
Fleet Engine API, her bildirimi iki farklı veride yayınlar
biçimleri, protobuf
ve
json
. Her bildirimin veri biçimi şurada belirtilmiştir:
PubsubMessage özellikleri
data_format
olarak anahtar ve protobuf
veya json
olarak değer girin.
Bildirim şeması:
Protokol Arabelleği
// A batch of notifications that is published by the Fleet Engine service using
// Cloud Pub/Sub in a single PubsubMessage.
message BatchNotification {
// Required. At least one notification must exist.
// List of notifications containing information related to changes in
// Fleet Engine data.
repeated Notification notifications = 1;
}
// A notification related to changes in Fleet Engine data.
// The data provides additional information specific to the type of the
// notification.
message Notification {
// Required. At least one type must exist.
// Type of notification.
oneof type {
// Notification related to changes in vehicle data.
VehicleNotification vehicle_notification = 1;
}
}
// Notification sent when a new vehicle was created.
message CreateVehicleNotification {
// Required.
// Vehicle must contain all fields that were set when it was created.
Vehicle vehicle = 1;
}
// Notification sent when an existing vehicle is updated.
message UpdateVehicleNotification {
// Required.
// Vehicle must only contain name and fields that are present in the
// field_mask field below.
Vehicle vehicle = 1;
// Required.
// Contains vehicle field paths that were specifically requested
// by the Provider.
google.protobuf.FieldMask field_mask = 2;
}
// Notification related to changes in vehicle data.
message VehicleNotification {
// Required. At least one type must be set.
// Type of notification.
oneof type {
// Notification sent when a new vehicle was created.
CreateVehicleNotification create_notification = 1;
// Notification sent when an existing vehicle is updated.
UpdateVehicleNotification update_notification = 2;
}
}
JSON
BatchNotification: {
"description": "A batch of notifications that is published by the Fleet Engine service using Cloud Pub/Sub in a single PubsubMessage.",
"type": "object",
"required": ["notifications"],
"properties": {
"notifications": {
"description": "At least one notification must exist. List of notifications containing information related to changes in Fleet Engine data.",
"type": "Notification[]"
}
}
}
Notification: {
"description": "A notification related to changes in Fleet Engine data. The data provides additional information specific to the type of the notification.",
"type": "object",
"properties": {
"vehicleNotification": {
"description": "Notification related to changes in vehicle data.",
"type": "VehicleNotification"
}
}
}
VehicleNotification: {
"description": "Notification related to changes in vehicle data.",
"type": "object",
"properties": {
"createNotification": {
"description": "Notification sent when a new vehicle was created.",
"type": "CreateVehicleNotification"
},
"updateNotification": {
"description": "Notification sent when an existing vehicle is updated.",
"type": "UpdateVehicleNotification"
}
}
}
CreateVehicleNotification: {
"description": "Notification sent when a new vehicle was created.",
"type": "object",
"required": ["vehicle"],
"properties": {
"vehicle": {
"description": "Vehicle must contain all fields that were set when it was created.",
"type": "Vehicle"
}
}
}
UpdateVehicleNotification: {
"description": "Notification sent when an existing vehicle is updated.",
"type": "object",
"required": ["vehicle", "fieldMask"],
"properties": {
"vehicle": {
"description": "Vehicle must only contain name and fields that are present in the fieldMask field below.",
"type": "Vehicle"
},
"fieldMask": {
"description": "Contains vehicle field paths that were specifically requested by the Provider.",
"type": "FieldMask"
}
}
}