2014-10-03 81 views
5

我一直在努力與Android IAB v3一段時間。我一直在我的測試設備上工作。但是,我的崩潰報告服務顯示兩個重複的崩潰:一個用於空指針異常,另一個用於非法狀態異常。我試着更新Google示例代碼,並提供來自面臨類似問題的Stackoverflow用戶的衆多建議。我已經閱讀了「閱讀崩潰報告,做研究,嘗試修復崩潰,提交更新,再次看到相同的崩潰報告」循環幾次。我認爲是時候採取不同的方法。當前Android IAB參考

如果您是從今天開始使用Android IAB,那麼您會選擇什麼作爲代碼示例,修復程序,文檔等的最新正確資源?

這不一定是單一資源。示例代碼,來自SO帖子的補丁,博客帖子甚至「Android SDK Manager更新」的任何組合都將有所幫助。理想情況下,我們可以爲IAB的新人創建一個資源,以防止他們因嘗試整合服務而頭痛不已。


編輯1:在崩潰

java.lang.IllegalStateException: Can't start async operation (refresh inventory) because another async operation(launchPurchaseFlow) is in progress. 
    at com.android.vending.billing.IabHelper.flagStartAsync(IabHelper.java:832) 
    at com.android.vending.billing.IabHelper.queryInventoryAsync(IabHelper.java:623) 
    at com.android.vending.billing.IabHelper.queryInventoryAsync(IabHelper.java:651) 
    ... 


java.lang.NullPointerException 
    at com.android.vending.billing.IabHelper.launchPurchaseFlow(IabHelper.java:398) 
    at com.android.vending.billing.IabHelper.launchPurchaseFlow(IabHelper.java:350) 
    ... 

那些更多信息是兩個例外。他們並不總是發生在IabHelper的相同地方。我可能只是補丁,但這似乎不是解決這個問題的正確方法。另外,它不會幫助其他人。

我可能使用過時的谷歌示例代碼。但是,我搜索了很多,找不到更近的東西。

+1

我絕對第二你的想法。獲得更多有關上面提到的兩次崩潰的信息也是非常好的。 – 2014-10-05 23:54:15

+1

SO不是這樣的問題的地方,它是[脫離主題](http://stackoverflow.com/help/on-topic),應該問別的地方。擁有這樣的資源確實是一個好主意,但它不是那個地方。 – MByD 2014-10-05 23:56:08

+1

@MByD Stackoverflow是許多開發者在Anroid IAB v3遇到問題時經常光顧的地方。因此,我認爲這是這個問題的理想場所。 – SundayMonday 2014-10-06 00:18:50

回答

6

嘿我也在從事InApp Purchase工作10天以來,我已成功集成我現有的應用程序,並準備好讓它活着。最初,當我開始這樣做時,我已經下載谷歌InApp計費示例來自here,稱爲「Trivial Drive」。

但它沒有幫助我,因爲它有很多問題和錯誤,所以我決定從頭開始使用新的v3 api,你可以找到here。本教程有明確的解釋,這將有助於你,如果你有時間看到this youtube視頻谷歌員工已經清楚地說明如何整合它。

另外,如果你想快速的例子,我有一個示例應用程序,你可以從here下載。隨意問你是否有任何問題。

1

您可能正在使用異步操作。目前的IabHelper不是 安全的情況下,你使用...異步方法。問題是,在異步操作正在運行的任何 時刻,可以在主線程 線程上調用dispose。在這種情況下,您將得到NullPointerExceptions和IllegalStateExceptions。

嘗試用這種克隆studiozanandroid

隨着裁判這個Ansdownload the patch here避免異步錯誤。

以外的結帳簽名驗證問題,如在此pay me lib,嘗試使用OpenIAB libs。

-1

不管你做什麼不要使用IabHelper。這是應用帳單早期版本的剩餘部分。對於版本3,這不需要,因爲它引入了另一個圖層並且是越野車。

只需繼續並執行帳單,如官方文檔中所示 - implementing in app billing

API的V3基本上只包含三種方法,實現起來非常簡單。如果您認真對待應用內付費,那麼您必須瞭解這個過程如何運作,無論是圖書館還是幫手都無法幫助您。

+2

你所指的官方文檔也使用IabHelper ...你可以在這裏查看:http://developer.android.com/training/in-app-billing/preparing-iab-app.html – 2015-06-10 19:52:08

2

第一個IllegalStateException正在發生,因爲之前啓動的使用IAB Helper的操作尚未完成。

可能原因:

  1. 忘了打電話給mHelper.dispose()在活動onDestroy()
  2. 如果您正在啓動購買按鈕,請點擊快速雙擊某個設備上的按鈕會導致崩潰。

在您的情況下,您正試圖在已經啓動launchPurchase時查詢庫存。

解決方案: 異步操作的狀態反映在變量mAsyncInProgressIabHelper中。您將不得不將變量的範圍更改爲public,它默認打包。然後,您可以在查詢變量後採取以下兩種方法之一:

確保您在onDestroy()活動中呼叫mHelper.dispose()

  1. 取消當前操作,並開始新的操作忽略

如果任何操作正在運行
  • 當前請求。
  • flagStartAsync函數中拋出異常。

    要想知道NullPointerException的根本原因,您必須提供帶有行號的launchPurchasFlow代碼。

    其他注意事項,你應該採取: 爲了避免「IAB幫手未設置無法執行操作:launchPurchaseFlow當你調用launchPurchaseFlow之前IabHelper設置完成時所引起

    您可以禁用買入。按鈕默認啓用onIabSetupFinished回撥IabHelper的按鈕,因此只有當IabHelper設置完成時,按鈕才能工作