準備你的 In-app Billing 程序

準備好你的內購應用

在開始使用 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

  1. 打開 Android SDK Manager.
  2. 在SDK Manager中展開 Extras 部分.
  3. 選擇 Google Play Billing Library.
  4. 點擊 Install packages 完成下載。

這個例子文件將會安裝到 <sdk>/extras/google/play_billing/. (譯者注:就是在你電腦上SDK目錄下面)windows

添加應用到控制檯


在 Google Play 開發者控制檯,你能夠發佈你的添加了 In-app Billing 的應用,還能夠管理來自你的應用中能夠銷售的各類數字商品。當你在開發者控制檯建立一個新應用後,控制檯會爲你的應用自動生成一個公鑰(public license key)。你將須要使用這個公鑰在你的應用和Google Play服務器之間創建一個可信賴的鏈接。這個公鑰在應用建立的時候生成,在之後更新你程序的APK文件時沒必要再次生成。安全

把你的應用添加到開發者控制檯:服務器

  1. 打開 Google Play Developer Console 並登錄,若是你先前沒有註冊的話須要先註冊一個新的開發者帳號。爲了銷售內購商品,你還須要一個 Google Wallet 商業帳號。
  2. 若是你尚未登錄到最新版本的話,就點擊 Try the new design 進入開發者控制檯的預覽版。
  3. 在 All Applications 標籤處添加一個新應用。
    1. 點擊 Add new application.
    2. 給你的新 In-app Billing 應用輸入一個名字.
    3. 點擊 Prepare Store Listing.
  4. 在 Services & APIs 標籤頁下找到Google Play爲你應用生成的公鑰並記下,一下子在你的程序裏會用到這個 Base64 字符串。

你的應用如今應該出如今開發者控制檯的應用列表中。網絡

添加 In-app Billing 庫文件


爲了使用 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 工程:異步

  1. 把 TrivialDrive 例子程序文件複製到你的工程。
  2. 把複製的文件包名修改爲你工程使用的包名。在 Eclipse,你可使用一個快捷方式: 右鍵選中包名,而後選擇 Refactor > Rename。
  3. 打開 AndroidManifest.xml 文件,把包名屬性值改爲你工程的包名。
  4. 看狀況修復 import 語句,讓你的工程能夠成功編譯。在 Eclipse,你可使用這個快捷方式: 在出錯的文件中按 Ctrl+Shift+O。 (譯者注:導包的快捷鍵,地球人都知道~~)
  5. 修改例子代碼來建立你本身的應用。記得把開發者控制檯爲你程序生成 Base64 公鑰拷貝到你的 MainActivity.java.

現有工程

添加 In-app Billing Version 3 library 到你已有的 In-app Billing 工程:

  1. 把 IInAppBillingService.aidl文件複製到你的 Android 工程。
    • 若是你正在使用eclipse: 把 IInAppBillingService.aidl 文件引入到工程的 /src 目錄下。
    • 若是你正在開發使用的是非eclipse環境: 建立下面的目錄 /src/com/android/vending/billing 並把 IInAppBillingService.aidl 文件複製到這個目錄下。
  2. 生成你的程序。在你工程的 /gen目錄下應該能夠看到一個生成的文件IInAppBillingService.java
  3. 把 TrivialDrive 例子中 /util 目錄下的輔助類添加到你的工程。記得改變這些文件中聲明的包名,這樣你的工程才能夠成功編譯。

如今你的工程應該已經包含了 In-app Billing Version 3 library.

設置 Billing 許可


你的程序應該有個能夠向 Google Play 的購買服務發送請求以及收到迴應的許可。爲了給你的應用添加必要的許可,把下面這行許可內容添加到你的manifest文件AndroidManifest.xml: 

<uses-permission android:name="com.android.vending.BILLING" />

 

初始化一個 Google Play 鏈接


爲了向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
相關文章
相關標籤/搜索