2012年12月13日木曜日

In-app Billing Version 3 翻訳(Version 3 API 構成編)

チームEGGの曽川です。

今回は更に実装に近い部分に入っていきます。
誤訳やよい表現がありましたらご指摘ください。
原文はこちらです。

アプリ内課金バージョン3

アプリ内課金バージョン3 APIは、アプリにアプリ内課金の組み込みことを簡単にします。
このバージョンの機能には、改良された同期フロー、消耗品の所有を追跡するAPI、アプリ内課金のローカルキャッシングを含みます。

サービスタイプ

サービスタイプ、SKU、価格、説明などをGooglePlayデベロッパーコンソールを使用してサービスを定義します。
詳細については、Administering In-app Billingを参照してください。
バージョン3のAPIは管理対象のアプリ内サービスタイプのみサポートします。

管理対象アプリ内サービス
管理対象のアプリ内サービスはGooglePlayによって所有情報が管理されるアイテムです。
ユーザがマネージドアプリ内アイテムを購入すると、GooglePlayはそれぞれの購入情報を保管します。
これにより、特定のユーザーが購入したアイテムの状態を復元するために、後でいつでもGoogle Playに問い合わせることができます。
この情報は、ユーザがアプリをアンインストールしても端末を変えてもGooglePlay上で永続的に保存されます。

バージョン3のAPIを使用している場合、アプリの管理対象のアイテムの消費を管理できます。
通常は複数回購入できるアイテム(ゲーム内通貨、燃料、魔法の呪文)の消費を実装します。
一度購入すると、管理対象のアイテムはGoolePlayに消費リクエストを送り、アイテムを消費するまで購入できません。
アプリ内サービスの消費の詳細については、「アイテムの消費」を参照してください。


アイテムの購入

バージョン3のAPIを使用した一般的な購入の流れは次の通りです。
  1. アプリは、使用しているアプリ内課金APIのターゲットバージョンがサポートされているか決定するためにisBliingSupportedリクエストをGooglePlayに送ります。
  2. アプリの開始やログインした時に、アイテムをユーザが所持しているか決定するためにGooglePlayに確認することを推奨します。
    ユーザのアプリ内課金を照会するためには、getPurchasesリクエストを送信します。
    リクエストが成功すれば、GooglePlayは購入したアイテムのサービスIDのリスト、各購入アイテムの詳細リスト、購入のための署名リストを含むBundleを返します。
  3. 通常、購入可能なサービスを知らせたいと思います。
    アプリ内サービスの詳細を照会するために、アプリはgetSkuDetailsリクエストを送信できます。
    照会するリクエストにサービスIDのリストを指定しなければなりません。
    リクエストが成功すれば、GooglePlayはサービス価格、タイトル、説明、購入タイプを含むサービス詳細のBundleを返します。
  4. アプリ内サービスがユーザに所有されていない場合、購入を開始することができます。
    購入リクエストを開始するために、アプリは。他のパラメータを一緒に購入するアイテムのサービスIDを指定して、getBuyIntentリクエストを送信します。
    デベロッパーコンソールで新しいアプリ内サービスを作成する際は、サービスIDを記録する必要があります。
    1. GooglePlayはアプリが使用するPendingIntent(購入の支払いをするUIを開始するため)を含むBundleを返します。
    2. アプリは startIntentSenderForResultメソッドを呼び出すことで、Pending Intentを起動します。
    3. 購入フローが終了すると(ユーザが正常にアイテムを購入した、または購入をキャンセルした)、GooglePlayはレスポンスインテントonActivityResultメソッドに送ります。
      onActivityResultの結果のコードは、課金が成功したかキャンセルしたかを示す結果コードを持っています。
      レスポンスインテントは、purchaseTokenの文字列(購入トランザクションを一意に識別するためのGooglePlayが生成)を含む購入されたアイテムの情報を含みます。
      Intentは購入の署名(開発者のプライベートキーで署名された)を含みます。
バージョン3のAPI呼び出しとサーバーの応答の詳細については、In-app Billing Referenceを参照してください。

図1.購入リクエストのための基本的なシーケンス

