2012年12月28日金曜日

アプリ内課金バージョン3 (In-App Billing Version 3)

ここではAndroid DevelopersのIn-app Billing Version 3のページを訳してみました。バージョン 3では、管理商品("managed products")のみをサポートしています。管理商品では、Google Playがユーザのアイテム所有の有無を全て管理してくれます。また、消費商品("consumable products")が扱えるようになりました。消費商品とは、ゲーム内の通貨など、アイテムが消費されるたび、再度購入ができるようになります。

In-app Billing Version 3
In-app Billing version 3 APIではアプリ内課金を簡単にあなたのアプリに統合することが出来ます。このバージョンは、改良された同期購入フロー、消費商品の所有の記録を簡単に行えるAPIやアプリ内購入データのローカルキャッシュなどの特徴を含んでいます。

Product Types
Google Play Developer Consoleを使って、商品タイプ、SKU、値段、説明文など、商品を定義することができます。詳細は、Administering In-app Billingを見てください。Version 3 APIは管理商品 ("managed products") のみサポートしています。

Managed In-app Products
アプリ内管理商品(managed in-app products) は、Google Playによって管理され記録された所有情報を持つアイテムです。ユーザが管理アイテムを購入したとき、Google Playは各ユーザごと、各アイテムの購入情報を保存します。特定ユーザが購入したアイテムの状態を復元するために、いつでもGoogle Playにクエリを送ることができます。ユーザがアプリをアンインストールしたり、ディバイスを変更したとしても、この情報はGoogle Play サーバ上に保存してあります。

Version 3 APIを使用する場合、アプリの中で管理アイテムを消費することができます。何度も購入することができるアイテム (例えばゲーム内の通貨、燃料や魔力など) の消費を実装することができます。いったん消費アイテムが購入されると、Google Playに消費リクエストを送ることでそのアイテムが消費されるまで、再び購入することは出来ません。商品の消費に関しての詳細は、Consuming Itemsを見てください。

Purchasing Items
Version 3 APIの購入の流れは以下の通りです。

  1. 使っているアプリ内課金 API のバージョンがサポートされているか確認するために、アプリはGoogle PlayにisBillingSupportedリクエストを送る。
  2. アプリがスタートしたときやユーザがログインしたとき、何のアイテムをユーザが所有しているか確定するために、Google Playでチェックすることを推奨します。ユーザのアプリ内商品の検索には、getPurchasesリクエストを送ります。リクエストが成功したら、Google Playは購入アイテムの商品IDのリスト、個々の購入アイテムの詳細リスト、購入のためのサインのリストを含んだBundleを返します。
  3. 通常、購入できる商品をユーザを知らせたいと思います。Google Playで定義した商品の詳細を検索するために、getSkuDetailsリクエストを送ることができます。検索リクエストには、商品IDのリストを明記する必要があります。リクエストが成功したら、Google Playは商品の値段、タイトル、詳細、購入タイプを含んだBundleを返します。
  4. 商品がユーザによって所有されていなかったら、購入プロセスを始めることができます。購入リクエストを始めるには、購入するアイテムの商品IDを他のパラメータと一緒にを明記した getBuyIntent リクエストを送ります。Developer Consoleで新しい商品を作るとき、商品IDを記録する必要があります。
a. Google Playは購入のためのチェックアウトUIをスタートするのに使うPendingIntentを含んだBundleを返します。 b. アプリはstartIntentSenderForResutメソッドを呼ぶことによってpending intentを立ち上げます。 c. チェックアウトフローが終了したとき (ユーザがアイテムを購入もしくは購入をキャンセルしたとき)、Google PlayはonActivityResultメソッドにレスポンスIntentを送ります。onActivityResutの結果コードは購入が行われたかキャンセルされたかどうかを示す結果コードを持っています。レスポンスIntentは購入されたアイテムについての情報を含んでいます。この購入取引を特定するために、レスポンス Intentはgoogle Playによって発行されたpurchaseToken Stringを含んでいます。このIntentはprivate developer key にサインした購入サインも含んでいます。
Version 3 APIのコールについて更に学びたい場合、In-app Billing Referenceをみてください。

Consuming Items
商品のユーザの所有状態を監視するために消費メカニズム 使用することができます。


