Skip to content
Blog
Roman Kuchařík, CPO

Có gì mới trong Accept SDK: tháng 9/2026

Tám bản phát hành trong bốn tuần. Thương hiệu riêng trên màn hình thanh toán, thanh toán trên hai màn hình, liên kết hóa đơn ngay từ sự kiện đầu tiên, hỗ trợ đầu đọc thẻ rời và thanh toán không còn phải chờ vị trí. Tổng quan những thay đổi trong Accept SDK cho Android từ 1.10 đến 1.15.

Tháng 9 là tháng bận rộn nhất của Accept SDK từ trước đến nay. Chúng tôi đã phát hành tám phiên bản, từ 1.10.0 ngày 3/9 đến 1.15.0 ngày 23/9. Phần lớn thay đổi đến trực tiếp từ các đối tác đang vận hành SDK trong thực tế: thiết bị đặt quầy, thiết bị hai màn hình, cửa hàng có đầu đọc thẻ riêng và các nền tảng muốn bước thanh toán trông giống phần còn lại của sản phẩm.

Ý tưởng đằng sau vẫn không đổi. Đối tác tích hợp một lần, trải nghiệm của người bán vẫn nằm trong sản phẩm của đối tác, còn Tapaya xử lý mọi sự phức tạp của thanh toán bên dưới. Dưới đây là ý nghĩa thực tế của điều đó trong tháng này.

Thương hiệu riêng trên màn hình thanh toán

Biểu tượng bảng màu

Bản 1.14.0 bổ sung Accept.setTheme(). SDK giờ cho phép chuyển màu sắc và logo của đối tác sang Tapaya Terminal để hiển thị trên các màn hình kích hoạt, trạng thái và thanh toán. Người bán nhìn thấy một sản phẩm duy nhất từ lúc bắt đầu giao dịch đến khi có hóa đơn, không phải chuyển sang một màn hình trông như của ứng dụng khác.

Giao diện có hiệu lực trong suốt phiên làm việc. Nó được thiết lập một lần, trước hoặc sau initialize(), và giữ nguyên cho đến khi được thay đổi hoặc xóa. Với logo chọn từ thư viện ảnh trên điện thoại thay vì được lưu trữ ở đâu đó, có sẵn Accept.createLocalThemeImageUri() để biến ảnh cục bộ thành một URI mà ứng dụng terminal có thể đọc.

Hỗ trợ thanh toán trên hai màn hình

Biểu tượng màn hình và điện thoại

Bản 1.10.0 bổ sung hỗ trợ thiết bị hai màn hình ("hai mặt"). Accept.displays cho biết thiết bị có những màn hình nào, và tùy chọn mới PaymentDisplay cho phép hiển thị giao diện thanh toán trên màn hình của khách hàng, trong khi ứng dụng của đối tác vẫn ở màn hình của người bán.

Kotlin
Accept.payments.pay(
    amount = 1500,
    currency = "CZK",
    display = PaymentDisplay.CustomerFacing,
)

Nếu thiết bị không đáp ứng được yêu cầu, ví dụ CustomerFacing trên điện thoại chỉ có một màn hình, SDK sẽ dùng màn hình mặc định. Nhờ đó cùng một đoạn mã chạy được trên mọi thiết bị được hỗ trợ. Ứng dụng mẫu mới :dualscreen trình diễn toàn bộ quy trình thanh toán trên hai màn hình.

Liên kết hóa đơn ngay từ sự kiện đầu tiên

Biểu tượng liên kết

Bản 1.12.0 cung cấp URL của hóa đơn trực tuyến ngay trong luồng thanh toán. PaymentEvent.Created giờ chứa receiptUrl bên cạnh payment token, nên liên kết đã có sẵn trước cả khi Tapaya Terminal mở ra. PayResult.Success và PayResult.Declined cũng chứa trường này, nên một giao dịch hoàn tất mang theo đủ mọi thông tin cần thiết và không còn phải gọi riêng status() chỉ để hiển thị hóa đơn.

Liên kết hoạt động ngay từ khi giao dịch được tạo và hiển thị hóa đơn cuối cùng khi giao dịch được quyết toán. Cả hai trường đều có thể là null và mặc định là null, nên các tích hợp hiện có vẫn biên dịch bình thường mà không cần thay đổi.

Hỗ trợ đầu đọc thẻ rời

Biểu tượng thẻ

