Lorsque vous suivez un trajet, votre application grand public affiche la position véhicule approprié pour le consommateur. Pour ce faire, votre application doit démarrer après un trajet, mettre à jour la progression et arrêter de suivre un trajet lorsqu'il terminé.
Ce document décrit le fonctionnement de ce processus.
Avant de commencer
Assurez-vous d'avoir configuré les éléments suivants:
Les services de backend de votre application grand public sont en place et vos services de mise en correspondance des consommateurs avec des véhicules est opérationnelle.
Vous avez configuré une carte pour votre application.
Commencer à suivre un trajet
Lorsque votre serveur backend met en correspondance un consommateur avec un véhicule, utilisez JourneySharingSession
pour commencer à suivre le trajet à l'aide du partage de trajet.
L'exemple de code suivant montre comment démarrer le partage de parcours après la chargements de vues.
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()
}
}
Mettre à jour la progression
Pour mettre à jour les détails de la progression du trajet, tels que la distance à parcourir avant l'arrivée et l'heure d'arrivée estimée, votre application doit enregistrer et configurer un écouteur, comme illustré dans les exemples suivants.
Enregistrez un écouteur sur un objet
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?, ) { // ... } // ... })
Configurez l'écouteur pour votre trajet à l'aide de
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)
Arrêter de suivre un trajet
Assurez-vous que votre application s'arrête après un trajet lorsqu'elle n'est plus nécessaire, par exemple comme lorsque le trajet est marqué comme TERMINÉ par le conducteur en backend. Arrêter le partage de trajets évite les requêtes réseau inutiles envoyées à Fleet Engine et empêche les fuites de mémoire.
Utilisez JourneySharingSession
pour arrêter de suivre le trajet, comme indiqué dans les
l'exemple de code suivant.
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()
}
}
Gérer les erreurs de trajet
La méthode onTripRefreshError
signale les erreurs qui se produisent pendant le trajet
la surveillance. Les messages d'erreur respectent la norme Google Cloud. Pour obtenir des définitions détaillées des messages d'erreur et de tous les codes d'erreur, consultez la documentation sur les erreurs Google Cloud.
Voici quelques erreurs courantes qui peuvent se produire lors de la surveillance des trajets :
HTTP | RPC | Description |
---|---|---|
400 | INVALID_ARGUMENT | Le client a spécifié un nom de trajet non valide. Le nom du trajet doit suivre
le format providers/{provider_id}/trips/{trip_id} . provider_id doit être l'ID du projet Cloud appartenant au fournisseur de services. |
401 | UNAUTHENTICATED | Ce message d'erreur s'affiche si aucun identifiant d'authentification n'est valide. Par exemple, si le jeton JWT est signé sans ID de trajet ni jeton JWT a expiré. |
403 | PERMISSION_DENIED | Vous recevez cette erreur si le client ne dispose pas d'autorisations suffisantes (par exemple, si un utilisateur disposant du rôle de consommateur tente d'appeler updateTrip), si le jeton JWT n'est pas valide ou si l'API n'est pas activée pour le projet client. Il est possible que le jeton JWT soit manquant ou qu'il soit signé avec un ID de trajet ne correspond pas à l'identifiant de trajet demandé. |
429 | RESOURCE_EXHAUSTED | Le quota de ressources est égal à zéro ou le taux de trafic dépasse la limite. |
503 | UNAVAILABLE | Service indisponible. Généralement, le serveur est inactif. |
504 | DEADLINE_EXCEEDED | Délai de requête dépassé. Cette erreur ne se produit que si l'appelant définit plus court que le délai par défaut de la méthode (c'est-à-dire, le délai demandé n'est pas suffisant pour que le serveur puisse traiter la demande). la demande n'a pas abouti dans le délai imparti. |
Gérer les erreurs du SDK client
Le SDK grand public envoie les erreurs de mise à jour du trajet à l'application grand public à l'aide d'un rappel.
sur le mécanisme d'attention. Le paramètre de rappel est un type renvoyé spécifique à la plate-forme (
TripUpdateError
sur Android et
NSError
sur iOS).
Extraire les codes d'état
Les erreurs transmises au rappel sont généralement des erreurs gRPC. Vous pouvez aussi et d'en extraire des informations supplémentaires sous la forme d'un code d'état. Pour le la liste complète des codes d'état, reportez-vous à Codes d'état et leur utilisation dans gRPC.
Java
Vous pouvez extraire un code d'état gRPC qui fournit des détails sur l'erreur.
du TripUpdateError
renvoyé par onTripUpdateError()
.
// Called when there is a trip update error.
@Override
public void onTripUpdateError(TripInfo tripInfo, TripUpdateError error) {
Status.Code code = error.getStatusCode();
}
Kotlin
Vous pouvez extraire un code d'état gRPC qui fournit des détails sur l'erreur.
du TripUpdateError
renvoyé par onTripUpdateError()
.
// Called when there is a trip update error.
override fun onTripUpdateError(tripInfo: TripInfo, error: TripUpdateError) {
val code = error.getStatusCode()
}
Interpréter les codes d'état
Les codes d'état couvrent deux types d'erreurs: les erreurs liées au serveur et au réseau, et erreurs côté client.
Erreurs de serveur et de réseau
Les codes d'état suivants correspondent à des erreurs de réseau ou de serveur, et vous aucune action n'est requise de votre part pour les résoudre. Consumer SDK automatiquement s'en remet.
Code d'état | Description |
---|---|
ABORTED | Le serveur a arrêté d'envoyer la réponse. Cela est généralement dû à de serveur. |
ANNULÉ | Le serveur a interrompu la réponse sortante. Normalement,
se produit lorsque
l'application est envoyée en arrière-plan ou en cas de changement d'état Application grand public. |
INTERRUPTED | |
DEADLINE_EXCEEDED | Le serveur a mis trop de temps à répondre. |
UNAVAILABLE | Le serveur était indisponible. Cela est généralement dû à un réseau problème. |
Erreurs client
Les codes d'état suivants correspondent à des erreurs client. Vous devez prendre des mesures pour les résoudre. Le SDK grand public continue d'actualiser le trajet jusqu'à ce que vous partager le parcours, mais il ne se rétablira pas tant que vous n’aurez pas pris de mesure.
Code d'état | Description |
---|---|
INVALID_ARGUMENT | L'application pour les consommateurs a spécifié un nom de trajet non valide. Le nom du trajet doit
respectez le format providers/{provider_id}/trips/{trip_id} .
|
NOT_FOUND | Le voyage n'a jamais été créé. |
PERMISSION_DENIED | L'application grand public ne dispose pas des autorisations nécessaires. Cette erreur se produit dans les cas suivants:
|
RESOURCE_EXHAUSTED | Le quota de ressources est égal à zéro, ou le débit du trafic dépasse le limite de vitesse. |
UNAUTHENTICATED | L'authentification de la requête a échoué en raison d'un jeton JWT non valide. Ce se produit lorsque le jeton JWT est signé sans ID de trajet, ou Lorsque le jeton JWT a expiré. |