Transações faturáveis

Caso seu contrato com o Google especifique o faturamento por transação, seu app vai precisar chamar NavigationTransactionRecorder.pickup() e NavigationTransactionRecorder.dropoff() para marcar o início e o fim de cada transação. Assim, o Google pode rastrear e registrar transações faturáveis. Consulte as diretrizes de implementação nesta página para determinar como alocar transações faturáveis para viagens e entregas.

Acessar um objeto NavigationTransactionRecorder

Para usar os métodos pickup() e dropoff(), primeiro crie uma instância de NavigationTransactionRecorder chamando NavigationApi.getTransactionRecorder, conforme mostrado no exemplo a seguir.

NavigationTransactionRecorder transactionRecorder = NavigationApi.getTransactionRecorder(application);

Iniciar uma transação com pickup()

Quando o motorista pega um passageiro ou coleta um item para entrega, o aplicativo precisa chamar NavigationTransactionRecorder.pickup(). Inicie essa chamada quando o motorista interagir com o app para registrar a retirada. Não faça essa chamada como parte do callback onArrival().

O exemplo de código a seguir pressupõe que o motorista toca em um botão na interface do app ao retirar um passageiro ou um item de entrega:

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"));
  }
});

Transmita os seguintes parâmetros para o método pickup():

  • A Waypoint em que a retirada está ocorrendo ou null se ela não fizer parte de uma sessão de navegação existente.
  • Um ou mais IDs de transação que se aplicam a essa retirada. Um ID de transação é uma string arbitrária que identifica exclusivamente uma transação faturável. Saiba mais sobre IDs de transação abaixo.

Finalize uma transação com dropoff()

Quando o motorista desembarca ou entrega um item, o aplicativo precisa chamar NavigationTransactionRecorder.dropoff(). Inicie essa chamada quando o motorista interagir com o app para registrar o desembarque. Não faça essa chamada como parte do callback onArrival().

O exemplo de código abaixo pressupõe que o motorista toca em um botão na interface do app ao deixar um passageiro ou um item de entrega:

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"));
  }
});

Transmita os seguintes parâmetros para o método dropoff():

  • A Waypoint em que a desembarque está ocorrendo ou null se ela não fizer parte de uma sessão de navegação existente.
  • Um ou mais IDs da transação que se aplicam a esta entrega. Um ID de transação é uma string arbitrária que identifica exclusivamente uma transação faturável. Saiba mais sobre IDs de transação abaixo.

Use seu próprio ID da transação ou gere um

Com o ID da transação, é possível vincular uma viagem a uma transação de faturamento do Google. Um ID de transação é uma string arbitrária com um comprimento máximo de 64 caracteres. O ID precisa ser exclusivo entre as transações.

Recomendamos que você forneça seu próprio ID da transação, que será usado e armazenado pelos seus sistemas.

Como alternativa, é possível gerar um ID de transação aleatório e exclusivo chamando NavigationTransactionRecorder.generateTransactionId(). Armazene o ID gerado caso sua organização precise dele para reconciliar as transações de viagem.

Diretrizes de implementação para o Gravador de transações de navegação

Use as diretrizes a seguir para determinar como alocar transações faturáveis para viagens e entregas.

Diretrizes gerais:

  • É necessário informar transações faturáveis sempre que o SDK do Navigation para Android estiver em uso, incluindo o uso do provedor de localização exata e mesmo que o app não esteja em primeiro plano para uma jornada específica. Quando quiser parar de informar transações faturáveis, desative a navegação chamando stopGuidance() e desative a localização de referência com stopRequestingLocationUpdates().
  • Você precisa registrar viagens e entregas como transações separadas e independentes, mesmo que um motorista faça uma viagem e uma entrega ao mesmo tempo.
  • Você precisa registrar os eventos de embarque e desembarque imediatamente quando eles ocorrerem.

Diretrizes para transações de viagens:

  • As sessões de navegação que não envolvem passageiros (por exemplo, dirigir até um ponto de embarque ou direcionar o motorista a um local conhecido para embarques futuros) não contam como transações faturáveis.
  • O embarque e desembarque de um passageiro conta como uma transação faturável.
  • Uma viagem de um grupo de passageiros faturada como grupo conta como uma transação faturável. Em mais detalhes, se o motorista pega dois ou mais passageiros em um local e os entrega em outro, e você cobra deles como um grupo, isso conta como uma única transação. Chame pickup() apenas uma vez e dropoff() apenas uma vez com o ID da transação relevante.
  • Uma viagem compartilhada para dois passageiros com cobranças separadas conta como duas transações faturáveis, mesmo que os passageiros sejam embarcados e desembarques nos mesmos locais. Chame pickup() com os dois IDs de transação (um para cada transação) quando o motorista pegar os passageiros e chame dropoff() com os dois IDs quando o motorista desembarcar os passageiros.
  • As paradas discricionárias não contam como transações faturáveis separadas. Por exemplo, interromper o trajeto para pegar o café ou deixar um copassageiro que não é cobrado separadamente. Não chame dropoff() para paradas como essas normalmente.
  • Se a sua organização fatura algumas viagens indiretamente em vez de cobrar no horário da viagem, trate essas viagens como se o faturamento fosse por viagem. Por exemplo, sua organização pode oferecer um modelo de assinatura mensal para viagens ilimitadas. Chame pickup() e dropoff() para essas viagens.
  • Caso sua organização ofereça serviços de ônibus que pegam e deixam passageiros em um conjunto fixo de paradas, mas não rastreiam quem entra e sai em cada parada, você precisará adquirir uma licença de produto separada. Esses tipos de serviço de ônibus estão fora do escopo do faturamento por transação.
  • Se sua organização oferece serviços de locação de veículos que permitem aos passageiros fazer paradas ilimitadas durante um período prolongado e são cobrados como uma taxa, você precisa de uma licença do produto separada. Esses serviços estão fora do escopo do faturamento por transação.

Diretrizes para transações de entrega:

  • As sessões de navegação que não envolvem um item para entrega (por exemplo, dirigir até uma loja para retirar os produtos para serem entregues) não contam como transações faturáveis.
  • A retirada e a entrega de um pedido em um único local contam como uma transação faturável. Um pedido pode incluir vários objetos físicos, por exemplo, dois sacos de supermercado. Chame pickup() quando o motorista atender o pedido e dropoff() quando ele entregar o pedido.
  • Quando um motorista retira itens de vários locais (por exemplo, lojas ou restaurantes) como parte do mesmo pedido, cada local conta como uma transação faturável diferente. Use um ID da transação diferente para cada local.
  • Quando um motorista retira itens de pedidos de vários clientes no mesmo local, cada pedido é contabilizado como uma transação faturável específica. Use um ID da transação diferente para cada pedido.
  • Quando dois motoristas retiram e entregam itens separadamente como parte do mesmo pedido do cliente, a entrega de cada motorista é contabilizada como uma transação faturável separada, mesmo que os itens sejam no mesmo local da loja. Use um ID de transação diferente para cada motorista.