バージョン3では、全てのアプリ内商品は管理されています。これは全てのアイテム購入のユーザの所有がGoogle Playによって保持されていることを意味します。そしてアプリ側は必要なときにユーザの購入情報を検索することができます。ユーザがアイテムの購入に成功したとき、その購入情報はGoogle Playに記録されます。一旦アイテムが購入されると、それは所有された("owned") 状態と見なされます。"owned"状態のアイテムはGoogle Play から購入することはできません。 Google Playが再び購入を可能にする前に、"owned"アイテムの消費リクエストを送らなければいけません。アイテムを消費するということは、非所有("unwoned")状態に戻り、前の購入データを破棄するということです。

ユーザの所有している商品リストを検索するには、アプリ側はgetPurchasesコールをGoogle Playに送ることができます。アプリ側はconsumePurchaseコールを送ることによって消費リクエストを作ることができます。リクエストの中で、購入時にGoogle Playから手に入れたアイテムの固有のpurchaseToken Stringを明確にしなければいけません。消費の登録に成功したら、Google Playはステータスコードを返します。

Non-consumable and consumable items

アプリ内商品を消費アイテムにするか非消費アイテムにするかは、あなた自身で決められます。

Non-consumable items
通常、アプリ内で一度だけ購入することができ、永続してベネフィットを提供するアイテムなので消費を実装をする必要はありません。一度購入したら、アイテムはユーザのGoogleアカウントに関連づけられます。非消費アイテムの例としてはプレミアムアップグレードやレベルパックなどです。

Consumable items
何度も購入することができるアイテムで消費を実装することができます。通常これらのアイテムは一時的な効果を提供します。例えば、ユーザのゲーム内でのキャラクターがライフポイントを得るためや、ゴールドコインを手に入れるなどです。アプリの中で購入したアイテムのベネフィットや効果を施すことは、商品をプロビジョニングするといいます。どのように商品がユーザに提供されるのか、開発者は、それを管理し記録する責任があります。
重要:アプリの中で消費アイテムをプロビジョニングする前に、Google Playに消費リクエストを送り、消費が記録されたことを指し示すレスポンスを受け取らなければいけません。

Managing consumable purchases in your application
消費アイテムを購入するための基本的な流れは以下のとおりです。

  1. getBuyIntentコールで購入フローを始めます。
  2. 購入が完全に成功したかどうかを示すBundleをGoogle Playから受け取ります。
  3. 購入が成功したら、consumePurchaseコールを作ることによって、購入を消費することができます。
  4. 消費が成功したかどうかを示す返答コードをGoogle Playから得ます。
  5. もし消費が成功したら、アプリの中で商品をプロビジョンします。
その後、ユーザがアプリをスタートアップもしくはログインするときには、ユーザが未処理の消費アイテムを所有しているかどうか確認しなければいけません。その場合、それらのアイテムの消費とプロビジョンが出来ているかを確認してください。ここではアプリの中で消費アイテムを実装するための推奨されたアプリのスタートアップの流れです。

  1. ユーザが所有しているアイテムを検索するためにgetPurchases リクエストを送ります。
  2. 何か消費アイテムがあったら、consumePurchaseを呼ぶことによってアイテムを消費します。消費アイテムの購入オーダが完了していて、しかし、消費リクエストを送る機会を持つ前に、ストップしてしまったりアクセスが切られてしまう場合があるので、このプロセスは必要です。
  3. 消費が完了したかどうかを示すレスポンスコードをGoogle Playから得ます。
  4. 消費が成功したら、アプリの中の商品をプレビジョンします。
Local Caching
Google playクライアントが、ディバイス上にin-appBilling情報をキャッシュすることができるので、更に頻繁にこれらの情報を検索するのに、例えば、getPurchasesコールを通して、Version3 APIを使うことができます。前のバージョンのAPIとは違い、Version 3 APIのコールは、Google Playに繋ぐネットワークコネクションの代わりにAPIの返答時間を十分にスピードアプしたキャッシュ検索を通して提供されます。

2012年12月22日土曜日

アプリ内課金概要 (In-app Billing Overview for Android)

