In-app billing trên mobile và các quan điểm test

Khi thực hiện việc test cho một dự án thì mọi nguời đều hiểu rõ có một phần không được cho phép có lỗi, đó là phần liên quan đến tiền bạc, thanh toán. Và nếu các bạn đã từng test mobile trên các nền tảng Android và iOS thì chắc hẳn mọi người đều biết các phần thanh toán trong ứng dụng được gọi là In-App Billing(hoặc có thể gọi là In-app purchase). Tất cả các ứng dụng có phần thanh toán muốn đưa lên trên Google Play/App Store thì đều phải thực hiện phần in-app billing dựa trên các luồng(flow), tài liệu hướng dẫn(documents), API và các chuẩn được quy định của Google và Apple. Tất cả các thanh toán không được thực hiện qua Google Play/App Store hoặc thực hiện qua một bên thứ ba đều không được chấp nhận và bị từ chối(rejected) khi review.

Trong in-app billing ở trên cả hai store là Google Play và Apple Store, về cơ bản được chia thành hai loại đó là managed product và subscription. Managed product được gọi là các vật phẩm, sản phẩm mà người dùng có thể mua và sử dụng ngay tại trong ứng dụng hoặc game. Còn subscription đó là việc người dùng mua các nội dung, dịch vụ hay tính năng ở bên trong ứng dụng của bạn bằng cách trả tiền hàng tháng hoặc định kỳ. Trong loại managed product có hai loại đó là consumable(tiêu hao) và non-comsumable(không tiêu hao). Loại tiêu hao có thể là các loại tiền ảo, các bình máu, năng lượng…. trong ứng dụng và game. Loại không tiêu hao là các loại vật phẩm trong game như áo giáp, xe cộ… Trong loại subscription có hai loại con đó là auto-renewable subscription(tự động gia hạn mua định kỳ) và non-renewing subscription(không gia hạn mua định kỳ). Ví dụ ở đây đó là đặt mua định kỳ các tạp chí, dịch vụ nghe nhạc trực tuyến(Apple Music hoặc Spotify). Lưu ý là loại non-renewing subscription chỉ có trên App Store.

1. Cơ chế hoạt động

Về cơ chế hoạt động thì khi cài đặt, chúng ta sẽ phải tạo 1 sản phẩm ở phía Google Play/App Store có 1 product id(product token id), sau đó tạo 1 sản phẩm phía server và đặt product token id là id vừa được tạo ở phía Google Play/App Store. Sản phẩm này có thể là maganed product hoặc subscription tuỳ loại.

Khi user thực hiện mua sản phẩm, sẽ có một pop-up của Google Play hoặc App Store để thực hiện việc thanh toán. Sau khi thực hiện các bước thanh toán như nhập thẻ visa, nhập mật khẩu, confirm thanh toán… Google Play/App Store sẽ xử lý đơn hàng.

Sau khi xử lý thành công đơn hàng, store sẽ trả thông tin về receipt(hoá đơn) cũng như transaction(giao dịch) cho phía server của ứng dụng. Và phía sẽ server sẽ xử lý và mở các vật phẩm hoặc chức năng tương ứng mà user đã đặt mua.

Đối với subscription, sẽ có thêm một bước đó là cả phía server và ứng dụng(client) sẽ thực hiện kiểm tra tự động khi đến hạn đặt mua, và gửi thông tin về receipt lên Google Play/App Store để nhận thông tin xem user vẫn tiếp tục đặt mua định kỳ hay đã huỷ bỏ giao dịch.

Tất cả các bước thanh toán, xử lý trừ tiền và kiểm soát các giao dịch đều được thực hiện trên Google Play/App Store, và trả về các thông tin đó cho server của ứng dụng. Chính vì vậy việc kiểm thử sẽ phụ thuộc rất nhiều vào kết nối cũng như độ ổn định của server với Google Play/App Store.

2. Quan điểm test cho In App Billing

