Consumer SDK для iOS позволяет создавать приложения для совместного использования поездок с использованием модульной архитектуры. Вы можете использовать те части API, которые хотите использовать для своего конкретного приложения, и интегрировать их со своими собственными API. API-интерфейсы Consumer SDK для различных функций инкапсулированы в отдельные модули.
Если ваше приложение Ridesharing использует более ранние версии Consumer SDK, вам потребуется обновить приложение, чтобы использовать эту модульную архитектуру. В этом руководстве по миграции описано, как обновить приложение.
Обзор
Модульная архитектура Consumer SDK представляет объект MapViewSession
, который хранит состояние пользовательского интерфейса. В предыдущих версиях Consumer SDK приложения перемещались между состояниями. С помощью этой модульной архитектуры вы создаете объект MapViewSession
и имеете возможность отобразить сеанс на карте. Если сеансы не отображаются, на карте отображается то же содержимое, что и при использовании Maps SDK для iOS.
Объект MapViewSession
представляет собой один экземпляр использования жизненного цикла модуля. Сессии — это точки доступа к API модуля. Например, сеанс совместного использования путешествий следует за одной поездкой. Вы взаимодействуете с объектом JourneySharingSession
, чтобы отслеживать поездку.
Объект TripModel
В предыдущих версиях Consumer SDK экземпляр TripService
позволял отслеживать только одну поездку в реальном времени за раз. Используя объект TripModel
, вы можете отслеживать несколько поездок в режиме реального времени в одном экземпляре TripService
. Экземпляр TripModel
можно создать из TripService
, и каждый экземпляр TripModel
привязан к определенной поездке.
Экземпляр TripModel
вызывает события обновления, если зарегистрированный подписчик находится в поездке во время обновления.
Объект TripModel
также можно использовать для создания экземпляра объекта JourneySharingSession
.
Состояния MapViewSession
Экземпляр MapViewSession
можно добавить только в один mapView
одновременно и он может находиться в одном из следующих двух состояний:
Состояние
GMTCMapViewSessionStateInactive
указывает, что этотMapViewSession
либо еще не был добавлен ни в одинmapView
, либо что он был удален изmapView
. Когда экземплярMapViewSession
удаляется изmapView
, вызывается методdidRemoveFromMapView
.Вызов
hideMapViewSession
hideAllMapViewSessions
удаляетmapViewSession
изmapView
:[_mapView hideMapViewSession:mapViewSessionA];
или
[_mapView hideAllMapViewSessions];
Состояние
GMTCMapViewSessionStateActive
указывает, что этотMapViewSession
был добавлен вmapView
. Когда экземплярMapViewSession
добавляется вmapView
, вызывается методdidAddToMapView
. Вызов методаshowMapViewSession
добавляетmapViewSession
к целевомуmapView
:[_mapView showMapViewSession:mapViewSessionA];
Использование компонентов только данных и пользовательского интерфейса
Вы можете создать приложение для совместного использования поездок, используя либо компоненты, предназначенные только для данных, либо API-интерфейсы элементов пользовательского интерфейса, предоставляемые решением «Поездки и доставки по требованию».
Использование компонентов только для данных
Чтобы создать приложение для совместного использования поездок с использованием компонентов только для данных:
- Инициализируйте объект
GMTCServices
, указав идентификатор поставщика и поставщика токена доступа. - Получите свойство
tripService
из общего экземпляра объектаGMTCServices
. - Создайте или получите экземпляр объекта
GMTCTripModel
для указанной поездки, используя методtripModelForTripName
объектаtripService
. - Зарегистрируйте обратные вызовы для экземпляра
GMTCTripModel
, чтобы начать мониторинг поездок.
В следующем примере показано, как использовать компоненты, предназначенные только для данных:
[GMTCServices setAccessTokenProvider:[[AccessTokenProvider alloc] init]
providerID:yourProviderID];
GMTCTripService *tripService = [GMTCServices sharedServices].tripService;
// Create a tripModel instance for listening to updates to the trip specified by this trip name.
GMTCTripModel *tripModel = [tripService tripModelForTripName:tripName];
// Register for the trip update events.
[tripModel registerSubscriber:self];
// To stop listening for the trip update.
[tripModel unregisterSubscriber:self];
Использование API-интерфейсов элементов пользовательского интерфейса
Выполните следующую процедуру, чтобы создать потребительское приложение с API-интерфейсами элементов пользовательского интерфейса решения On-demand Rides and Delivery Solution:
- Инициализируйте объект
GMTCServices
, указав идентификатор поставщика и поставщика токена доступа. - Инициализируйте объект
GMTCMapView
для отрисовки базовой карты. - Получите свойство
tripService
из общего экземпляра объектаGMTCServices
. - Создайте или получите экземпляр объекта
GMTCTripModel
для указанной поездки, используя методtripModelForTripName
объектаtripService
. - Создайте объект
GMTCJourneySharingSession
с экземпляромGMTCTripModel
. - Покажите объект
GMTCJourneySharingSession
вmapView
. - Зарегистрируйте обратные вызовы для экземпляра
GMTCTripModel
, чтобы начать мониторинг поездок.
В следующем примере показано, как использовать API пользовательского интерфейса:
[GMTCServices setAccessTokenProvider:[[AccessTokenProvider alloc] init]
providerID:yourProviderID];
GMTCTripService *tripService = [GMTCServices sharedServices].tripService;
// Create a tripModel instance for listening to updates to the trip specified by this trip name.
GMTCTripModel *tripModel = [tripService tripModelForTripName:tripName];
GMTCJourneySharingSession *journeySharingSession =
[[GMTCJourneySharingSession alloc] initWithTripModel:tripModel];
// Add the journeySharingSession instance on the mapView for UI updating.
[self.mapView showMapViewSession:journeySharingSession];
// Register for the trip update events.
[tripModel registerSubscriber:self];
// To remove the JourneySharingSession from the mapView:
[self.mapView hideMapViewSession:journeySharingSession];
// To stop listening for the trip update.
[tripModel unregisterSubscriber:self];
Изменения кода модульной архитектуры
Если ваше приложение Ridesharing использует более ранние версии Consumer SDK, обновленная модульная архитектура потребует некоторых изменений в вашем коде. В этом разделе описаны некоторые из этих изменений.
Мониторинг поездки
Обновленная модульная архитектура требует изменений кода как для пользователей уровня данных, так и для пользователей пользовательского интерфейса.
В более ранних версиях пользователь уровня данных мог управлять мониторингом поездок, используя следующий код:
GRCTripRequest *tripRequest =
[[GRCTripRequest alloc] initWithRequestHeader:[GRSRequestHeader defaultHeader]
tripName:tripName
autoRefreshTimeInterval:1];
GRCTripService *tripService = [GRCServices sharedServices].tripService;
[tripService registerServiceSubscriber:self];
[tripService setActiveTripWithRequest:tripRequest];
Используя модульную архитектуру, пользователь уровня данных будет использовать следующий код:
GMTCTripService *tripService = [GMTCServices sharedServices].tripService;
GMTCTripModel *tripModel = [tripService tripModelForTripName:tripName];
tripModel.options.autoRefreshTimeInterval = 1;
[tripModel registerSubscriber:self];
В более ранних версиях пользователь пользовательского интерфейса мог управлять мониторингом поездок, используя следующий код:
// Show the Journey Sharing user interface.
[self.mapView startTripMonitoring];
// Hide the Journey Sharing user interface.
[self.mapView resetCustomerState];
Используя модульную архитектуру, пользователь пользовательского интерфейса будет использовать следующий код:
// Show the Journey Sharing user interface.
GMTCJourneySharingSession *journeySharingSession =
[[GMTCJourneySharingSession alloc] initWithTripModel:tripModel];
[self.mapView showMapViewSession:journeySharingSession];
// Hide the Journey Sharing user interface.
[self.mapView hideMapViewSession:journeySharingSession];