Android DevelopersのIn-appBilling Overviewのページを訳しました。
アプリ内課金のバージョン2と3の違いとそれぞれの商品タイプについて説明されています。今後バージョン3での開発を勧めています。

アプリ内課金概要 (In-app Billing Overview)
ここでは、アプリ内にアプリ内課金(In-app Billing)を加えるために理解しておくべき、基本的なアプリ内課金の概念と特徴について説明します。

In-app Billing API

アプリはディバイスにインストールされているGoogle PlayアプリにあるAPIを使ってアプリ内課金サービスにアクセスします。Google PlayアプリはアプリとGoogle Playサーバ間の課金リクエスト(billing requests)とレスポンス(billing responses)を送ります。実際に、アプリはGoogle Playサーバと直接コミュニケーションを取ることはありません。代わりにアプリは課金リクエストをプロセス間通信によってGoogle Playアプリに送り、Google Playアプリからレスポンスを受け取ります。アプリはGoogle Play サーバ間のネットワーク通信の管理は一切しません。

アプリ内課金はGoogle Playで公開されたアプリにのみ実装することができます。アプリ内購入リクエスト( in-app purchase requests)を完了するために、Google PlayアプリはGoogle Playサーバにネットワークを通してアクセスする必要があります。


現在、Google Playはアプリ内課金APIに関して2つのバージョンを提供しています。どちらのバージョンを使うかはMigration Considerationsを参照してください。


Version 3 (Recommended)

  • Google Playからのプロダクト詳細のリクエスト、プロダクトのオーダー、ユーザのプロダクト所有に基づいたアイテムの復元などを簡単に行うため、簡素化されたAPIを通してリクエストは送られる。
  • オーダー情報は購入完了をディバイスに同期的に伝える。
  • 全ての購入は管理("managed")される。(Google Playはアプリ内プロダクトのユーザの所有を管理している。)ユーザはアプリ内アイテムのコピーを複数所有することはできない。いずれの時点でも1つのコピーだけ所有することができる。
  • 購入されたアイテムは消費することができる。消費された場合、そのアイテムは非所有状態("unowned")に戻り、Google Playから再び購入することができる。

Version 2

  • リクエストは単体APIインタフェース(sendBillingRequest)を通して送られる。
  • Google Playからのレスポンスは非同期で、Broadcast Intentの形で行われる。
  • 消費モデルは提供されない。自身で実装しなければいけません。
  • 非管理アプリ内購入アイテム (unmanaged)を管理アプリ内購入アイテム (managed) と同様サポートしている。
どちらのバージョンも幅広いAndroid端末に互換性があります。アプリ内課金Version 3はGoogle Play ストアーの最新バージョンが搭載されているAndroid 2.2以上を搭載の機種をサポートしています。Version 2も同じように互換性があります。詳細はVersion Notesを見てください。

In-app Products

アプリ内プロダクトはアプリ内からユーザに販売するために提供するデジタル商品です。デジタル商品の例は、ゲーム内の通貨、ユーザの経験を強化するアプリのアップグレード、新しいコンテンツなどが含まれます。

デジタルコンテンツを売ることだけにアプリ内課金を使うことができます。物理的商品、個人的サービス、物理的な配送を要求すものを売るためにアプリ内課金を使用することはできません。有料アプリとは違い、ユーザがアプリ内プロダクトを一度購入すると払い戻し画面は表示されません。


Google Playはコンテンツ配信の形で提供はしません。開発者にはアプリの中で売るデジタルコンテンツを配信する責任があります。アプリ内プロダクトは1つのアプリのみ明確に関連づけられています。たとえ同じ開発元であっても、他のアプリで発行されたアプリ内プロダクトを購入することはできません。


Product types

アプリの収益化の仕方に柔軟性を持たせるために、アプリ内課金は異なる商品タイプをサポートしています。全ての場合において、Google Play Developer Consoleを使って製品を定義することができます。

管理商品(managed)、非管理商品(unmanaged)、定期購買商品(subscriptions)の商品タイプをアプリ内課金で指定することができます。管理("managed")とは
Google Play がユーザのアカウントを元にアプリ内商品の所有情報を管理し記録することを示しています。一方非管理("unmanaged")とは、開発者自身で所有情報を管理しなければいけません。