Khi thực hiện việc kiểm thử cho In App Billing, sẽ có những quan điểm test sau:

  • Đảm bảo việc thanh toán trên Google Play và App Store thành công. Đây là việc quan trọng nhất nhưng cũng dễ dàng để thực hiện nhất vì nó chỉ có hai kết quả là thành công hoặc thất bại. Nếu đã cài đặt kết nối đến Google Play/App Store thành công thì chắc chắn việc thanh toán sẽ thành công trừ một số trường hợp sau:
    • Tài khoản của user không đủ tiền. Việc kiểm tra trường hợp này không thể thực hiện trên môi trường sandbox(môi trường test) của Google Play và App Store vì trên môi trường test sẽ không bị trừ tiền vào tài khoản
    • Tài khoản google/apple sử dụng để kiểm thử không phải là tài khoản test dã được cài đặt trên Google Play Console/iTunes Conect. Trên môi trường sandbox bắt buộc phải cài đặt tài khoản test trước đó mới có thể thực hiện việc kiểm tra tính năng in-app billing
  • Kiểm tra xem sau khi thực hiện thanh toán thì các vật phẩm hoặc nội dung, tính năng đã được mở ra cho người dùng sử dụng hay chưa, các sản phẩm đó có đúng là sản phẩm mà người dùng đã mua hay không? Sẽ có nhiều các trường hợp mà sau khi mua nhưng các sản phẩm không được mở ra cho người dùng như là không cộng tiền ảo, nội dung đã subscription không được mở ra hoặc đã các sản phẩm này đã được mở ra nhưng không thể sử dụng được.
  • Đối với loại managed product, các sản phẩm tiêu hao(consumable) và không tiêu hao(non-consumable) có bị nhầm lẫn với nhau không?
    • Các sản phẩm tiêu hao có có bị mất đi theo số lần sử dụng hay sẽ sử dụng vô thời hạn?
    • Lượng tiêu hao có đúng như mô tả của vật phẩm hay không?
    • Đối với loại tiền ảo trong game thì loại tiền đã được mua có thể sử dụng chính xác để mua những vật phẩm khác trong game hay chỉ có thể mua được một số loại vật phẩm nhất định?
    • Các sản phẩm không tiêu hao có bị mất đi sau một thời gian sử dụng hay không?
    • Các vật phẩm không tiêu hao có thể bán lại, đem tặng được(tuỳ thuộc vào đặc tả yêu cầu) hay không?
    • Sau khi mua sản phẩm managed product thì người dùng có thể trả lại sản phẩm đó hay không?
    • Thời gian tối đa cho phép người dùng có thể trả lại sản phẩm là bao lâu?
  • Đối với loại subscription, thời hạn đặt mua có chính xác như những gì đã mô tả hay không?
    • Kiểm tra thời gian kết thúc việc đặt mua định kỳ có chính xác hay không. Đối với Android và iOS, thời gian hết hạn đặt mua sản phẩm có các loại thời hạn là:
Android(1 ngày với sandbox) iOS
Weekly 1 Week(3 phút với sandbox)
Monthly 1 Month(5 phút với sandbox)
3 Months 2 Months(10 phút với sandbox)
6 months 3 Months(15 phút với sandbox)
Yearly 6 Months(30 phút với sandbox)
Seasonal(từng mùa trong năm) 1 Year(1 giờ với sandbox)
  • Kiểm tra xem subscription có cho phép dùng thử hay không? Trước khi dùng thử có bắt buộc phải mua hay không? Đối với Android, nếu setting thì phải tối thiểu là 7 ngày và tối đa là 999 ngày. Với iOS thì có các tuỳ chọn từ 3 ngày cho tới 1 năm

  • Khi hết hạn subscription thì có tự động gia hạn hay không? Đối với môi tường test của Android, giao dịch sẽ được tự động gia hạn môi ngày cho đến khi người dùng Cancel(huỷ bỏ) trên Google Play. Đối với sandbox của iOS, subscription sẽ được gia hạn tối đa là 6 lần sau đó sẽ huỷ bỏ gia hạn

    • Khi đã huỷ bỏ gia hạn thì subscription có tiếp tục được hoạt động hay sẽ bị dừng lại?
    • Thời gian huỷ bỏ hoặc tiếp tục gia hạn có chính xác như đã được trả về trên Google Play/App Store hay không?
  • Đối với subscription, sau khi đã đặt mua thì các nội dung, tính năng có được mở đúng trong thời gian mà người dùng đã đặt mua hay không?

    • Trong khoảng thời gian đặt mua có được mở hay không?
    • Các nội dung đã được phát hành trước khoảng thời gian mà người dùng đặt mua thì có được mở ra(tuỳ thuộc đặc tả yêu cầu) hay không?
    • Các nội dung, tính năng sau khi đã huỷ bỏ việc đặt mua định kỳ phải không được mở ra cho người dùng hay không?
    • Sau khi tự động gia hạn thì các nội dung, tính năng có tiếp tục được mở ra cho người dùng hay bị đóng lại?
  • Giá tiền của sản phẩm có chính xác hay không?

    • Giá tiền trên ứng dụng có hiển thị đúng với cài đặt trên Google Play/App Store hay không? Ứng dụng sẽ phải lấy giá của sản phẩm trên Google Play/App Store và hiển thị ra ở trong app cho người dùng.
    • Đối với mỗi quốc gia, giá tiền có thay đổi theo đúng loại tiền tệ của quốc gia đó hay không? Google Play/App Store sẽ tự động nhận biết account đang sử dụng trên thiết bị là thuộc store của nước nào và sẽ trả về giá tương ứng cho quốc gia đó. Chúng ta cũng có thể tuỳ chỉnh giá cho từng quốc gia riêng biệt mà không tự động chuyển đổi theo giá chính.
  • Đối với Android, Google cho phép có thể cho phép người dùng thời gian gia hạn cho subscription là từ 3 tới 7 ngày đối với các thanh toán bị từ chối, qua thời gian đó thì subscription sẽ bị huỷ bỏ.

3. Tham khảo


All Rights Reserved