アイテムの消費
アプリ内サービスのユーザの所有を追跡するために、消費の仕組みを使用します。
バージョン3では、全てのアプリ内サービスは管理されます。
アプリ内で購入した全てのアイテムについてのユーザの所有権は、GooglePlayによって保持されることを意味します。
そしてアプリはユーザの購入情報を必要なときに照会できます。
ユーザがアイテムを正常に購入すると、購入がGooglePlayに保存されます。
一度アイテムを購入すれば、「所有」されているとみなされます。
「所有」された状態のアイテムは、GooglePlayから購入することはできません。
GooglePlayで再び購入可能な状態にする前に、「所有」アイテムの消費リクエストを送らなければいけません。
アイテムの消費は、「所有していない」状態に戻し、以前の購入データを破棄します。

ユーザが所有するサービスのリストを取得するためには、アプリからgetPurchasesをGooglePlayに送信します。
アプリはconsumePurchaseを送信することで消費リクエストを行うことができます。
リクエストの引数で、購入時はGooglePlayから得た、アイテムの一意となるpurchaseToken文字列を指定しなければなりません。
GooglePlayは消費が正常に記録されたかどうかを示すステータスコードを返します。

非消費/消費アイテム
アプリ内サービスを非消費/消費アイテムを決めるのはあなた次第です。

非消費アイテム
通常、アプリ内で一度購入すると永続的にメリットを提供するため、アイテムの消費を実装しません。
購入後、アイテムは永続的にユーザのGoogleアカウントに関連付けられます。
非消耗品の例としては、プレミアムアップグレードやレベルパックです。

消費アイテム
非消費アイテムとは対照的に、購入を複数回利用できるようにアイテムの消費を実装できます。
通常、消費アイテムは特定の一時的な効果を提供します。
例えば、ゲーム内キャラクターのライフ増加やインベントリ内に臨時でコインを獲得することです。
アプリ内で購入したアイテムのメリットや効果を供給することを、アプリ内サービスのプロビジョニング(支給)と呼ばれます。
あなたはアプリサービスがどのようにユーザに提供されるか、制御や追跡する責任があります。

重要:アプリ内で消費アイテムをプロビジョニング(支給)する前に、GooglePlayに消費リクエストを送り、消費が記録されたことを示す成功リクエストを受け取らなければいけません。

●アプリでの消費アイテム購入の管理
消費アイテムを購入するための基本的なフローは以下の通りです。

  1. getBuyIntentを呼び出し、購入フローを起動します。
  2. 購入が正常に完了したら、GooglePlayからレスポンスBundleを取得する。
  3. 購入に成功した場合は、consumePurchaseを呼び出し、購入を消費します。
  4. 消費が正常に完了したかどうかを示すGooglePlayからのレスポンスコードを取得します。
  5. 消費が完了したら、アプリのサービスのプロビジョニング(支給)をおこないます。

その後、ユーザがアプリを起動するかログインする時に、未決済の消費アイテムをユーザが所有するかチェックする必要があります。
もし、あるならばアイテムを消費し、支給してください。

  1. ユーザにより所有されているアイテムを照会するためにgetPurchasesリクエストを送ります。
  2. 消耗品がある場合は、comsumePurchaseを呼び出し、アイテムを消費します。この手順は、アプリが消費アイテムの購入注文を完了したが、停止もしくはアプリが消費リクエストを送信する機会の前に切断されたかもしれないので必要です。
  3. 消費が正常に終了したかどうかを示す、GooglePlayからのレスポンスコードを示します。
  4. 消費が成功していれば、アプリでサービスを支給してください。


図2.消費リクエストのための基本的なシーケンス

ローカルキャッシング

GooglePlayクライアントは現在、デバイス上でローカルにアプリ内課金情報をキャッシュするので、更に頻繁に情報を照会するためにバージョン3のAPIを使えます(例えばgetPurchaseの呼び出しを介して)。
以前のAPIのバージョンとは異なり、バージョン3の多くの呼び出しは、GooglePlayとのネットワーク接続を介する代わりにキャッシュのルックアップを通して処理されます。
これはAPIの応答時間が格段に上がっています。

Except as noted, this content is licensed under Creative Commons Attribution 2.5.

0 件のコメント:

コメントを投稿