Оплачиваемые транзакции

Если в вашем контракте с Google указано выставление счетов за каждую транзакцию, ваше приложение должно вызывать NavigationTransactionRecorder.pickup() и NavigationTransactionRecorder.dropoff() чтобы отмечать начало и конец каждой транзакции, чтобы Google мог отслеживать и регистрировать оплачиваемые транзакции. Ознакомьтесь с рекомендациями по внедрению на этой странице, чтобы определить, как распределять оплачиваемые транзакции между поездками и доставкой.

Получить объект NavigationTransactionRecorder

Чтобы использовать методы pickup() и dropoff() , необходимо сначала создать экземпляр NavigationTransactionRecorder , вызвав NavigationApi.getTransactionRecorder , как показано в следующем примере:

NavigationTransactionRecorder transactionRecorder = NavigationApi.getTransactionRecorder(application);

Начать транзакцию с помощью pickup()

Когда водитель забирает пассажира или забирает предмет для доставки, ваше приложение должно вызвать NavigationTransactionRecorder.pickup() . Вы должны инициировать этот вызов, когда водитель взаимодействует с вашим приложением, чтобы зарегистрировать получение. Не делайте этот вызов как часть обратного вызова onArrival() .

В следующем примере кода предполагается, что водитель нажимает кнопку в пользовательском интерфейсе вашего приложения при получении пассажира или предмета доставки:

Button b = (Button) findViewById(R.id.btn_pickup);
b.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    transactionRecorder.pickup(
        null /* waypoint */,
        Arrays.asList("MY_TRANSACTION_ID"));
  }
});

Передайте следующие параметры методу pickup() :

  • Waypoint , в которой происходит подхват, или null , если подхват не является частью существующего сеанса навигации.
  • Один или несколько идентификаторов транзакции, применимых к этому получению. Идентификатор транзакции – это произвольная строка, которая уникальным образом идентифицирует оплачиваемую транзакцию. Подробнее об идентификаторах транзакций см. ниже.

Завершите транзакцию с помощью dropoff()

Когда водитель высаживает пассажира или доставляет предмет, ваше приложение должно вызвать NavigationTransactionRecorder.dropoff() . Вам следует инициировать этот вызов, когда драйвер взаимодействует с вашим приложением, чтобы зарегистрировать отключение. Не делайте этот вызов как часть обратного вызова onArrival() .

В следующем примере кода предполагается, что водитель нажимает кнопку в пользовательском интерфейсе вашего приложения при высадке пассажира или предмета доставки:

Waypoint waypoint = mNavigator.getCurrentRouteSegment().getDestinationWaypoint();

Button b = (Button) findViewById(R.id.btn_dropoff);
b.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    transactionRecorder.dropoff(
        waypoint,
        Arrays.asList("MY_TRANSACTION_ID"));
  }
});

Передайте следующие параметры методу dropoff() :

  • Waypoint , в которой происходит высадка, или null если высадка не является частью существующего сеанса навигации.
  • Один или несколько идентификаторов транзакций, применимых к этому выводу. Идентификатор транзакции – это произвольная строка, которая уникальным образом идентифицирует оплачиваемую транзакцию. Подробнее об идентификаторах транзакций см. ниже.

Используйте свой собственный идентификатор транзакции или сгенерируйте его.

Идентификатор транзакции позволяет связать поездку с платежной транзакцией от Google. Идентификатор транзакции — это произвольная строка максимальной длиной 64 символа. Идентификатор должен быть уникальным для всех транзакций.

Лучше всего, если вы предоставите свой собственный идентификатор транзакции: тот, который ваши системы уже используют и хранят.

Альтернативно вы можете сгенерировать случайный уникальный идентификатор транзакции, вызвав NavigationTransactionRecorder.generateTransactionId() . Сохраните сгенерированный идентификатор на случай, если он понадобится вашей организации для сверки транзакций поездок.

Рекомендации по внедрению регистратора навигационных транзакций

Используйте следующие рекомендации, чтобы определить, как распределять оплачиваемые транзакции между поездками и доставкой.

