2012-01-05 55 views
1

我已經在Android Marketplace上有一個應用程序,可以在幾個月內購買應用程序內功能。我們的第一個問題是成功完成非託管購買並被收費的用戶,但無論出於何種原因,我的客戶端應用程序未將其記錄到我們的服務器中。這不會在100%的時間內發生,大多數購買都會成功執行,並且如果由於連接問題或其他原因無法將成功購買的服務器上傳到服務器,我們的重試邏輯非常積極。應用程序內購買非託管項目,購買狀態更改通知之間的實質性延遲

最近我們目睹了一個應用程序內購買非託管項目的情況,但onRequestPurchaseResponse方法(在示例代碼PurchaseObserver.java中定義,我們的代碼基於該方法)實際上並沒有被調用超過60秒。

我現在懷疑的是,在成功購買沒有上傳到我們的服務器的情況下,onRequestPurchaseResponse要麼永遠不會被調用,要麼在通知發生之前用戶退出應用程序,因爲它太延遲了。

我現在每次在用戶從Android Marketplace應用程序返回後調用onResume時都會顯示一個ProgressDialog,以防止用戶導航過快,從而阻止我們記錄購買。

任何人都可以告訴我,成功購買後是否有任何已知的錯誤涉及Android Marketplace應用程序的延遲或丟失通知,如果有,您已部署了哪些解決方法?

+1

我和你有同樣的問題,只是來到這篇文章:http://thenextweb.com/mobile/2012/01/05/notable-developer-koush-warns-users-and-devs-反對-androids-in-app-purchases/ – Emiam 2012-01-10 16:23:35

+0

謝謝!那篇文章明確描述了我們所看到的 – esilver 2012-01-10 16:35:20

+1

嗨,我是那篇文章中引用的開發人員。對於它的價值,我認爲非託管購買比管理購買(我使用的)更可靠。我懷疑你的問題可能只是你的一個錯誤的實現。根據google的說,這些bug在12月22日也是固定的。自那以後,我還沒有經歷過任何新的事件。 – koush 2012-01-10 16:38:15

回答

2

延遲不是一個錯誤。交易處理系統不是實時的,實際上沒有公開API的交易處理系統爲處理交易或將成功購買報告給商家所花費的時間量提供了堅實的保證。

但是,我不知道我看到了這個問題。只要用戶最終再次運行該應用程序,您的應用程序應該在某個時間點收到回叫通知。當然,假設Google排隊購買通知,直到它確信它們已經交付至少一次。我會認爲他們會。

在任何情況下,我認爲你有兩個選擇:

  1. 實現你的客戶始終假定收購成功,除非/直到聽到,否則。然後,不需要應用程序告訴服務器什麼時候發生購買,您只需要它告訴服務器什麼時候您認爲發生的購買沒有。這種方法與目前的方法有相同的延遲問題,但副作用不會對用戶造成不利影響。

  2. 只是等待最終的通知回調,然後發送它。除了鎖定整個應用程序以避免用戶導航外,只需顯示他們的購買狀態爲「等待來自Google的確認」,直到獲得回叫(取決於用戶的操作,可能會發生幾分鐘,實際購買後幾小時或幾天)。然後將信息發送到您的服務器,並在發送到服務器成功時更新應用程序中的購買狀態。

+0

同意延遲不是一個錯誤;那就是說,延遲應該出現在Android Marketplace應用程序本身中,而不是在Android Marketplace應用程序和我的客戶端應用程序之間進行通信。不幸的是,我的應用程序不能假定交易成功,因爲服務器驗證了交易的簽名。從根本上說,體系結構有缺陷 - 事務應該發生在服務器端,而不是客戶端,服務器端,客戶端和服務器端,但這正是Android Marketplace強制應用程序進入的地方。 – esilver 2012-01-06 01:36:34