在開始使用 In-app Billing 服務以前,你須要先把包含 In-app Billing Version 3 API 的庫添加到你的Android工程中。你還須要設置你的應用和Google Play通訊須要的權限。另外,你還須要在你的應用和Google Play之間創建一個穩定鏈接。最後還要確認Google Play支持你應用程序使用的In-app Billing API版本html
在這個訓練課程,你將用到一個叫作 TrivialDrive
的示例程序對於In-app Billing Version 3的參考實現。 這個例子裏有些便捷類能夠快捷設置In-app Billing服務,編碼解碼數據類型以及在你程序的主線程處理In-app Billing請求。注1java
去下載例子程序:android
Extras
部分.這個例子文件將會安裝到 <sdk>/extras/google/play_billing/
. (譯者注:就是在你電腦上SDK目錄下面)windows
在 Google Play 開發者控制檯,你能夠發佈你的添加了 In-app Billing 的應用,還能夠管理來自你的應用中能夠銷售的各類數字商品。當你在開發者控制檯建立一個新應用後,控制檯會爲你的應用自動生成一個公鑰(public license key)。你將須要使用這個公鑰在你的應用和Google Play服務器之間創建一個可信賴的鏈接。這個公鑰在應用建立的時候生成,在之後更新你程序的APK文件時沒必要再次生成。安全
把你的應用添加到開發者控制檯:服務器
你的應用如今應該出如今開發者控制檯的應用列表中。網絡
爲了使用 In-app Billing Version 3 的功能,你必須把 IInAppBillingService.aidl
文件添加到你的工程中。 這個 Android Interface Definition Language (AIDL) 文件定義了Google Play 服務可用的接口。app
你能夠在提供的例子程序裏找到這個IInAppBillingService.aidl文件。根據你是建立一個新的應用仍是修改現有的應用,跟隨下面的指導把In-app Billing庫添加到你的工程中。
eclipse
添加 In-app Billing Version 3 library 到你的新 In-app Billing 工程:異步
TrivialDrive
例子程序文件複製到你的工程。AndroidManifest.xml
文件,把包名屬性值改爲你工程的包名。MainActivity.java
.添加 In-app Billing Version 3 library 到你已有的 In-app Billing 工程:
把 IInAppBillingService.aidl文件複製到你的
Android 工程。
IInAppBillingService.aidl
文件引入到工程的 /src
目錄下。/src/com/android/vending/billing
並把 IInAppBillingService.aidl
文件複製到這個目錄下。/gen目錄下應該能夠看到一個生成的文件IInAppBillingService.java
TrivialDrive
例子中 /util 目錄下的輔助類添加到你的工程。記得改變這些文件中聲明的包名,這樣你的工程才能夠成功編譯。如今你的工程應該已經包含了 In-app Billing Version 3 library.
你的程序應該有個能夠向 Google Play 的購買服務發送請求以及收到迴應的許可。爲了給你的應用添加必要的許可,把下面這行許可內容添加到你的manifest文件AndroidManifest.xml:
<uses-permission android:name="com.android.vending.BILLING" />
爲了向In-app Billing 發送請求和收到迴應,你必須把你的Activity綁定到 Google Play 的In-app Billing服務。在例子中已經提供了處理綁定服務的便捷類,因此你沒必要直接管理網絡鏈接。
爲了和Google Play設置同步通訊,在你程序Activity的 onCreate 方法中建立一個 IabHelper
實例。在 IabHelper 構造方法中傳Activity的 Context
還有先前在開發者控制檯生成的公鑰字符串。
安全建議: 強烈建議你不要把公鑰原樣的編寫到代碼裏。可替代的,在把公鑰傳給構造方法前,你能夠動態的用子字符串構造完整的公鑰,也能夠從一個加密的存儲中獲取它。注3 這樣作能夠有效地防止有些居心不良的第三方修改你APK文件中的公鑰。
IabHelper mHelper; @Override public void onCreate(Bundle savedInstanceState) { // ... String base64EncodedPublicKey; // compute your public key and store it in base64EncodedPublicKey mHelper = new IabHelper(this, base64EncodedPublicKey); }
接下來,調用你建立的 IabHelper實例中的
startSetup
方法來執行服務綁定。在方法中傳一個OnIabSetupFinishedListener
,這個listener會在 IabHelper
完成異步設置後調用一次。在設置過程當中 IabHelper
也會檢測Google Play是否支持In-app Version 3 API,若是這個版本的API不被支持,或者在創建服務綁定時出現錯誤,這個listener就會被通知而且傳給一個帶有錯誤消息的IabResult對象。
mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() { public void onIabSetupFinished(IabResult result) { if (!result.isSuccess()) { // Oh noes, there was a problem. Log.d(TAG, "Problem setting up In-app Billing: " + result); } // Hooray, IAB is fully set up! } });
若是這個設置成功完成,你如今就可使用這個 mHelper
引用來和Google Play服務通訊了。當你的應用啓動時,最好去查詢下Google Play,看看用戶都擁有哪些內購物品。詳細內容在後來的 Query Purchased Items 部分。
重要: 記得在你用完activity後解除和In-app Billing服務之間的綁定。若是你不解除綁定,這個開放的服務鏈接可能影響你設備的性能。爲了解除綁定並釋放你的系統資源,能夠在你的 Activity 銷燬的時候調用 IabHelper的
dispose 方法。
@Override public void onDestroy() { super.onDestroy(); if (mHelper != null) mHelper.dispose(); mHelper = null; }
注1:原文 In this training class, you will use a reference implementation for the In-app Billing Version 3 API called the sample application. The sample includes convenience classes to quickly set up the In-app Billing service, marshal and unmarshal data types, and handle In-app Billing requests from the main thread of your application.注2:原文 The convenience classes provided in the sample handles the binding to the In-app Billing service, so you don’t have to manage the network connection directly.注3:原文 Instead, you can construct the whole public license key string at runtime from substrings, or retrieve it from an encrypted store, before passing it to the constructor.TrivialDrive