Giao dịch có thể thanh toán

Nếu hợp đồng của bạn với Google chỉ định việc thanh toán theo từng giao dịch, thì ứng dụng của bạn phải gọi NavigationTransactionRecorder.pickup()NavigationTransactionRecorder.dropoff() để đánh dấu thời điểm bắt đầu và kết thúc của từng giao dịch. Nhờ đó, Google có thể theo dõi và ghi lại các giao dịch có thể tính phí. Hãy tham khảo nguyên tắc triển khai trên trang này để xác định cách phân bổ các giao dịch có thể tính phí cho chuyến đi và dịch vụ giao hàng.

Nhận đối tượng NavigationTransactionRecorder

Để sử dụng phương thức pickup()dropoff(), trước tiên, bạn phải tạo một thực thể của NavigationTransactionRecorder bằng cách gọi NavigationApi.getTransactionRecorder, như minh hoạ trong ví dụ sau:

NavigationTransactionRecorder transactionRecorder = NavigationApi.getTransactionRecorder(application);

Bắt đầu giao dịch với pickup()

Khi người lái xe đón hành khách hoặc thu một mặt hàng để giao, ứng dụng của bạn phải gọi NavigationTransactionRecorder.pickup(). Bạn nên bắt đầu lệnh gọi này khi người lái xe tương tác với ứng dụng của bạn để đăng ký dịch vụ đến lấy hàng. Không thực hiện lệnh gọi này trong lệnh gọi lại onArrival().

Mã mẫu sau đây giả định rằng người lái xe nhấn vào một nút trên giao diện người dùng của ứng dụng khi đón một hành khách hoặc đồ giao hàng:

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

Truyền các tham số sau vào phương thức pickup():

  • Waypoint mà tại thời điểm đến lấy hàng hoặc null nếu hoạt động đến lấy hàng không thuộc phiên chỉ đường hiện có.
  • Một hoặc nhiều mã giao dịch áp dụng cho đơn đặt hàng tự đến lấy này. Mã giao dịch là một chuỗi tuỳ ý xác định riêng một giao dịch có thể tính phí. Xem thêm về mã giao dịch ở bên dưới.

Kết thúc giao dịch với dropoff()

Khi người lái xe trả khách hoặc giao một món đồ, ứng dụng của bạn phải gọi NavigationTransactionRecorder.dropoff(). Bạn nên bắt đầu lệnh gọi này khi người lái xe tương tác với ứng dụng của bạn để đăng ký bỏ ngang. Không thực hiện lệnh gọi này trong lệnh gọi lại onArrival().

Mã mẫu sau đây giả định rằng người lái xe nhấn vào một nút trên giao diện người dùng của ứng dụng khi bỏ một món hàng để chở khách hoặc giao hàng:

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

Truyền các tham số sau vào phương thức dropoff():

  • Waypoint xảy ra tình trạng bỏ ngang hoặc null nếu tình trạng bỏ ngang không thuộc phiên chỉ đường hiện có.
  • Một hoặc nhiều mã giao dịch áp dụng cho lần bỏ ngang này. Mã giao dịch là một chuỗi tuỳ ý xác định riêng một giao dịch có thể tính phí. Xem thêm về mã giao dịch ở bên dưới.

Sử dụng mã giao dịch của riêng bạn hoặc tạo một mã

Mã giao dịch cung cấp cách để liên kết một chuyến đi với giao dịch thanh toán của Google. Mã giao dịch là một chuỗi tuỳ ý có độ dài tối đa là 64 ký tự. Mã nhận dạng không được trùng lặp trên các giao dịch.

Tốt nhất là bạn có thể cung cấp mã giao dịch của riêng mình: mã mà hệ thống của bạn đã sử dụng và lưu trữ.

Ngoài ra, bạn có thể tạo một mã giao dịch ngẫu nhiên, duy nhất bằng cách gọi NavigationTransactionRecorder.generateTransactionId(). Lưu trữ mã nhận dạng đã tạo phòng trường hợp tổ chức của bạn cần mã này để điều chỉnh các giao dịch gọi xe.

Nguyên tắc triển khai cho trình ghi giao dịch điều hướng

Hãy sử dụng các nguyên tắc sau để xác định cách phân bổ các giao dịch có thể thanh toán cho dịch vụ đi xe và giao hàng.

Nguyên tắc chung:

  • Bạn phải báo cáo các giao dịch có thể lập hoá đơn bất cứ khi nào SDK Điều hướng dành cho Android đang được sử dụng, bao gồm cả việc sử dụng trình cung cấp vị trí đã chụp trên đường, và ngay cả khi ứng dụng không chạy ở nền trước cho một hành trình cụ thể. Khi bạn muốn ngừng báo cáo các giao dịch có thể lập hoá đơn, hãy tắt tính năng chỉ đường bằng cách gọi stopGuidance() và tắt thông tin vị trí được chụp trên đường bằng stopRequestingLocationUpdates().
  • Bạn phải đăng ký chuyến đi và giao hàng dưới dạng giao dịch riêng biệt và độc lập, ngay cả khi người lái xe thực hiện cả chuyến đi và giao hàng cùng một lúc.
  • Bạn phải ghi lại sự kiện nhận xe và trả xe ngay khi sự kiện diễn ra.

