2013年1月22日火曜日

アプリ内課金の準備 Preparing Your In-app Billing Application

参照元(翻訳): Preparing Your In-app Billing Application | Android Developers

まずはIn-app Billing Version 3 APIを含むライブラリーをプロジェクトに追加する必要がある。Google Playと通信するためのパーミッションをアプリに設定することに加え、使用するAPI versionがGoogle Playでサポートされているか確認しなければならない。


Download the Sample Application

ここでは、アプリ内課金のサンプルアプリ「TrivialDrive」を実装の参考に使用する。このサンプルは課金サービスとmarshal and unmarshal data typesをすばやくセットアップしたり、アプリのメインスレッドからの課金リクエストを処理したりする便利なクラスを含む。

サンプルアプリのダウンロード:
  1. Android SKD Managerを開く。
  2. SDK Managerの中のExtrasセクションを開く。
  3. Google Play Billing Libraryを選択する。In-app BillingのVersion 3以上が選択されていることを確認する。
  4. ダウンロードを完了するためにinstallをクリックする。
/your/sdk/location/extras/google/play_billing/in-app-billing-v03 にサンプルファイルがインストールされる。


Add Your Application to the Developer Console

Google Play Developer Consoleで課金アプリの公開やアプリ内で購入可能な様々なデジタル商品の管理を行う。デベロッパーコンソールで新しいアプリのエントリーを作成したとき、自動的にアプリのpublic license keyが作られる。このキーはアプリからGoogle Playへのセキュリティ接続を確立するために必要である。アプリに対して一度だけこのキーの生成が必要で、apkファイルをアップデートするときはこれらのステップを繰り返す必要はない。

デベロッパーコンソールにアプリを追加:
  1. Google Play Developer Consoleにログイン。アプリ内アイテムを売るためにはGoogle Checkout Merchantアカウントが必要。
  2. もしまだ新しいバージョンのデベロッパーコンソールにログインしていない場合は、Try the new designをクリックする。
  3. All ApplicationsタブにあるAdd new applicationをクリックし、アプリ名を入力、Prepare Store Listingをクリックする。
  4. Service & APIs タブからアプリのために生成されたpublic license keyをメモる。これはBase64 の文字列で後にアプリのコードに組み込む必要がある。

Add the In-app Billing Library

Version 3を使うために、Android projectにIInAppBillingService.aidlファイルを追加しなければならない。Android Interface Definition Language (AIDL)ファイルはGoogle Play serviceとのインターフェイスを定義したものだ。

IInAppBillingService.aidlファイルはサンプルアプリのなかにある。新しいアプリの作成 or 既存のアプリの変更のどちらかによって、次の指示に従う。

New Project
  1. TrivialDraiveのサンプルファイルをAndroid projectにコピーする。
  2. これらのサンプルファイルのパッケージ名をあなたのプロジェクトで使用するパッケージ名に修正する。Eclipseではパッケージ名を右クリック、Refactor > Renameのショートカットが使える。
  3. AndroidManifest.xmlファイルを開きパッケージ属性の値を使用するパッケージ名に更新する。
  4. コンパイルがうまくいくようにimport statementを要求のある通り修正する。Eclipseではエラーを出しているファイル上でCtrl+Shift+Oのショートカットが使える。
  5. サンプルをあなたのアプリケーションを作成するために修正する。デベロッパーコンソールのBase64 public license keyをあたなのMainActivity.java上でコピーすることを忘れないように。
Existing Project
  1. IInAppBillingService.aidlファイルをAndroid projectに追加。
    • Eclipseを使っていれば、/src ディレクトリーにaidlファイルをインポートする。
    • そうでない場合は、次のディレクトリを作ってaidlファイルをコピーする。 /src/com/android/vending/billing
  2. アプリをBuildして、IInAppBillingService.javaファイルが /gen ディレクトリに生成されていることを確認する。
  3. TrivialDriveサンプルの /util ディレクトリのhelperクラスをプロジェクトに追加する。あなたのプロジェクトのコンパイルがうまくいくようにパッケージ名宣言を忘れずに変更する。
これであなたのプロジェクトはIn-app Billing Version 3ライブラリーを含んでいる。


Set the Billing Permission

Google Playの課金サービスとやりとりするための権限が必要になる。マニフェストファイルに次の1行を加える。

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


Initiate a Connection with Google Play

アプリから課金リクエストを送るためにActivityとGoogle Playの課金サービスをバインドしなくてはならない。サンプルで与えられたクラスが課金サービスのバインドを処理するので、あなたはネットワークの接続を直接管理しなくてよい。

Google Playとの同期通信をセットアップするために、activityのonCreateメソッドのなかでIabHeplerインスタンスを作成する。コンストラクタにactivityのコンテキストとライセンスキーを渡す。

Security Recommendation:Google Playから与えたれたライセンスキーそのままをコードに組み込まないことを強く勧める。代わりに、実行時に部分文字列を組み合わせて構成したり、暗号化したものを復号してコンストラクタに渡す。これにより悪意あるサードパーティが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のインスタンスを渡す。これはIabHelperが非同期セットアップを完了すると呼ばれる。セットアップの一環としてIabHelperはIn-app Billing Version 3 APIがGoogle Playでサポートされているかどうかチェックする。もしこのバージョンがサポートされていなかったりバインディング中にエラーが発生した場合はこのリスナーに通知がいき、エラーメッセージを含んだ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!  
   }
});

セットアップが正常に完了すると、mHeplerをGoogle Play serviceとの通信に使用できる。アプリを起動したとき、ユーザーがどのアプリ内アイテムを所有しているかを調べることは良い実践である。これについては後のセクションで触れる。

important: アクティビティを終了させるときはアンバインドするのを忘れてはならない。アンバインドしないとデバイスのパフォーマンスを下げる場合がある。アンバインドしリソースを開放するには、アクティビティが終了するときにIabHelperのdisposeメソッドを呼ぶ。

@Override
public void onDestroy() {
   if (mHelper != null) mHelper.dispose();
   mHelper = null;
}

0 件のコメント:

コメントを投稿