Общие рекомендации:

  • Вы должны сообщать об оплачиваемых транзакциях всякий раз, когда используется Navigation SDK для Android, в том числе при использовании поставщика данных о местоположении с привязкой к дороге, и даже если приложение не находится на переднем плане для конкретной поездки. Если вы хотите прекратить сообщать об оплачиваемых транзакциях, отключите навигацию, вызвав stopGuidance() , и отключите определение местоположения по дороге с помощью stopRequestingLocationUpdates() .
  • Вы должны регистрировать поездки и доставку как отдельные и независимые транзакции, даже если водитель выполняет и поездку, и доставку одновременно.
  • Вы должны записывать события посадки и высадки сразу же после их возникновения.

Рекомендации по сделкам с поездками:

  • Сеансы навигации, не связанные с пассажиром (например, поездка к месту посадки или направление водителя в популярное место для будущей посадки), не считаются оплачиваемыми транзакциями.
  • Встреча и высадка одного пассажира считаются одной оплачиваемой транзакцией.
  • Поездка группы пассажиров, счет за которую выставляется как группа, считается как одна оплачиваемая транзакция. Более подробно: если водитель забирает двух или более пассажиров в одном месте и высаживает их в другом месте, и вы выставляете им счет как группу, это считается одной транзакцией. Вызовите pickup() только один раз и dropoff() только один раз с соответствующим идентификатором транзакции.
  • Совместная поездка для двух пассажиров, оплачиваемых отдельно, считается двумя оплачиваемыми транзакциями, даже если пассажиров забирают и высаживают в одних и тех же местах. Вызовите pickup() с обоими идентификаторами транзакции (по одному для каждой транзакции), когда водитель забирает пассажиров, и вызовите dropoff() с обоими идентификаторами транзакции, когда водитель высаживает пассажиров.
  • Дискреционные остановки в пути не считаются отдельными оплачиваемыми транзакциями. Примеры включают прерывание поездки, чтобы забрать кофе или высадить попутного пассажира, которому не выставляется отдельный счет. Не вызывайте dropoff() для подобных остановок, как обычно.
  • Если ваша организация выставляет счета за некоторые поездки косвенно, а не во время поездки, вы должны относиться к этим поездкам так, как будто счета выставляются за каждую поездку. Например, ваша организация может предоставить модель ежемесячной подписки на неограниченное количество поездок. Для этих поездок вызовите pickup() и dropoff() .
  • Если ваша организация предоставляет автобусные услуги, которые забирают и высаживают пассажиров на фиксированном наборе остановок, но не отслеживают людей, которые входят и выходят на каждой остановке, вам необходимо получить отдельную лицензию на продукт. Эти типы автобусных перевозок выходят за рамки выставления счетов за каждую транзакцию.
  • Если ваша организация предоставляет услуги по аренде транспортных средств, которые позволяют пассажиру совершать неограниченное количество остановок в течение длительного периода времени, и все это оплачивается как одна плата, вы должны получить отдельную лицензию на продукт. Эти услуги выходят за рамки выставления счетов за транзакцию.

Рекомендации по операциям доставки:

  • Сеансы навигации, не связанные с доставкой товара (например, поездка в магазин для получения товара для доставки), не считаются оплачиваемыми транзакциями.
  • Получение и выдача заказа из одного места считается одной оплачиваемой транзакцией. Заказ может включать несколько физических объектов — например, две сумки с продуктами. Вызовите pickup() , когда водитель забирает заказ, и dropoff() , когда водитель доставляет заказ.
  • Когда водитель забирает товары из нескольких мест (например, магазинов или ресторанов) в рамках одного заказа, каждое место считается отдельной оплачиваемой транзакцией. Используйте разные идентификаторы транзакции для каждого местоположения.
  • Когда водитель забирает товары для заказов нескольких клиентов из одного и того же места, каждый заказ считается отдельной оплачиваемой транзакцией. Используйте разные идентификаторы транзакции для каждого заказа.
  • Когда два водителя по отдельности забирают и отправляют товары в рамках одного и того же заказа клиента, доставка каждого водителя считается отдельной оплачиваемой транзакцией, даже если товары находятся в одном и том же магазине. Используйте разные идентификаторы транзакции для каждого драйвера.