В этом разделе рассказывается, как подготовить транспортное средство к поездкам. Прежде чем серверная часть сможет сопоставить транспортное средство с поездкой, необходимо выполнить каждый из следующих шагов.
Как настроить прослушиватели
После инициализации Driver SDK и создания экземпляра GMTDRidesharingDriverAPI вы можете настроить прослушиватели событий, чтобы отслеживать успешность или неудачу обновлений транспортных средств, отправляемых в Fleet Engine и ваш бэкэнд. Эти слушатели могут запускать действия в приложении для водителей, например уведомлять водителя, если не удается связаться с вашим сервером.
Как отслеживать события обновления транспортных средств
Когда водитель включает уведомления о местоположении в приложении, Driver SDK регулярно отправляет данные о транспортном средстве в Fleet Engine и на сервер клиента через класс GMTDVehicleReporter. Вы можете настроить приложение так, чтобы оно реагировало на события обновления, настроив протокол GMTDVehicleReporterListener.
С помощью GMTDVehicleReporterListener можно обрабатывать следующие события:
vehicleReporter:didSucceedVehicleUpdateСообщает приложению "Водитель", что бэкенд-службы успешно получили обновление местоположения и состояния автомобиля.
vehicleReporter:didFailVehicleUpdate:withErrorСообщает слушателю, что обновление транспортного средства не удалось. Пока у водителя включены уведомления о местоположении, класс
GMTDVehicleReporterпродолжает отправлять последние данные в Fleet Engine.
В примерах ниже показано, как настроить GMTDVehicleReporterListener для обработки этих событий:
Swift
import GoogleRidesharingDriver
private let providerID = "INSERT_YOUR_PROVIDER_ID"
class SampleViewController: UIViewController, GMTDVehicleReporterListener {
private let mapView: GMSMapView
override func viewDidLoad() {
// Assumes you have implemented the sample code up to this step.
ridesharingDriverAPI.vehicleReporter.add(self)
}
func vehicleReporter(_ vehicleReporter: GMTDVehicleReporter, didSucceed vehicleUpdate: GMTDVehicleUpdate) {
// Handle update succeeded.
}
func vehicleReporter(_ vehicleReporter: GMTDVehicleReporter, didFail vehicleUpdate: GMTDVehicleUpdate, withError error: Error) {
// Handle update failed.
}
}
Objective-C
/**
* SampleViewController.h
*/
@interface SampleViewController : UIViewController<GMTDVehicleReporterListener>
@end
/**
* SampleViewController.m
*/
#import "SampleViewController.h"
#import "SampleAccessTokenProvider.h"
#import <GoogleRidesharingDriver/GoogleRidesharingDriver.h>
static NSString *const PROVIDER_ID = @"INSERT_YOUR_PROVIDER_ID";
@implementation SampleViewController {
GMSMapView *_mapView;
}
- (void)viewDidLoad {
// Assumes you have implemented the sample code up to this step.
[ridesharingDriverAPI.vehicleReporter addListener:self];
}
- (void)vehicleReporter:(GMTDVehicleReporter *)vehicleReporter didSucceedVehicleUpdate:(GMTDVehicleUpdate *)vehicleUpdate {
// Handle update succeeded.
}
- (void)vehicleReporter:(GMTDVehicleReporter *)vehicleReporter didFailVehicleUpdate:(GMTDVehicleUpdate *)vehicleUpdate withError:(NSError *)error {
// Handle update failed.
}
@end
Как отслеживать изменения местоположения автомобиля
Navigation SDK передает данные о местоположении в Driver SDK через класс GMSRoadSnappedLocationProvider. Чтобы получать эти обновления, необходимо настроить GMTDVehicleReporter в качестве прослушивателя.
Swift
import GoogleRidesharingDriver
private let providerID = "INSERT_YOUR_PROVIDER_ID"
class SampleViewController: UIViewController, GMTDVehicleReporterListener {
private let mapView: GMSMapView
override func viewDidLoad() {
// Assumes you have implemented the sample code up to this step.
if let roadSnappedLocationProvider = mapView.roadSnappedLocationProvider {
roadSnappedLocationProvider.add(ridesharingDriverAPI.vehicleReporter)
roadSnappedLocationProvider.startUpdatingLocation()
}
}
}
Objective-C
/**
* SampleViewController.h
*/
@interface SampleViewController : UIViewController<GMTDVehicleReporterListener>
@end
/**
* SampleViewController.m
*/
#import "SampleViewController.h"
#import "SampleAccessTokenProvider.h"
#import <GoogleRidesharingDriver/GoogleRidesharingDriver.h>
static NSString *const PROVIDER_ID = @"INSERT_YOUR_PROVIDER_ID";
@implementation SampleViewController {
GMSMapView *_mapView;
}
- (void)viewDidLoad {
// Assumes you have implemented the sample code up to this step.
[_mapView.roadSnappedLocationProvider addListener:ridesharingDriverAPI.vehicleReporter];
[_mapView.roadSnappedLocationProvider startUpdatingLocation];
}
@end
Включить уведомления о местоположении
Чтобы включить обновление местоположения, задайте для параметра locationTrackingEnabled значение true на странице GMTDVehicleReporter в приложении для водителей. После этого класс GMTDVehicleReporter будет автоматически отправлять данные о местоположении в Fleet Engine. После того как Fleet Engine и бэкенд-службы клиента сопоставят и назначат транспортное средство для поездки, класс GMTDVehicleReporter автоматически отправляет обновления маршрута, когда GMSNavigator находится в режиме навигации, то есть когда пункт назначения задан через setDestinations.
Driver SDK задает маршрут в соответствии с текущим навигационным путем водителя. Чтобы обеспечить точное обновление местоположения, задайте путевую точку в setDestinations, соответствующую пункту назначения в Fleet Engine.
В примере ниже показано, как включить обновление местоположения:
Swift
import GoogleRidesharingDriver
private let providerID = "INSERT_YOUR_PROVIDER_ID"
class SampleViewController: UIViewController, GMTDVehicleReporterListener {
private let mapView: GMSMapView
override func viewDidLoad() {
// Assumes you have implemented the sample code up to this step.
ridesharingDriverAPI.vehicleReporter.locationTrackingEnabled = true
}
}
Objective-C
/**
* SampleViewController.m
*/
#import "SampleViewController.h"
#import "SampleAccessTokenProvider.h"
#import <GoogleRidesharingDriver/GoogleRidesharingDriver.h>
static NSString *const PROVIDER_ID = @"INSERT_YOUR_PROVIDER_ID";
@implementation SampleViewController {
GMSMapView *_mapView;
}
- (void)viewDidLoad {
// Assumes you have implemented the sample code up to this step.
ridesharingDriverAPI.vehicleReporter.locationTrackingEnabled = YES;
}
@end
Как задать интервал обновления
По умолчанию, когда для locationTrackingEnabled задано значение true, Driver SDK отправляет обновления о поездке и транспортном средстве в Fleet Engine с интервалом в 10 секунд. Вы можете изменить интервал обновления с помощью locationUpdateInterval. Минимальный интервал – 5 секунд, максимальный – 60 секунд. Более частое обновление может привести к замедлению обработки запросов и ошибкам.
Как перевести автомобиль в онлайн-режим
После того как вы включите обновление местоположения, задайте для автомобиля статус ONLINE, чтобы он был доступен для поисковых запросов в Fleet Engine.
В примерах ниже показано, как задать для транспортного средства статус ONLINE. Подробнее о updateVehicleState…
Swift
import GoogleRidesharingDriver
private let providerID = "INSERT_YOUR_PROVIDER_ID"
class SampleViewController: UIViewController, GMTDVehicleReporterListener {
private let mapView: GMSMapView
override func viewDidLoad() {
// Assumes you have implemented the sample code up to this step.
ridesharingDriverAPI.vehicleReporter.update(.online)
}
}
Objective-C
#import "SampleViewController.h"
#import "SampleAccessTokenProvider.h"
#import <GoogleRidesharingDriver/GoogleRidesharingDriver.h>
static NSString *const PROVIDER_ID = @"INSERT_YOUR_PROVIDER_ID";
@implementation SampleViewController {
GMSMapView *_mapView;
}
- (void)viewDidLoad {
// Assumes you have implemented the sample code up to this step.
[ridesharingDriverAPI.vehicleReporter
updateVehicleState:GMTDVehicleStateOnline];
}
@end
Дальнейшие действия
Как указать сведения о поездке