Minimum sistem gereksinimleri
Mobil cihaz Android 6.0 sürümünü çalıştırmalıdır (API düzeyi 23) veya üzeri.
Derleme ve bağımlılık yapılandırması
Sürücü SDK'sı 4.99 ve sonraki sürümleri Google Maven deposundan kullanılabilir.
Gradle
build.gradle
dosyanıza aşağıdakileri ekleyin:
repositories {
...
google()
}
Maven
pom.xml
dosyanıza aşağıdakileri ekleyin:
<project>
...
<repositories>
<repository>
<id>google-maven-repository</id>
<url>https://maven.google.com</url>
</repository>
</repositories>
...
</project>
Proje yapılandırması
Sürücü SDK'sını kullanmak için uygulamanızın minSdkVersion
ülkesini hedeflemesi gerekir
23 veya üzeri. Daha fazla bilgi için bkz.
Sürüm Notları.
Sürücü SDK'sı ile oluşturulmuş bir uygulamayı çalıştırmak için Android cihazda Google Play Hizmetleri yüklendi.
Geliştirme projenizi oluşturun
Geliştirme projenizi oluşturmak ve API anahtarı almak için Google Cloud Console'da projeniz için:
Yeni bir Google Cloud Console oluşturun veya mevcut bir projeyi seçin Sürücü SDK'sı ile. Birkaç dakika bekleyin. Google Cloud Console'da görünür olduğundan emin olun.
Demo uygulamayı çalıştırmak için projenizin Haritalar SDK'sına erişimi olmalıdır Android için. Google Cloud Console'da aşağıdakilerden birini seçin: API'ler ve Hizmetler > Kitaplık'ı tıklayın, ardından şunun için Haritalar SDK'sını arayın: Android
Şu seçeneği belirleyerek proje için bir API anahtarı alın: API'ler ve Hizmetler > Kimlik Bilgileri > Kimlik bilgileri oluştur > API anahtarı. API anahtarı alma hakkında daha fazla bilgi için bkz. API anahtarı alın.
Sürücü SDK'sını uygulamanıza ekleyin
Sürücü SDK'sı, Google Maven deposundan edinilebilir. İlgili içeriği oluşturmak için kullanılan deposu, SDK'nın Proje Nesne Modeli (.pom) dosyalarını ve Javadocs'u içerir. Sürücü SDK'sını uygulamanıza eklemek için:
Gradle veya Maven yapılandırmanıza şu bağımlılığı ekleyin: yerine
VERSION_NUMBER
yer tutucusunu Sürücü SDK'sı.Gradle
build.gradle
cihazınıza şunları ekleyin:dependencies { ... implementation 'com.google.android.libraries.mapsplatform.transportation:transportation-driver:[VERSION_NUMBER]' }
Maven
pom.xml
cihazınıza şunları ekleyin:<dependencies> ... <dependency> <groupId>com.google.android.libraries.mapsplatform.transportation.driver</groupId> <artifactId>transportation-driver</artifactId> <version>[VERSION_NUMBER]</version> </dependency> </dependencies>
Sürücü SDK'sı, Navigasyon SDK'sına bağlıdır. Bu bağımlılık Bu şekilde, belirli bir Gezinme SDK'sı sürümü gerekiyorsa o sürümün aşağıdaki gibi derleme yapılandırma dosyasında açıkça tanımlanır, belirtilen kod bloğunun atlanması, projenin her zaman Navigasyon SDK'sının ana sürüm sürümüne sahip olması gerekir. Driver SDK'nın son sürümlerinin ve bu sürümlerin birlikte çalışan Gezinme SDK'sı, yayınlanmadan önce titiz testlerden geçmiştir.
Geliştirme ve sürümünüzün bağımlılık yapılandırmasını düzenleyin uygun şekilde düzenlemenizi sağlar.
Gradle
build.gradle
cihazınıza şunları ekleyin:dependencies { ... implementation 'com.google.android.libraries.navigation:navigation:5.0.0' }
Maven
pom.xml
cihazınıza şunları ekleyin:<dependencies> ... <dependency> <groupId>com.google.android.libraries.navigation</groupId> <artifactId>navigation</artifactId> <version>5.0.0</version> </dependency> </dependencies>
API anahtarını uygulamanıza ekleyin
Driver SDK'sını uygulamanıza ekledikten sonra API anahtarını uygulamanıza ekleyin. Siz geliştirme projenizi oluşturun.
Bu bölümde, daha güvenli olması için API anahtarınızı nasıl depolayacağınız açıklanmaktadır.
veya üçüncü taraf uygulamadır. Sürümünüzde API anahtarınızı kontrol etmemelisiniz
kontrol sistemi. Bu veriler, local.properties
dosyasında depolanmalıdır.
klasörünün herhangi bir bölümünde bulunur. Daha fazla bilgi için
local.properties
dosyası için bkz.
Gradle özellikleri dosyaları.
Bu görevi kolaylaştırmak için Android için Secrets Gradle Plugin. Secrets Gradle eklentisini yüklemek ve güvenli bir şekilde saklamak için bu prosedürü uygulayın. API anahtarınız.
Kök düzeyindeki
build.gradle
dosyanızı açın ve aşağıdaki kodubuildscript
altındadependencies
öğesi.Modern
buildscript { dependencies { // ... classpath "com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.0" } }
Kotlin
buildscript { dependencies { // ... classpath("com.google.android.libraries.mapsplatform.secrets-gradle-plugin:secrets-gradle-plugin:2.0.0") } }
Uygulama düzeyindeki
build.gradle
dosyanızı açın ve aşağıdaki koduplugins
öğesi.Modern
id 'com.google.android.libraries.mapsplatform.secrets-gradle-plugin'
Kotlin
id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin")
Proje düzeyindeki dizinde
local.properties
dosyasını açın ve aşağıdaki kodu kullanabilirsiniz.YOUR_API_KEY
kısmını API anahtarınızla değiştirdiğinizden emin olun.MAPS_API_KEY=YOUR_API_KEY
AndroidManifest.xml
dosyanızdacom.google.android.geo.API_KEY
adresine gidin veandroid:value
özelliğini şu şekilde güncelleyin:<meta-data android:name="com.google.android.geo.API_KEY" android:value="${MAPS_API_KEY}" />
Aşağıdaki örnekte, örnek bir uygulama için eksiksiz bir manifest gösterilmektedir:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.driverapidemo" >
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/_AppTheme" >
<meta-data
android:name="com.google.android.geo.API_KEY"
android:value="${MAPS_API_KEY}" />
<activity android:name=".MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Uygulamanıza gerekli ilişkilendirmeleri dahil edin
Uygulamanızda Sürücü SDK'sını kullanıyorsanız uygulamanızın yasal uyarılarının bir parçası olarak atıf metni ve açık kaynak lisansları bölümüne ekleyin. İlişkilendirmeleri bağımsız bir menü öğesi veya her zaman bir Hakkında menü öğesinin bir bölümüdür.
Lisans bilgileri "third_party_LICENSEs.txt" dosyasında bulunabilir şurada dosyala: arşivden çıkarılan AAR dosyasına dokunun.
https://developers.google.com/android/guides/opensource konusunda daha fazla bilgi edinin.
Bağımlılıklar
Sürücü SDK'sı gRPC'yi sunucuyla iletişim kurduğu anlamına gelir. gRPC'yi önceden getirmezseniz aşağıdaki bağımlılıkların belirtilmesi gerekebilir:
dependencies {
implementation 'io.grpc:grpc-android:1.12.0'
implementation 'io.grpc:grpc-okhttp:1.12.0'
}
Bu bağımlılıklar olmadan Driver SDK, çalışırken hatalarla karşılaşıyorum sunucuyla iletişim kurmaya çalışırken sorun yaşıyor olabilirsiniz.
ProGuard kullanıyorsanız derlemelerinizi optimize etmek için aşağıdaki satırları ProGuard'a eklemeniz gerekebilir: yapılandırma dosyası:
-dontwarn com.google.**
-dontwarn io.grpc.**
-dontwarn okio.**
Desteklenen minimum API düzeyi 23'tür.
SDK'yı başlatma
Şu işlemleri gerçekleştirmek için bir sağlayıcı kimliği (genellikle Google Cloud proje kimliği) gerekir:
DriverContext
nesnesini başlatın. Chrome Tarayıcı'yı kurma hakkında daha fazla
Google Cloud projesi için bkz.
Authentication and Authorization (Kimlik Doğrulama ve Yetkilendirme).
Sürücü SDK'sını kullanmadan önce ilk kullanıma hazırlamanız gerekir gezinme SDK'sı. SDK'yı başlatmak için:
NavigationApi
öğesinden birNavigator
nesnesi alın.NavigationApi.getNavigator( this, // Activity new NavigationApi.NavigatorListener() { @Override public void onNavigatorReady(Navigator navigator) { // Keep a reference to the Navigator (used to configure and start nav) this.navigator = navigator; } } );
Zorunlu alanları doldurarak bir
DriverContext
nesnesi oluşturun.DriverContext driverContext = DriverContext.builder(application) .setProviderId(providerId) .setVehicleId(vehicleId) .setAuthTokenFactory(authTokenFactory) .setNavigator(navigator) .setRoadSnappedLocationProvider( NavigationApi.getRoadSnappedLocationProvider(application)) .build();
*DriverApi
öğesini başlatmak içinDriverContext
nesnesini kullanın.DeliveryDriverApi driverApi = DeliveryDriverApi.createInstance(driverContext);
API nesnesinden
DeliveryVehicleReporter
öğesini alın. (DeliveryVehicleReporter
,NavigationVehicleReporter
süresini uzatır.)DeliveryVehicleReporter vehicleReporter = driverApi.getDeliveryVehicleReporter();
AuthTokenFactory
üzerinde kimlik doğrulanıyor
Sürücü SDK'sı konum güncellemeleri oluşturduğunda
bu güncellemeleri
emin olmaktır. Bu isteklerin kimliğini doğrulamak için
Sürücü SDK'sı, arayan tarafından sağlanan bir kullanıcıya çağrıda bulunur
AuthTokenFactory
örneği.
Fabrika, konumda kimlik doğrulama jetonları oluşturmaktan sorumludur
güncelleme zamanı.
Jetonların tam olarak nasıl oluşturulduğu her geliştiricinin kendi durumuna göre değişir. Ancak, uygulama işlemi için muhtemelen:
- bir HTTPS sunucusundan JSON biçiminde kimlik doğrulama jetonu getirme
- jetonu ayrıştırıp önbelleğe alın
- Süresi dolduğunda jetonu yenile
Fleet Engine sunucusunun beklediği jetonların ayrıntıları için bkz. Yetkilendirme için JSON Web Token (JWT) oluşturma.
Aşağıda AuthTokenFactory
iskelet uygulaması verilmiştir:
class JsonAuthTokenFactory implements AuthTokenFactory {
private String vehicleServiceToken; // initially null
private long expiryTimeMs = 0;
private String vehicleId;
// This method is called on a thread whose only responsibility is to send
// location updates. Blocking is OK, but just know that no location updates
// can occur until this method returns.
@Override
public String getToken(AuthTokenContext authTokenContext) {
String vehicleId = requireNonNull(context.getVehicleId());
if (System.currentTimeMillis() > expiryTimeMs || !vehicleId.equals(this.vehicleId)) {
// The token has expired, go get a new one.
fetchNewToken(vehicleId);
}
return vehicleServiceToken;
}
private void fetchNewToken(String vehicleId) {
String url = "https://yourauthserver.example/token/" + vehicleId;
try (Reader r = new InputStreamReader(new URL(url).openStream())) {
com.google.gson.JsonObject obj
= com.google.gson.JsonParser.parseReader(r).getAsJsonObject();
vehicleServiceToken = obj.get("VehicleServiceToken").getAsString();
expiryTimeMs = obj.get("TokenExpiryMs").getAsLong();
// The expiry time could be an hour from now, but just to try and avoid
// passing expired tokens, we subtract 10 minutes from that time.
expiryTimeMs -= 10 * 60 * 1000;
this.vehicleId = vehicleId;
} catch (IOException e) {
// It's OK to throw exceptions here. The StatusListener you passed to
// create the DriverContext class will be notified and passed along the failed
// update warning.
throw new RuntimeException("Could not get auth token", e);
}
}
}
Bu özel uygulama, bir web sitesini jetonunu, geliştiricinin kimlik doğrulama sunucusundan JSON biçiminde kaydetmesini isteyin. Jeton yeniden kullanılmak üzere kaydedildi. Eski jeton 10 dakika içindeyse jeton yeniden getirilir sona ereceğini unutmayın.
Uygulamanız, arka plan ileti dizisi kullanmak gibi bazı işlemleri farklı yapabilir tıklayın.
AuthTokenFactory
politikasındaki istisnalar, gerçekleşmedikleri sürece geçici olarak kabul edilir
tekrar tekrar. Bir dizi denemeden sonra Sürücü SDK'sı
varsayılır ve güncelleme göndermeyi durdurur.
StatusListener
ile Durum ve Hata Bildirimi
Sürücü SDK'sı
bazı durumlarda bildirimleri tetiklemek için StatusListener
hata, uyarı veya hata ayıklama mesajı gibi çeşitli etkinliklerin meydana gelmesidir. Hatalar şunlar olabilir:
geçici (BACKEND_CONNECTIVITY_ERROR
gibi) veya
konum güncellemelerinin kalıcı olarak durdurulmasına neden olur (ör. VEHICLE_NOT_FOUND
,
Bu bir yapılandırma hatası anlamına gelir).
Aşağıdaki gibi isteğe bağlı bir StatusListener
uygulaması sağlarsınız:
class MyStatusListener implements StatusListener {
/** Called when background status is updated, during actions such as location reporting. */
@Override
public void updateStatus(
StatusLevel statusLevel, StatusCode statusCode, String statusMsg) {
// Status handling stuff goes here.
// StatusLevel may be DEBUG, INFO, WARNING, or ERROR.
// StatusCode may be DEFAULT, UNKNOWN_ERROR, VEHICLE_NOT_FOUND,
// BACKEND_CONNECTIVITY_ERROR, or PERMISSION_DENIED.
}
}
SSL/TLS ile İlgili Notlar
Sürücü SDK'sı uygulaması dahili olarak,
Fleet Engine sunucusuyla güvenli iletişim kurmak için SSL/TLS. Önceki sürümler
(API sürümleri 23 veya
önce) ile iletişim kurmak için SecurityProvider
yaması gerekebilir.
sunucu. Android'de SSL ile çalışma hakkında daha fazla bilgi için bkz.
Güvenlik GMS Sağlayıcısı.
Makalede, güvenlik sağlayıcıya yama uygulamak için kullanılan kod örnekleri de yer almaktadır.
Konum güncellemelerini etkinleştir
Bir *VehicleReporter
örneğiniz olduğunda konum güncellemelerinin etkinleştirilmesi
basittir:
DeliveryVehicleReporter reporter = ...;
reporter.enableLocationTracking();
Konum güncellemeleri mümkünse düzenli aralıklarla gönderilir. Her bir konum güncellemesi, aracın internete bağlı olduğunu da gösterir.
Varsayılan olarak raporlama aralığı 10 saniyedir. Raporlama ayarlarını değiştirebilirsiniz
reporter.setLocationReportingInterval(long, TimeUnit)
ile aralığı. İlgili içeriği oluşturmak için kullanılan
desteklenen minimum güncelleme aralığı 5 saniyedir. Güncelleme sıklığı arttıkça
daha yavaş istek ve hatalara neden olur.
Konum güncellemelerini devre dışı bırak
Sürücünün vardiyası bittiğinde, şu numarayı arayarak konum güncellemelerini durdurabilirsiniz:
DeliveryVehicleReporter.disableLocationTracking
Güvenilir model kullanım alanları
Bu bölümde, Driver SDK'sının yaygın kullanım alanlarını uygulamak için nasıl kullanılacağı açıklanmaktadır. güvenilir modeli kullanıyorsanız.
Araç oluştur
Sürücü SDK'sından araç oluşturabilirsiniz.
Araç oluşturmadan önce Delivery Driver API'yi başlatın. Araç kimliği, kullanılan araç ve sağlayıcı kimliğiyle oluşturulmalıdır. . Ardından aracı gösterildiği gibi oluşturun aşağıdaki örnekte:
DeliveryDriverApi api = DeliveryDriverApi.getInstance();
DeliveryVehicleManager vehicleManager = api.getDeliveryVehicleManager();
try {
DeliveryVehicle vehicle = vehicleManager.createVehicle().get();
// Handle CreateVehicleRequest DeliveryVehicle response.
} catch (Exception e) {
// Handle CreateVehicleRequest error.
}
Kargo teslim alma görevi oluşturma
Sürücü SDK'sından kargo teslim alma görevi oluşturabilirsiniz.
Görev oluşturmadan önce şunları yaptığınızdan emin olun: Delivery Driver API'yi başlatın. Görev, Driver SDK'sı sırasında belirtilen sağlayıcı kimliği kullanılarak oluşturulmalıdır. başlatma. Ardından aşağıda gösterildiği gibi kargo teslim alma görevini oluşturun. örneğine bakalım. Görev kimlikleri hakkında bilgi edinmek için Görev kimliği örnekleri başlıklı makaleye bakın.
static final String TASK_ID = "task-8241890"; // Avoid auto-incrementing IDs.
DeliveryDriverApi api = DeliveryDriverApi.getInstance();
DeliveryTaskManager taskManager = api.getDeliveryTaskManager();
CreateDeliveryTaskRequest request = CreateDeliveryTaskRequest.builder(TASK_ID)
.setPlannedWaypoint(Waypoint.builder().setLatLng(-6.195139, 106.820826).build())
.setTaskDurationSeconds(2 * 60)
.setParentId("my-tracking-id")
.setTaskType(TaskType.DELIVERY_PICKUP)
.build();
try {
DeliveryTask task = taskManager.createTask(request).get();
// Handle CreateTaskRequest DeliveryTask response.
} catch (Exception e) {
// Handle CreateTaskRequest error.
}
Gönderim teslimat görevi oluşturma
Sürücü SDK'sından kargo teslimatı görevi oluşturabilirsiniz.
Görev oluşturmadan önce şunları yaptığınızdan emin olun: Delivery Driver API'yi başlatın. Ardından, aşağıdaki örnekte gösterildiği gibi kargo teslimatı görevini oluşturun. Görev kimlikleri hakkında bilgi edinmek için bkz. Görev kimliği örnekleri.
static final String TASK_ID = "task-8241890"; // Avoid auto-incrementing IDs.
DeliveryDriverApi api = DeliveryDriverApi.getInstance();
DeliveryTaskManager taskManager = api.getDeliveryTaskManager();
CreateDeliveryTaskRequest request = CreateDeliveryTaskRequest.builder(TASK_ID)
.setPlannedWaypoint(Waypoint.builder().setLatLng(-6.195139, 106.820826).build())
.setTaskDurationSeconds(2 * 60)
.setParentId("my-tracking-id")
.setTaskType(TaskType.DELIVERY_DELIVERY)
.build();
try {
DeliveryTask task = taskManager.createTask(request).get();
// Handle CreateTaskRequest DeliveryTask response.
} catch (Exception e) {
// Handle CreateTaskRequest error.
}
Planlanan kullanım dışı kalma
Mevcut olmadığını gösteren bir görev oluşturabilirsiniz (örneğin, sürücü için veya araçta yakıt doldurma) Sürücü SDK'sından kaldırın. Planlanmış bir hizmet dışı kalma durumu görev bir izleme kimliği içermemelidir. İsterseniz bir konum da belirtebilirsiniz.
Görev oluşturmadan önce şunları yaptığınızdan emin olun: Delivery Driver API'yi başlatın. Ardından, aşağıdaki örnekte gösterildiği şekilde "kullanmama" görevini oluşturun. Görev kimlikleri hakkında bilgi edinmek için bkz. Görev kimliği örnekleri.
static final String TASK_ID = "task-8241890"; // Avoid auto-incrementing IDs.
DeliveryDriverApi api = DeliveryDriverApi.getInstance();
DeliveryTaskManager taskManager = api.getDeliveryTaskManager();
CreateDeliveryTaskRequest request = CreateDeliveryTaskRequest.builder(TASK_ID)
.setTaskDurationSeconds(2 * 60) // Duration or location (or both) must be provided for a BREAK task.
.setTaskType(TaskType.UNAVAILABLE)
.build();
try {
DeliveryTask task = taskManager.createTask(request).get();
// Handle CreateTaskRequest DeliveryTask response.
} catch (Exception e) {
// Handle CreateTaskRequest error.
}
Planlanan aktarmalar
Sürücü SDK'sından planlanmış bir durdurma görevi oluşturabilirsiniz. Planlanmış durdurma görevi bir izleme kimliği içermeyebilir.
Görev oluşturmadan önce şunları yaptığınızdan emin olun: Delivery Driver API'yi başlatın. Ardından, aşağıdaki örnekte gösterildiği gibi, planlanan durdurma görevini oluşturun. Görev kimlikleri hakkında bilgi edinmek için bkz. Görev kimliği örnekleri.
static final String TASK_ID = "task-8241890"; // Avoid auto-incrementing IDs.
DeliveryDriverApi api = DeliveryDriverApi.getInstance();
DeliveryTaskManager taskManager = api.getDeliveryTaskManager();
CreateDeliveryTaskRequest request = CreateDeliveryTaskRequest.builder(TASK_ID)
.setPlannedWaypoint(Waypoint.builder().setLatLng(-6.195139, 106.820826).build())
.setTaskDurationSeconds(2 * 60)
.setTaskType(TaskType.DELIVERY_SCHEDULED_STOP)
.build();
try {
DeliveryTask task = taskManager.createTask(request).get();
// Handle CreateTaskRequest DeliveryTask response.
} catch (Exception e) {
// Handle CreateTaskRequest error.
}
Görev sıralamasını güncelleyin
Bir araca atanan görevlerin yürütülme sırasını şuradan güncelleyebilirsiniz: Sürücü SDK'sı.
Görev sıralaması güncellendiğinde, görevde olmayanlar da araca atanır bir araca atanmış olabilir. Ayrıca, önceden yapılmış görevleri de bir araca atandı ve güncellenen sıralamanın dışında bırakıldı. Bir daha önce başka bir araca atanmışsa farklı bir araca hata oluşturur. Yeni araca görev atamadan önce yeni bir görev oluşturabilirsiniz.
Görev sıralamasını istediğiniz zaman güncelleyebilirsiniz.
Bir araç için görev sıralamasını güncellemeden önce aracın ve aracın görev Fleet Engine'de zaten oluşturuldu. Sonra da görev sıralamasını güncelleyin araç için aşağıdaki örnekte gösterildiği gibi.
DeliveryDriverApi api = DeliveryDriverApi.getInstance();
DeliveryVehicleReporter reporter = api.getDeliveryVehicleReporter();
try {
List<VehicleStop> stops = reporter.setVehicleStops(
ImmutableList.of(
VehicleStop.builder()
.setVehicleStopState(VehicleStopState.ARRIVED)
.setWaypoint(Waypoint.builder().setLatLng(37.1749, 122.412).build())
.setTasks(ImmutableList.of(task1)) // Previously created DeliveryTask in Fleet Engine.
.build(),
VehicleStop.builder()
.setVehicleStopState(VehicleStopState.NEW) // The current vehicle stop.
.setWaypoint(Waypoint.builder().setLatLng(37.7749, 122.4194).build())
.setTasks(ImmutableList.of(task2)) // Previously created DeliveryTask in Fleet Engine.
.build(),
VehicleStop.builder()
.setVehicleStopState(VehicleStopState.NEW)
.setWaypoint(Waypoint.builder().setLatLng(37.3382, 121.8863).build())
.setTasks(ImmutableList.of(task3, task4)) // Previously created DeliveryTasks in Fleet Engine.
.build())).get();
// Successfully updated vehicle stops in Fleet Engine. Returns the successfully set VehicleStops.
} catch (Exception e) {
// Failed to update vehicle stops in Fleet Engine. Setting VehicleStops must be attempted again after resolving
// errors.
}
Güncellemeyi engelleyebilecek bir istisna oluşabilir
dahili durumuna getirir. Bu durumda, sorunu çözün ve ardından
Arama başarılı olana kadar setVehicleStops
adlı kişiyi tekrar arayın.
Olası sorunlar arasında şunlar yer alabilir:
Belirtilen VehicleStops geçerli bir kalıp izlemiyor. Yalnızca ilk VehicleStop, VehicleStopState'ten herhangi birinde olabilir: NEW, ENROUTE veya ARRIVED. Mevcut duraktan sonraki VehicleStop'lar NEW VehicleStopState içinde olmalıdır.
Görevler mevcut değil veya farklı bir araca ait.
Araç mevcut değil.
Araç sonraki durakta
Fleet Engine, bir araç duraktan ayrıldığında ve durduğunda bilgilendirilmelidir. gezinme işlemini başlatır. Fleet Engine'e, Sürücü SDK'sı üzerinden bildirim gönderebilirsiniz.
Filo Motoru'na bir aracın durmadan kalktığını bildirmeden önce Araç durakları oluşturulup ayarlandı. Ardından, Fleet Engine'e aracın kalkışına göre değişiklik gösterir.
DeliveryDriverApi api = DeliveryDriverApi.getInstance();
DeliveryVehicleReporter reporter = api.getDeliveryVehicleReporter();
reporter.enableLocationTracking(); // Location tracking must be enabled.
// Create Vehicle, VehicleStops, and DeliveryTasks.
// Set VehicleStops on Vehicle.
navigator.setDestination(vehicleStop.getWaypoint());
try {
List<VehicleStop> updatedStops = reporter.enrouteToNextStop().get();
// Successfully updated vehicle stops in Fleet Engine. Returns the set VehicleStops, with the first
// VehicleStop updated to ENROUTE state.
} catch (Exception e) {
// Failed to update vehicle stops in Fleet Engine. Updating VehicleStops must be attempted again
// after resolving errors.
}
Driver SDK'sının
dahili durum. Böyle bir durumda sorunu çözüp telefon edin.
İşlem başarılı olana kadar enrouteToNextStop
tekrar deneyin.
Olası sorunlar arasında şunlar yer alabilir:
- Driver SDK'sında ayarlanmış kalan
VehicleStops
yok.
Araç durağa geldiğinde
Bir araç durağa geldiğinde Fleet Engine'e bilgi verilmelidir. Şunları yapabilirsiniz: Sürücü SDK'sından Fleet Engine'e bildirim gönderir.
Fleet Engine'e bir aracın durağa geldiğini bildirmeden önce araç durağı ayarlandı. Ardından Fleet Engine'e aracın vardığını bildir aşağıdaki örnekte gösterildiği gibi durakta.
DeliveryDriverApi api = DeliveryDriverApi.getInstance();
DeliveryVehicleReporter reporter = api.getDeliveryVehicleReporter();
reporter.enableLocationTracking(); // Location tracking must be enabled.
// Create Vehicle, VehicleStops, and DeliveryTasks.
// Set VehicleStops on Vehicle.
// Mark ENROUTE to VehicleStop and start guidance using Navigator.
try {
List<VehicleStop> updatedStopsArrived = reporter.arrivedAtStop().get();
// Successfully updated vehicle stops in Fleet Engine. Returns the set VehicleStops, with the first
// VehicleStop updated to ARRIVED state.
navigator.clearDestinations();
} catch (Exception e) {
// Failed to update vehicle stops in Fleet Engine. Updating VehicleStops must be attempted again
// after resolving errors.
}
Driver SDK'sının dahili
durumu. Böyle bir durumda sorunu çözüp arrivedAtStop
numaralı telefonu tekrar arayın.
o kadar iyi olur.
Olası sorunlar şunları içerebilir:
- Driver SDK'sında ayarlanmış kalan
VehicleStops
yok.
Araç durma işlemini tamamlar
Bir araç durma işlemini tamamladığında Fleet Engine'e bildirimde bulunmanız gerekir. Bu bildirim durmasıyla ilişkili tüm görevlerin KAPALI durumuna ayarlanmasına neden olur. Şunları yapabilirsiniz: Sürücü SDK'sından Fleet Engine'e bildirim gönderir.
Filo Motoru'na, aracın aşağıda gösterildiği gibi Araç Durdurma işlemini tamamladığını bildirin aşağıdaki örneğe bakın.
DeliveryDriverApi api = DeliveryDriverApi.getInstance();
DeliveryVehicleReporter reporter = api.getDeliveryVehicleReporter();
reporter.enableLocationTracking(); // Location tracking must be enabled.
// After completing the tasks at the VehicleStop, remove it from the
// the current list of VehicleStops.
try {
List<VehicleStop> updatedStopsCompleted = reporter.completedStop().get();
// Successfully updated vehicle stops in Fleet Engine. All tasks on the completed stop are set to CLOSED.
// Returns the set VehicleStops, with the completed VehicleStop removed from the remaining list.
} catch (Exception e) {
// Failed to update vehicle stops in Fleet Engine. Updating VehicleStops must be attempted again
// after resolving errors.
}
Driver SDK'sının dahili
durumu. Böyle bir durumda sorunu çözüp completedStop
numaralı telefonu tekrar arayın.
o kadar iyi olur.
Olası sorunlar arasında şunlar yer alabilir:
- Driver SDK'sında ayarlanmış kalan
VehicleStops
yok.
Görevi kapatma
Bir araca atanmış bir görevi kapatmak için Fleet Engine'e bildirimde bulunun aracın görevin gerçekleştiği durağı tamamladığını, veya araç durakları listesinden kaldırın. Bunu yapmak için, geriye kalan araç daha az görev sıralamasını güncelleme.
Bir göreve henüz bir araç atanmamışsa ve kapatılması gerekiyorsa görev için KAPALI duruma getirir. Ancak KAPALI bir görevi yeniden açamazsınız.
Bir görevin kapatılması, başarılı veya başarısız olduğu anlamına gelmez. Bu, görevin devam eden bir kullanıcı olarak kabul edilmez. Sevkiyat takibi için teslimat sonucunun gösterilebilmesi için görevin asıl sonucunu belirtme.
Sürücü SDK'sını kullanabilmek için bir araca görev atanmalıdır tıklayın. Bir araca atanmış görevi kapatmak için bildirim gönder Filo Motoru, aracın görevin gerçekleştiği yerde durmayı tamamladığını gösterir.
Alternatif olarak aracın görev sıralamasını güncelleyebilirsiniz atamayı seçin ve daha sonra görevi durur.
Görevin sonucunu ve sonucun yerini belirleyin
Bir görevin kapatılması, başarılı veya başarısız olduğu anlamına gelmez. Bu, görevin devam eden bir kullanıcı olarak kabul edilmez. Sevkiyat takibi için teslimat sonucunun gösterilebilmesi için görevin asıl sonucunu belirtmeli ve olmasını şart koşuyoruz. Ayarlandıktan sonra net bir şekilde tanımlamalısınız. Ancak görevlerin sonuç zamanını ve görev sonucu konumunu değiştirebilirsiniz. zaman alır.
KAPALI durumdaki görevlerin sonuçları BAŞARILI veya BAŞARISIZ. Fleet Engine, yalnızca şu durumdaki teslimat görevlerini ücretlendirir: BAŞARILI.
Fleet Engine, bir görevin sonucunu işaretlerken, doğrulama için görev sonucunun bilinen son konumuyla birlikte gösterilir. Bu inceleyeceğiz.
Aşağıdaki örnekte, görev sonucunu belirlemek için Driver SDK'sının nasıl kullanılacağı gösterilmektedir ve zaman damgası. Sürücü SDK'sını kullanarak görev sonucu konumunu ayarlayamazsınız.
static final String TASK_ID = "task-8241890";
DeliveryDriverApi api = DeliveryDriverApi.getInstance();
DeliveryTaskManager taskManager = api.getDeliveryTaskManager();
// Updating an existing DeliveryTask which is already CLOSED. Manually
// setting TaskOutcomeLocation with Driver SDK is not supported at this time.
UpdateDeliveryTaskRequest req = UpdateDeliveryTaskRequest.builder(TASK_ID)
.setTaskOutcome(TaskOutcome.SUCCEEDED)
.setTaskOutcomeTimestamp(now()) // Timestamp in milliseconds.
.build();
try {
DeliveryTask updatedTask = taskManager.updateTask(req);
// Handle UpdateTaskRequest DeliveryTask response.
} catch (Exception e) {
// Handle UpdateTaskRequest error.
}
Araç arayın
Sürücü SDK'sından araç arayabilirsiniz. Bir aracı aramadan önce bütçeyi Delivery Driver API'yi başlatın. Ardından, aracı aşağıdaki örnekte gösterildiği gibi arayabilirsiniz.
DeliveryDriverApi api = DeliveryDriverApi.getInstance();
DeliveryVehicleManager vehicleManager = api.getDeliveryVehicleManager();
try {
DeliveryVehicle vehicle = vehicleManager.getVehicle().get();
// Handle GetVehicleRequest DeliveryVehicle response.
} catch (Exception e) {
// Handle GetVehicleRequest error.
}
DeliveryVehicleManager
yalnızca DeliveryVehicle
öğesini arayabilir.
Delivery Driver API başlatılırken sağlanan araç kimliği için geçerlidir.