Bản 1.11.0 bổ sung NfcPositionConfig.ExternalReader cho trường hợp đầu đọc thẻ là thiết bị riêng: đầu đọc đặt trên quầy, pinpad gắn bên cạnh hoặc dock quay về phía khách hàng. Trên điện thoại không có điểm nào để chỉ vào, nên Tapaya Terminal ẩn hiệu ứng chạm thẻ và hiển thị số tiền kèm một lời nhắc ngắn bên dưới. Lời nhắc mặc định có thể thay bằng message tùy chỉnh.

Kotlin
Accept.payments.setOptions(
    nfcPosition = NfcPositionConfig.ExternalReader(message = "Vui lòng chạm thẻ vào đầu đọc"),
)

Tính năng này yêu cầu Tapaya Terminal 1.5.2 trở lên. Các phiên bản cũ hơn sẽ bỏ qua thiết lập này và vẫn hoạt động như trước.

Thanh toán không phải chờ vị trí

Biểu tượng ghim vị trí với mũi tên chỉ tới biểu tượng tia sét

Nhiều đối tác chạy SDK trên thiết bị đặt quầy, và một số thiết bị có dịch vụ định vị yếu hoặc không dùng dịch vụ của Google. Các bản 1.14.1, 1.14.2 và 1.15.0 đã khắc phục triệt để vấn đề này.

  • pay() không còn chờ lấy vị trí mới. Nó dùng ngay vị trí gần nhất đã biết và làm mới trong nền khi vị trí đó cũ hơn một giờ. Thiết bị đặt trên quầy không di chuyển giữa các giao dịch, nên vị trí từ một giờ trước cũng chính xác như vị trí mới.
  • Khi SDK thực sự cần vị trí mới, nó hỏi đồng thời mọi nguồn định vị khả dụng và lấy câu trả lời đầu tiên. Trước đây, một thiết bị có dịch vụ định vị chính trông vẫn ổn nhưng không bao giờ trả lời sẽ báo lỗi LocationUnavailable, ngay cả khi GPS và định vị qua mạng vẫn hoạt động.
  • Khi khởi động nguội, SDK trước tiên dùng lại vị trí mà Android đã biết. Chỉ thiết bị chưa từng có vị trí mới phải chờ, và không quá 30 giây.

Với người bán, điều này có nghĩa là thanh toán nhanh hơn và ít lỗi vị trí giữa chừng hơn hẳn.

Các cải tiến khác

  • Lỗi kích hoạt terminal rõ ràng hơn (1.10.0, 1.14.0). activateTerminal() giờ trả về NoTidsAvailableForMerchant khi người bán không còn mã terminal (TID) trống, thay vì lỗi chung Unknown. Nếu người bán chưa hoàn tất đăng ký, lệnh gọi dừng sớm với MerchantOnboardingIncomplete, nhờ đó có thể đưa họ quay lại đúng bước.
  • Không còn treo giao diện khi kết nối với ứng dụng terminal (1.14.0). Các lệnh gọi tới Tapaya Terminal giờ chạy ngoài luồng chính. Trước đây, lần kết nối đầu tiên chậm được khởi chạy từ viewModelScope.launch có thể làm đứng màn hình hoặc gây ANR.
  • Chẩn đoán PluginUnavailable chính xác hơn (1.13.0). SDK giờ ghi log cụ thể trường hợp đang xảy ra: Tapaya Terminal chưa được cài, đã bị tắt, đã bị gỡ cho người dùng hiện tại, hoặc manifest của ứng dụng thiếu mục <queries> mà Android 11+ yêu cầu. Log cũng kèm theo phiên bản của ứng dụng terminal và nguồn cài đặt. Chúng tôi cũng sửa lỗi rò rỉ kết nối khi bind thất bại, lỗi SecurityException lọt vào mã ứng dụng thay vì PluginUnavailable, và việc phải chờ hết thời gian chờ khi tiến trình của ứng dụng terminal bị dừng trong lúc kết nối.

Nâng cấp

Mọi bản phát hành trong tháng này đều tương thích ngược. Chỉ cần nâng phiên bản dependency là xong:

Kotlin
dependencies {
    implementation("com.tapaya:accept:1.15.0")
}

Với các triển khai trên thiết bị đang hoạt động thực tế, chúng tôi đặc biệt khuyên dùng bản 1.15.0 nhờ các bản sửa lỗi về vị trí. Changelog đầy đủ có trong kho mã Accept SDK trên GitHub, và hướng dẫn tích hợp có tại docs.tapaya.com. Tài liệu cũng có thể kết nối với IDE hoặc AI agent qua Tapaya MCP server.

SDK còn thiếu điều gì mà đối tác cần? Hãy cho chúng tôi biết. Phần lớn những gì ra mắt trong tháng 9 đều bắt đầu từ một cuộc trò chuyện với đối tác.