可结算交易

如果您与 Google 的合同指定按交易结算,您的应用必须调用 NavigationTransactionRecorder.pickup()NavigationTransactionRecorder.dropoff() 来标记每笔交易的开始和结束,以便 Google 可以跟踪和记录可结算交易。如需确定如何将可结算交易分配给叫车和送货,请参阅本页中的实现指南

获取 NavigationTransactionRecorder 对象

为了使用 pickup()dropoff() 方法,您必须先通过调用 NavigationApi.getTransactionRecorder 创建 NavigationTransactionRecorder 的实例,如以下示例所示:

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
  • 适用于此提货的一个或多个交易 ID。交易 ID 是一个任意字符串,用于唯一标识可结算交易。如需了解详情,请参阅下文的交易 ID

结束与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
  • 适用于此下车点的一个或多个交易 ID。交易 ID 是一个任意字符串,用于唯一标识可结算交易。如需了解详情,请参阅下文的交易 ID

使用您自己的交易 ID 或生成一个交易 ID

通过交易 ID,您可将行程与 Google 的结算交易相关联。事务 ID 是任意字符串,最大长度为 64 个字符。此 ID 在所有交易中必须是唯一的。

最好能够提供自己的事务 ID,即您的系统已在使用和存储的事务 ID。

或者,您也可以通过调用 NavigationTransactionRecorder.generateTransactionId() 生成一个随机的唯一交易 ID。存储生成的 ID,以防贵组织需要使用它来协调行程交易。

导航事务记录器实现准则

请根据以下准则确定如何将可结算交易分配给叫车和送货。

通用准则:

  • 每当使用 Android 版 Navigation SDK(包括使用道路贴靠位置信息提供程序),甚至即使应用未在特定行程的前台运行,您都必须报告可计费交易。如果您想停止报告可计费交易,请调用 stopGuidance() 来停用导航,然后使用 stopRequestingLocationUpdates() 关闭道路贴靠位置。
  • 您必须将叫车和送货服务注册为独立的事务,即使司机同时进行叫车和送货也是如此。
  • 您必须在事件发生时立即记录上车点和下车点事件。

约车交易准则:

  • 不涉及乘客的导航会话(例如,驾车前往上车点,或指引司机前往热门地点以便日后自提)不计为可计费交易。
  • 每位乘客的上车点和下车点均计为一笔计费交易。
  • 一组乘客的行程计为一次计费交易。更详细地说,如果司机在一个地点接送两名或更多乘客,并在另一个地点把他们送到下车点,并且您以一个组的形式对他们收费,那么这仅计为一笔交易。使用相关交易 ID 仅调用 pickup() 一次,且仅调用 dropoff() 一次。
  • 即使乘客在同一地点上车和下车,如果两位分别计费的乘客的拼车服务也计为两笔可计费交易。当司机接驾时,使用这两个交易 ID(每笔交易一个)调用 pickup();当司机下车时,使用这两个交易 ID 调用 dropoff()
  • 随意停靠不会计为单独的可结算交易。例如,中断自提咖啡的旅程,或让未单独结算的同乘者下车。请勿像往常一样为这类停靠调用 dropoff()
  • 如果贵组织间接收取部分行程的费用,而不是在行程时计费,则必须将这些行程视为按行程结算。例如,您的组织可能会提供无限行程的按月订阅模式。如需搭乘这些行程,请致电 pickup()dropoff()
  • 如果贵组织提供的公交服务在一组固定的停靠站上下客,但不跟踪在每个停靠站上下车的人员,您必须获得单独的产品许可。这些类型的总线服务不在按交易结算的范围内。
  • 如果贵组织提供的车辆出租服务允许乘客在较长时间内无限次经停(均收取一笔费用),则您必须获得单独的产品许可。这些服务不在按交易结算的范围内。

送货交易准则:

  • 不涉及要送货的商品的导航会话(例如,驾车前往商店自提商品以便配送)不计为可结算交易。
  • 从一个位置的订单自提和下车操作计为一次可结算交易。订单可能包含多件实物,例如两袋杂货。在司机取货时调用 pickup(),在司机送货时调用 dropoff()
  • 如果司机在同一个订单中从多个位置(例如,商店或餐馆)取货,则每个位置将计为一个单独的可结算交易。为每个营业地点使用不同的交易 ID。
  • 当司机从同一地点取货时,系统会将每个订单计为一个单独的可结算交易。请为每个订单使用不同的交易 ID。
  • 当两位司机在同一客户订单中分别取货和下车时,每位司机的送货都会计为单独的可计费交易,即使商品来自同一商店位置也是如此。为每个司机使用不同的事务 ID。