2013-02-05 18 views
5

(Các) mã trạng thái phản hồi sẽ sử dụng Dịch vụ thanh toán trong ứng dụng của Google Play {ice, er} V3 khi điều kiện hết thời gian chờ mạng? Đây có phải là đồng phục giữa tất cả các chức năng của nó?Android: Mã phản hồi trong ứng dụng V3 trả về khi hết thời gian chờ?

+0

Tôi cũng gặp phải sự cố tương tự. Vui lòng kiểm tra vấn đề của tôi. http://stackoverflow.com/questions/16495510/iab-error-you-already-owned-this-item –

+0

@YanLinAung Tôi đoán cho dù người ta thấy vấn đề của bạn như là một "vấn đề tương tự" phụ thuộc vào quan điểm. ;) –

Trả lời

7

Tôi sẽ mô tả các phát hiện của tôi ở đây. Tôi đã thử nghiệm này trên một AVD với một GP đầy đủ tính năng cài đặt (GP Store V3.10.10, GP Services 2.0.12, G Services Framework 4.1.2), bằng cách kéo plug của máy chủ.

  • Phương pháp getPurchases() trả về một kết quả được lưu trữ nếu có thể (xin lưu ý rằng chúng tôi không nói về một bên ngoài bộ nhớ cache của Dịch vụ ở đây nhưng một cuộc gọi trực tiếp của getPurchases). Tất nhiên, điều này có nghĩa là hầu như mọi người sẽ luôn nhận được kết quả được lưu trong bộ nhớ cache trừ khi Dịch vụ được khởi tạo lại do mất dữ liệu cục bộ - trường hợp không có khả năng và thường không được xử lý theo cách đặc biệt trên cấp ứng dụng.
  • Phương thức consumePurchase() sẽ trả về giá trị số nguyên 6 (BILLING_RESPONSE_RESULT_ERROR) sau khi hết thời gian chờ nội bộ là 20 giây (do đó hãy thêm một chút thời gian cho đến khi người gọi nhìn thấy mã kết quả). Tôi đã nghi ngờ điều này mặc dù BILLING_RESPONSE_RESULT_ERROR được mô tả là Fatal error during the API action vì không có mã lỗi nào khác có ý nghĩa ở đây; thật không may, từ gây tử vong vẫn có phần không phù hợp với điều kiện tạm thời, chẳng hạn như thời gian chờ.
  • getSkuDetails() dường như hoạt động giống như consumePurchase(). Cập nhật: Hiện có bằng chứng rằng getSkuDetails() cũng có thể truy cập thông tin được lưu trong bộ nhớ cache trong dịch vụ cục bộ.
  • Dường như getBuyIntent() hoạt động tốt mà không cần kết nối nếu mặt hàng đã được dịch vụ biết đến. Điều này giải thích tại sao Hartok thấy một màn hình mua GP trống: Nó không phải là một vấn đề để có được một ý định mua từ IAB V3 mà không cần kết nối.

Kết luận: Dịch vụ thanh toán trong ứng dụng V3 dường như hoạt động với bộ nhớ cache nội bộ và thời gian chờ kết nối máy chủ là 20 giây. Đối với lỗi truyền thông máy chủ mà bộ đệm cục bộ không thể giải quyết, mã phản hồi 6 được sử dụng.

+0

Vậy điều gì xảy ra nếu bộ nhớ cache và máy chủ cục bộ của tôi không đồng bộ? Ví dụ: tôi liên tục nhận được hộp thoại "Bạn đã sở hữu mục này", mặc dù getPurchases không trả lại mục mà nó nói rằng tôi sở hữu? – VicVu

+0

@Vee Bạn đang đề cập đến một ứng dụng ypu đã tự viết, phải không? Nếu vậy, bạn có sử dụng mã ví dụ của Google không? (Gợi ý: Nó không phải là mạnh mẽ.) Tôi không chắc chắn nơi mà "bạn đã sở hữu này" đối thoại đến từ; nếu nó đang được hiển thị bởi phần trực tuyến Google Play, thì có thể có sự cố với bộ nhớ cache Dịch vụ của Google Play trên thiết bị của bạn; xóa dữ liệu cục bộ của dịch vụ đó. Nếu cuộc đối thoại bắt nguồn từ mã ví dụ IAB của Google Play thì đó sẽ là một câu chuyện khác - theo như tôi nhớ lại, nó thực hiện bộ nhớ đệm _additional_ dựa trên dấu thời gian hợp lệ. Đăng thêm chi tiết nếu cần. –

+0

@Vee One [tìm kiếm về mã ví dụ IAB của Google Play không mạnh mẽ] (http://stackoverflow.com/a/14935976/1856738); nó liên quan đến một khía cạnh khác nhưng tôi sẽ không tin tưởng mã mà không kiểm tra tình trạng lỗi quan trọng như vậy. –