Saat Anda mengikuti perjalanan, aplikasi konsumen akan menampilkan lokasi kendaraan yang sesuai kepada konsumen. Untuk melakukannya, aplikasi Anda harus mulai mengikuti perjalanan, memperbarui progres perjalanan, dan berhenti mengikuti perjalanan setelah selesai.
Dokumen ini membahas cara kerja proses tersebut.
Sebelum memulai
Pastikan Anda telah menyiapkan hal berikut:
Layanan backend untuk aplikasi konsumen Anda sudah tersedia dan layanan Anda untuk mencocokkan konsumen dengan kendaraan sudah beroperasi.
Anda telah menyiapkan peta untuk aplikasi Anda.
Mulai mengikuti perjalanan
Saat server backend Anda mencocokkan konsumen dengan kendaraan, gunakan
JourneySharingSession
untuk mulai mengikuti perjalanan.
Kode contoh berikut menunjukkan cara untuk mulai mengikuti perjalanan setelah tampilan dimuat.
Java
public class MainActivity extends AppCompatActivity
implements ConsumerViewModel.JourneySharingListener {
// Class implementation
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Create a TripModel instance to listen for updates to the trip specified by this trip name.
String tripName = ...;
TripModelManager tripModelManager = consumerApi.getTripModelManager();
TripModel tripModel = tripModelManager.getTripModel(tripName);
// Create a JourneySharingSession instance based on the TripModel.
JourneySharingSession session = JourneySharingSession.createInstance(tripModel);
// Add the JourneySharingSession instance on the map for updating the UI.
consumerController.showSession(session);
// Register for trip update events.
tripModel.registerTripCallback(new TripModelCallback() {
@Override
public void onTripETAToNextWaypointUpdated(
TripInfo tripInfo, @Nullable Long timestampMillis) {
// ...
}
@Override
public void onTripActiveRouteRemainingDistanceUpdated(
TripInfo tripInfo, @Nullable Integer distanceMeters) {
// ...
}
// ...
});
}
@Override
protected void onDestroy() {
super.onDestroy();
if (journeySharingSession != null) {
journeySharingSession.stop();
}
}
}
Kotlin
class SampleAppActivity : AppCompatActivity(), ConsumerViewModel.JourneySharingListener {
// Class implementation
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// Create a TripModel instance to listen for updates to the trip specified by this trip name.
val tripName = "tripName"
val tripModelManager = consumerApi.getTripModelManager()
val tripModel = tripModelManager.getTripModel(tripName)
// Create a JourneySharingSession instance based on the TripModel.
val session = JourneySharingSession.createInstance(tripModel)
// Add the JourneySharingSession instance on the map for updating the UI.
consumerController.showSession(session)
// Register for trip update events.
tripModel.registerTripCallback(
object : TripModelCallback() {
override fun onTripETAToNextWaypointUpdated(
tripInfo: TripInfo,
timestampMillis: Long?,
) {
// ...
}
override fun onTripActiveRouteRemainingDistanceUpdated(
tripInfo: TripInfo,
distanceMeters: Int?,
) {
// ...
}
// ...
})
}
override fun onDestroy() {
super.onDestroy()
journeySharingSession?.stop()
}
}
Perbarui progres perjalanan
Untuk memperbarui detail progres perjalanan, seperti jarak yang harus ditempuh kendaraan sebelum kedatangan dan perkiraan waktu kedatangan, aplikasi Anda harus mendaftarkan dan mengonfigurasi pemroses seperti yang ditunjukkan pada contoh berikut.
Daftarkan pemroses di objek
TripModel
.Java
// Create a TripModel instance for listening to updates to the trip specified by this trip name. String tripName = ...; TripModelManager tripModelManager = consumerApi.getTripModelManager(); TripModel tripModel = tripModelManager.getTripModel(tripName); // Create a JourneySharingSession instance based on the TripModel. JourneySharingSession session = JourneySharingSession.createInstance(tripModel); // Add the JourneySharingSession instance on the map for updating the UI. consumerController.showSession(session); // Register for trip update events. tripModel.registerTripCallback(new TripModelCallback() { @Override public void onTripETAToNextWaypointUpdated( TripInfo tripInfo, @Nullable Long timestampMillis) { // ... } @Override public void onTripActiveRouteRemainingDistanceUpdated( TripInfo tripInfo, @Nullable Integer distanceMeters) { // ... } // ... });
Kotlin
// Create a TripModel instance for listening to updates to the trip specified by this trip name. val tripName = "tripName" val tripModelManager = consumerApi.getTripModelManager() val tripModel = tripModelManager.getTripModel(tripName) // Create a JourneySharingSession instance based on the TripModel. val session = JourneySharingSession.createInstance(tripModel) // Add the JourneySharingSession instance on the map for updating the UI. consumerController.showSession(session) // Register for trip update events. tripModel.registerTripCallback( object : TripModelCallback() { override fun onTripETAToNextWaypointUpdated( tripInfo: TripInfo, timestampMillis: Long?, ) { // ... } override fun onTripActiveRouteRemainingDistanceUpdated( tripInfo: TripInfo, distanceMeters: Int?, ) { // ... } // ... })
Konfigurasi pemroses untuk perjalanan Anda menggunakan
TripModelOptions
.Java
// Set refresh interval to 2 seconds. TripModelOptions tripOptions = TripModelOptions.builder().setRefreshIntervalMillis(2000).build(); tripModel.setTripModelOptions(tripOptions);
Kotlin
// Set refresh interval to 2 seconds. val tripOptions = TripModelOptions.builder().setRefreshIntervalMillis(2000).build() tripModel.setTripModelOptions(tripOptions)
Berhenti mengikuti perjalanan
Pastikan aplikasi Anda berhenti mengikuti perjalanan jika tidak lagi diperlukan, seperti saat perjalanan ditandai SELESAI di backend oleh pengemudi. Menghentikan berbagi perjalanan akan menghindari permintaan jaringan yang tidak perlu ke Fleet Engine dan mencegah kebocoran memori.
Gunakan JourneySharingSession
untuk berhenti mengikuti perjalanan seperti yang ditunjukkan dalam
kode contoh berikut.
Java
public class MainActivity extends AppCompatActivity
implements ConsumerViewModel.JourneySharingListener {
// Class implementation
@Override
protected void onDestroy() {
super.onDestroy();
if (journeySharingSession != null) {
journeySharingSession.stop();
}
}
}
Kotlin
class SampleAppActivity : AppCompatActivity(), ConsumerViewModel.JourneySharingListener {
// Class implementation
override fun onDestroy() {
super.onDestroy()
journeySharingSession?.stop()
}
}
Menangani error perjalanan
Metode onTripRefreshError
menampilkan error yang terjadi selama pemantauan
perjalanan. Pesan error mengikuti standar Error Google Cloud. Untuk mengetahui definisi pesan error yang mendetail dan semua kode error, lihat dokumentasi Error Google Cloud.
Berikut beberapa error umum yang dapat terjadi selama pemantauan perjalanan:
HTTP | PPK | Deskripsi |
---|---|---|
400 | INVALID_ARGUMENT | Klien menentukan nama perjalanan yang tidak valid. Nama perjalanan harus mengikuti format providers/{provider_id}/trips/{trip_id} . provider_id harus berupa ID Project Cloud yang dimiliki oleh penyedia layanan. |
401 | UNAUTHENTICATED | Anda akan menerima error ini jika tidak ada kredensial autentikasi yang valid. Misalnya, jika token JWT ditandatangani tanpa ID perjalanan atau token JWT telah berakhir masa berlakunya. |
403 | PERMISSION_DENIED | Anda menerima error ini jika klien tidak memiliki izin yang memadai (misalnya, pengguna dengan peran konsumen mencoba memanggil updateTrip), jika token JWT tidak valid, atau API tidak diaktifkan untuk project klien. Token JWT mungkin tidak ada atau token ditandatangani dengan ID perjalanan yang tidak cocok dengan ID perjalanan yang diminta. |
429 | RESOURCE_EXHAUSTED | Kuota resource nol atau kapasitas traffic melebihi batas. |
503 | UNAVAILABLE | Layanan tidak tersedia. Biasanya server mati. |
504 | DEADLINE_EXCEEDED | Batas waktu permintaan terlampaui. Error ini hanya terjadi jika pemanggil menetapkan batas waktu yang lebih singkat dari batas waktu default metode (yaitu, batas waktu yang diminta tidak cukup bagi server untuk memproses permintaan) dan permintaan tidak selesai dalam batas waktu. |
Menangani Error Consumer SDK
Consumer SDK mengirimkan error pembaruan perjalanan ke aplikasi konsumen menggunakan mekanisme callback. Parameter callback adalah jenis nilai yang ditampilkan khusus platform (
TripUpdateError
di Android, dan
NSError
di iOS).
Mengekstrak kode status
Error yang diteruskan ke callback biasanya adalah error gRPC, dan Anda juga dapat mengekstrak informasi tambahan darinya dalam bentuk kode status. Untuk mengetahui daftar lengkap kode status, lihat Kode status dan penggunaannya di gRPC.
Java
Anda dapat mengekstrak kode status gRPC yang memberikan detail tentang error
dari TripUpdateError
yang ditampilkan dari onTripUpdateError()
.
// Called when there is a trip update error.
@Override
public void onTripUpdateError(TripInfo tripInfo, TripUpdateError error) {
Status.Code code = error.getStatusCode();
}
Kotlin
Anda dapat mengekstrak kode status gRPC yang memberikan detail tentang error
dari TripUpdateError
yang ditampilkan dari onTripUpdateError()
.
// Called when there is a trip update error.
override fun onTripUpdateError(tripInfo: TripInfo, error: TripUpdateError) {
val code = error.getStatusCode()
}
Menafsirkan kode status
Kode status mencakup dua jenis error: error terkait server dan jaringan, serta error sisi klien.
Error server dan jaringan
Kode status berikut adalah untuk error jaringan atau server, dan Anda tidak perlu mengambil tindakan apa pun untuk mengatasinya. Consumer SDK akan otomatis dipulihkan dari sana.
Kode Status | Deskripsi |
---|---|
ABORTED | Server berhenti mengirim respons. Hal ini biasanya disebabkan oleh masalah server. |
DIBATALKAN | Server menghentikan respons keluar. Hal ini biasanya
terjadi saat
aplikasi dikirim ke latar belakang, atau saat ada perubahan status di aplikasi Consumer. |
INTERRUPTED | |
DEADLINE_EXCEEDED | Server membutuhkan waktu terlalu lama untuk merespons. |
UNAVAILABLE | Server tidak tersedia. Hal ini biasanya disebabkan oleh masalah jaringan. |
Error klien
Kode status berikut adalah untuk error klien, dan Anda harus mengambil tindakan untuk menyelesaikannya. Consumer SDK terus mencoba me-refresh perjalanan hingga Anda mengakhiri berbagi perjalanan, tetapi tidak akan dipulihkan hingga Anda mengambil tindakan.
Kode Status | Deskripsi |
---|---|
INVALID_ARGUMENT | Aplikasi Konsumen menentukan nama perjalanan yang tidak valid; Nama perjalanan harus
mengikuti format providers/{provider_id}/trips/{trip_id} .
|
NOT_FOUND | Perjalanan tidak pernah dibuat. |
PERMISSION_DENIED | Aplikasi Konsumen tidak memiliki izin yang memadai. Error ini terjadi saat:
|
RESOURCE_EXHAUSTED | Kuota resource nol, atau kecepatan aliran traffic melebihi batas kecepatan. |
TIDAK DIAUTENTIKASI | Permintaan gagal diautentikasi karena token JWT tidak valid. Error ini terjadi saat token JWT ditandatangani tanpa ID perjalanan, atau saat token JWT telah berakhir masa berlakunya. |