2013-02-05 99 views
5

Google Play應用內結算服務{ice,er} V3會在網絡超時情況下返回哪些響應狀態代碼?這在所有功能中是否一致?Android:超時後,哪些響應代碼在應用內結算V3時返回?

+0

我也遇到過類似的問題。 請檢查我的問題。 http://stackoverflow.com/questions/16495510/iab-error-you-already-owned-this-item –

+0

@YanLinAung我想一個人是否認爲你的問題作爲「類似問題」依賴於透視。 ;) –

回答

7

我將在這裏介紹我的發現。我已經通過拉動主機的插頭在安裝了全功能的GP(GP存儲V3.10.10,GP服務2.0.12,G服務框架4.1.2)的AVD上對此進行了測試。

  • getPurchases()方法返回一個緩存的結果(如果可能,請注意,我們不談論緩存外的服務這裏,但getPurchases的直接調用)。當然,這意味着除了由於丟失本地數據而重新初始化服務之外,幾乎總會得到緩存的結果 - 這種情況不太可能,並且通常不需要以特殊方式處理應用級別。
  • consumePurchase()方法將在推測的內部網絡超時時間爲20秒後返回整數值6(BILLING_RESPONSE_RESULT_ERROR)(因此要添加一段時間直到調用程序看到結果代碼)。儘管BILLING_RESPONSE_RESULT_ERROR被描述爲Fatal error during the API action,但我仍然懷疑這是因爲在這裏沒有其他錯誤代碼是合理的。不幸的是,這個詞致命的對於暫時的情況,例如超時,仍然有些不合適。
  • getSkuDetails()似乎表現就像consumePurchase()更新:現在有證據表明getSkuDetails()也可以訪問本地服務中的緩存信息。
  • 它看起來好像如果該項目已經知道服務getBuyIntent()工作沒有連接罰款。這就解釋了爲什麼Hartok看到一個空白的GP購買屏幕:從IAB V3購買沒有連接性的購買意向不是問題。

結論:應用內結算服務V3似乎與內部緩存和20秒的服務器連接超時一起工作。對於本地緩存無法解析的服務器通信錯誤,使用響應代碼6。

+0

那麼,如果我的本地緩存和服務器不同步會發生什麼?例如,即使getPurchases沒有返回它所說的我擁有的項目,我始終得到「您已經擁有此項目」對話框? – VicVu

+0

@Vee你指的是你自己寫的一個應用程序,對不對?如果是這樣,您是否使用Google示例代碼? (提示:它不健壯。)我不確定「你已經擁有這個」的對話是從哪裏來的;如果它是由Google Play在線部分顯示的,那麼設備上的Google Play服務緩存可能存在問題;擦除該服務的本地數據。如果對話來自Google Play IAB示例代碼,那麼這將是一個不同的故事 - 就我所知,它根據有效性時間戳記執行了一項_additional_緩存。發佈更多細節,如果需要。 –

+0

@Vee One [有關Google Play IAB示例代碼不健全的發現](http://stackoverflow.com/a/14935976/1856738);它涉及到另一個方面,但我不會相信沒有檢查這種重要錯誤條件的代碼。 –

相關問題