2013年1月22日火曜日

販売のためのアプリ内商品の確立 Establishing In-app Billing Products for Sale

参照元(翻訳): Establishing In-app Billing Products for Sale | Android Developers

課金アプリを公開する前に、Google Play Developer Consoleで販売可能なデジタル商品のプロダクトリストを定義する。

Specify In-app Products in Google Play

デベロッパーコンソールでアプリ内商品の情報を定義し、商品リストをアプリに関連付ける。
  1. 署名されたAPKファイルをビルドする。
  2. デベロッパーコンソールで作成したアプリのエントリーを開く。
  3. APKタブからUpload new APKをクリックし署名済みAPKをアップロードする。まだ公開はしない!
  4. アップロードしたアプリのin-app Productsタブをクリックする。
  5. 新しい商品を追加するためのoptionをクリックし、商品情報のフォームを埋める。商品情報は、アイテムのユニークID(SKU)、説明、価格、利用できる国。IDは後ほどアプリで商品詳細の問い合わせに必要なのでメモる。
    important: Version 3は管理されたアプリ内商品のサポートのみを提供する。ゆえに新しいアイテムをデベロッパーコンソールの商品リストに追加するときは、購入タイプが"Managed"であることを確認する。
  6. フォームの入力が終わればすぐに商品はアクティブになりアプリで購入することができる。
    Warning: APKのアップデートから反映まで2-3時間かかる場合がある。もし反映前にテストを行うと、アプリケーションは次のエラーメッセージと共に'purchase cancelled'レスポンスを受け取るだろう。"This version of the application is not enabled for In-app Billing."

Query Items Available for Purchase

Google Playに問合せを行い、アプリに関連づいた商品情報(価格、タイトル、説明、タイプ)をプログラムで検索することができる。これは例えば、ユーザーが利用可能だが所有していないアイテムのリストを表示したいときに便利だ。

Note: 問い合わせを行うときは、商品のIDを明示する必要があるだろう。各商品IDはデベロッパーコンソールの"In-app Products"タブのName/ID欄に並んでいる。

商品情報の検索には、IabHelperインスタンスのqueryInventoryAsync(boolean, List, QueryInventoryFinishedListener)を呼ぶ。

  • 最初の引数は商品情報を検索するかどうかを指定する(trueをセットすべき)。
  • Listはあなたの検索したい商品のID(SKUとも呼ぶ)をひとつ以上含む。
  • 最後のQueryInventoryFinishedListenerは問い合わせが完了しレスポンスを扱うときに呼ばれるリスナーを指定する。
サンプルにある便利なクラスを使用すれば、このクラスは課金リクエストを管理するバックグランドスレッドを操作するので、メインスレッドから安全に問合せを行うことができる。
次のコードはあらかじめデベロッパーコンソールで定義したSKU_APPLEとSKU_BANANAのIDを持ったふたつの商品の詳細を検索する方法を示している。

List additionalSkuList = new List();
additionalSkuList.add(SKU_APPLE);
additionalSkuList.add(SKU_BANANA);
mHelper.queryInventoryAsync(true, additionalSkuList,
   mQueryFinishedListener);

問い合わせが成功すると、クエリーの結果がInventoryオブジェクトに保存され、このオブジェクトはリスナーに返される。

次のコードは検索結果からアイテムの価格を調べる方法を示している。

IabHelper.QueryInventoryFinishedListener 
   mQueryFinishedListener = new IabHelper.QueryInventoryFinishedListener() {
   public void onQueryInventoryFinished(IabResult result, Inventory inventory)   
   {
      if (result.isFailure()) {
         // handle error
         return;
       }

       String applePrice =
          inventory.getSkuDetails(SKU_APPLE).getPrice();
       String bananaPrice =
          inventory.getSkuDetails(SKU_BANANA).getPrice();

       // update the UI 
   }
}

0 件のコメント:

コメントを投稿