APIバージョンの違いによる製品のタイプのサポートについて更に知りたい場合、以下の資料を見てください。Version2, Version3


Google Play Developer Console

Developer Consoleではアプリ内課金を実装したアプリを公開し、そのアプリから購入できる様々な商品を管理することが出来ます。

1度のみの購入や定期購入の自動更新といったアイテムを含む、
アプリに関連したデジタル商品のリストを作ることができます。各アイテムに対し、ユニーク商品ID (SKU),商品タイプ、値段、説明、商品の購入履歴をGoogle Playが管理をすべきかなどの情報を定義することができます。

また非公開のテストアプリにアクセス許可を持たせたテストアカウントを作ることができます。


商品や商品リストの設定に関してDeveloper Consoleの使い方を学ぶには、Administering in_app Billingを見て下さい。


Google Play Purchase Flow

Google Playはアプリ購入に使われるバックエンド精算サービスを使用するので、ユーザにとって一貫性のある親しみやすい購入の流れになっています。

重要:Google Play上でアプリ内課金サービスを使用する
にはGoogle Checkout Merchant のアカウントを持たなければいけません。

購入を開始するために、アプリは特有のアプリ内商品の課金リクエストを送ります。google Playは支払い形式のリクエストや認証、
ファイナンシャル取引の処理などを含む取引に関する精算の詳細をすべて管理します。

精算処理が完了すると、Google Playは注文番号、注文日時、そして支払いなどの購入の詳細をアプリに送ります。アプリはファイナンシャル取引を管理する必要はありません。それはGoogle Playによって提供されます。


The Sample Applications

アプリにアプリ内課金を統合する手助けとして、Android SDKはアプリ内で商品を売るための方法をデモした、2つのサンプルアプリを提供しています。

TrivialDrive sample for the Version 3 API

このサンプルはドライブゲームで商品購入を実装し、アプリ内課金 Version 3 APIの使い方を示しています。このアプリはアプリ内課金のレクエストの送り方、Google Playからの同期したレスポンスの管理の仕方をデモしています。また、APIを使ったアイテムの消費の記録の仕方なども紹介しています。Version 3のサンプルはアプリ内課金処理の方法と同様に自動署名認証の仕方も含まれています。

Dungeons sample for the version 2 API

このサンプルはアドベンチャーゲームのための商品と定期購買を販売するためのアプリない課金 Version 2 APIの使い方をデモしています。またデータベース、ユーザインタフェースそしてアプリ内課金の実装に使える基本的ロジックを含んでいます。

重要:アプリを公開する前にアプリのコードを難読化することを進めます。詳細情報は

Security and Designを見てください。

Migration Considerations

アプリ内課金を含んだアプリを新しく作る際やVersion 2 やそれよりも前のAPIからVersion 3のAPIにアプリ内課金の実装を移行する際に考慮するべきことは以下のとおりです。

Google PlayはVersion2とVersion3 APIどちらも同時にサポートを続ける予定です。自身のペースでVersion3に移行してください。アプリ内課金 Version 2のサポート状態の変更はGoogle Play チームから前もってお知らせします。

必要性によってどちらのAPIのバージョンを使えばいいか以下のテーブルを参照してください。
Table 1. Selecting the In-app Billing API Version for Your Project

Choose Version 3 if ...
  • You want to sell in-app products only (and not subscriptions)
  • You need synchronous order confirmations when purchases complete
  • You need to synchronously restore a user's current purchases
Choose Version 2 if ...

  • You want to sell subscriptions in your app


もし、アプリ内で商品を売っているアプリを既に公開している場合以下に注意してください。


  • Developer Consoleで前持って定義した管理アイテム("managed items")はVersion 3で使用できます。
  • Version 3 APIを使ってアイテムの購入リクエストを行う場合、既存アプリで非管理アイテム("unmanaged items")と定義されているものは管理アイテム("managed items")として扱われます。このアイテムのためにDeveloper Consoleに新しいプロダクトを作る必要はありません。このアイテムの購入のために同じプロダクトIDを使用することができます。Version2 もしくはその前のAIPを使ってその購入リクエストを作る場合、非管理アイテム("unmanaged items")としてそのまま扱われます。