Nguyên tắc đối với giao dịch gọi xe:

  • Phiên chỉ đường không liên quan đến hành khách (ví dụ: lái xe đến một điểm đón khách hoặc chỉ dẫn tài xế đến một vị trí phổ biến để đến lấy hàng trong tương lai) không được tính là giao dịch có thể lập hoá đơn.
  • Việc đón và trả khách của một hành khách được tính là một giao dịch có thể tính phí.
  • Chuyến đi dành cho một nhóm hành khách được tính phí theo nhóm sẽ được tính là một giao dịch có tính phí. Chi tiết hơn: nếu tài xế đón hai hành khách trở lên tại một địa điểm rồi trả khách tại một địa điểm khác và bạn lập hoá đơn cho họ theo nhóm, thì hành động này được tính là một giao dịch duy nhất. Gọi pickup() chỉ một lần và dropoff() chỉ một lần với mã giao dịch có liên quan.
  • Một chuyến đi chung dành cho hai hành khách thanh toán riêng biệt được tính là hai giao dịch có thể tính phí, ngay cả khi hành khách được đón và trả khách ở cùng địa điểm. Gọi pickup() bằng cả hai mã giao dịch (mỗi mã cho một giao dịch) khi tài xế đến đón hành khách và gọi dropoff() bằng cả hai mã giao dịch khi tài xế trả khách.
  • Những điểm dừng riêng biệt không được tính là các giao dịch có thể tính phí riêng biệt. Ví dụ: phá vỡ lịch trình lấy cà phê hoặc trả khách không được tính phí riêng. Không gọi dropoff() cho các điểm dừng như bình thường.
  • Nếu tổ chức của bạn tính phí một số chuyến đi gián tiếp thay vì thanh toán tại giờ đi xe, bạn phải coi các chuyến đi này như thể việc thanh toán cho mỗi chuyến đi. Ví dụ: tổ chức của bạn có thể cung cấp mô hình gói thuê bao hằng tháng với số chuyến đi không giới hạn. Hãy gọi cho pickup()dropoff() để thực hiện các chuyến đi này.
  • Nếu tổ chức của bạn cung cấp dịch vụ xe buýt đưa đón và trả khách tại một số điểm dừng cố định, nhưng không theo dõi những cá nhân lên/xuống tại mỗi điểm dừng, thì bạn phải có giấy phép sản phẩm riêng. Các loại dịch vụ xe buýt này nằm ngoài phạm vi thanh toán cho mỗi giao dịch.
  • Nếu tổ chức của bạn cung cấp dịch vụ thuê xe cho phép một hành khách dừng lại không giới hạn trong một khoảng thời gian dài và tất cả đều được tính phí là một phí, bạn phải có giấy phép sản phẩm riêng. Những dịch vụ này nằm ngoài phạm vi của phương thức thanh toán cho mỗi giao dịch.

Nguyên tắc đối với giao dịch giao hàng:

  • Các phiên chỉ đường không liên quan đến một mặt hàng để giao hàng (ví dụ: lái xe đến một cửa hàng để chọn hàng để giao) không được tính là giao dịch có thể tính phí.
  • Việc đến lấy và trả đơn đặt hàng từ một vị trí duy nhất được tính là một giao dịch có thể tính phí. Một đơn đặt hàng có thể bao gồm nhiều đối tượng thực – ví dụ: hai túi hàng tạp hoá. Gọi pickup() khi người lái xe nhận đơn đặt hàng và dropoff() khi người lái xe giao hàng.
  • Khi người lái xe đến lấy các mặt hàng từ nhiều địa điểm (ví dụ: cửa hàng hoặc nhà hàng) trong cùng một đơn đặt hàng, mỗi địa điểm sẽ được tính là một giao dịch có thể lập hoá đơn riêng. Hãy sử dụng một mã giao dịch riêng cho từng vị trí.
  • Khi người lái xe đến lấy hàng cho nhiều đơn đặt hàng của nhiều khách hàng từ cùng một vị trí, mỗi đơn đặt hàng được tính là một giao dịch có thể lập hoá đơn riêng. Hãy sử dụng một mã giao dịch khác cho mỗi đơn đặt hàng.
  • Khi hai tài xế đến lấy và trả hàng một cách riêng biệt trong cùng một đơn đặt hàng của khách hàng, thì mỗi lần giao hàng của mỗi tài xế sẽ được tính là một giao dịch có tính phí riêng, ngay cả khi các mặt hàng đó đến từ cùng một vị trí cửa hàng. Hãy sử dụng một mã giao dịch riêng cho mỗi tài xế.