この記事はデベロッパー アドボケート、Neto Marin による Android Developers Blog の記事 "Android Developers Blog: Google Play Billing Library 1.0 released" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
6 月に、新しい Google Play Billing Library のデベロッパー プレビューについてお知らせしました。そして本日(*原文公開当時)は、Play Billing Library 1.0 の公式リリースについてお知らせいたします。このライブラリは、デベロッパーの皆さんがアプリの作業に集中できるよう、Google Play Billing の開発プロセスを簡単にするものです。
貴重なフィードバックや提案をありがとうございました。そのおかげで、今回の 1.0 リリースを実現することができました。ライブラリの特徴については、概要を紹介している次の動画をご覧ください。
アプリ内課金を実装したことがない方や、Play Billing Library で何を提供できるか知りたいという方は、アプリ内課金の概要に目を通して概念や用語を把握しておくと、Play Billing Library によるアプリ内課金の実装がしやすくなります。
Play Billing Library 1.0 を追加すると、APK には自動的に
次のコードは、
注: 新しいアプリにアイテムを追加する場合は、あらかじめアルファ版またはベータ版の配信チャンネルに公開する必要があります。詳細については、ドラフト版アプリのサポート終了をご覧ください。
現在のユーザーに対する価格を含むアイテムの詳細リストを取得するには、
ユーザーが購入するアイテムを選択したら、課金フローを開始してトランザクションの結果を処理する必要があります。アプリで購入リクエストを開始するには、Play Billing Library クライアントの
前述のように、トランザクションの結果は
よくある例としては、ユーザーが何度も購入を希望するような(ゲーム内の通貨や品物など)形でアプリ内アイテムの消費を可能にするケースが考えられます。また一般的には、一度しか購入しないアプリ内アイテムについては消費という形をとらず、永続的な効果があるサービス(プレミアム アップグレードなど)を提供します。
アイテムを消費するには、Play Billing Library クライアントで購入した際に返される
アイテムに関連付けられている
2013 年に Trivial Drive がリリースされてから、Android エコシステムには多くの新機能や端末、プラットフォームが追加されています。その進化を反映して、Trivial Drive v2サンプルは Android TV や Android Wear でも動作するようになっています。
このコードラボでは、ユーザーが「車を運転」する簡易版 Trivial Drive V2 にアプリ内購入を追加します。購入や定期購入をアプリに組み込む方法や、購入を処理する信頼性の高いアプリを開発するためのベスト プラクティスを学ぶことができます。
詳しい情報は、Play Billing Libraryに記載されています。また、Android Developers ウェブサイトには、クラスやメソッドが掲載された公式リファレンスが公開されています。プロジェクトで Play Billing Library を実装する方法をステップごとに説明したガイドは、ライブラリのトレーニング クラスをご覧ください。
実装やライブラリの使用方法、ベスト プラクティスに関する技術的な質問は、google-playおよび play-billing-libraryのタグをつけて StackOverflowに質問するか、Google+ ページのコミュニティにアクセスしてください。
Reviewed by Hak Matsuda - Developer Relations Team
6 月に、新しい Google Play Billing Library のデベロッパー プレビューについてお知らせしました。そして本日(*原文公開当時)は、Play Billing Library 1.0 の公式リリースについてお知らせいたします。このライブラリは、デベロッパーの皆さんがアプリの作業に集中できるよう、Google Play Billing の開発プロセスを簡単にするものです。
貴重なフィードバックや提案をありがとうございました。そのおかげで、今回の 1.0 リリースを実現することができました。ライブラリの特徴については、概要を紹介している次の動画をご覧ください。
始める前に
Play Billing を使うと、信頼されている支払いシステム経由で世界中のユーザーからの支払いを受け取ったり、Play Console の機能やレポートを活用して管理を行い、収益を高めることができます。アプリ内課金を実装したことがない方や、Play Billing Library で何を提供できるか知りたいという方は、アプリ内課金の概要に目を通して概念や用語を把握しておくと、Play Billing Library によるアプリ内課金の実装がしやすくなります。
はじめに
Play Billing Library は Maven レポジトリで公開されており、アプリのbuild.gradle
ファイルに次の依存関係を追加するだけで、プロジェクトに Play Billing Library を追加できます。 dependencies {
...
compile 'com.android.billingclient:billing:1.0'
}
Play Billing Library 1.0 を追加すると、APK には自動的に
com.android.vending.BILLING
パーミッションが追加されます。つまり、アプリのモジュールのマニフェストに手動でパーミッションを追加する必要はありません。 BillingClient と PurchasesUpdatedListener
これらのクラスは、ライブラリを Android アプリに組み込む際にもっとも重要なパーツとなります。BillingClient
は、アプリと Google Play の橋渡しを行います。このクラスを使うと、利用できるアイテムリストの取得、アプリ内アイテムや定期購入のための課金フローの開始(支払いインターフェースのオープン)、ユーザーの購入履歴の取得、定期購入の作成や変更ができます。 BillingClient
インスタンスを作成する際には、PurchasesUpdatedListener
を設定する必要があります。これによって、アプリは課金フロー後のトランザクションの結果やアプリ外での購入履歴(利用したプロモーション コードや別の端末で購入したアイテムなど)を含む In-app Billing API からのアップデートを受信できるようになります。 次のコードは、
PurchasesUpdatedListener
の onPurchasesUpdated()
メソッドをオーバーライドする例を示しています。 @Override
void onPurchasesUpdated(@BillingResponse int responseCode,
List<Purchase> purchases) {
if (responseCode == BillingResponse.OK
&& purchases != null) {
for (Purchase purchase : purchases) {
handlePurchase(purchase);
}
} else if (responseCode == BillingResponse.USER_CANCELED) {
// Handle an error caused by a user canceling the purchase flow.
} else {
// Handle any other error codes.
}
}
PurchasesUpdatedListener
は、アプリのアーキテクチャに応じて、Activity や任意のクラスで実装することができます。次に示すのは、BillingClient
インスタンスを作成し、PurchasesUpdatedListener
を設定するコードです。 mBillingClient = BillingClient.newBuilder(mContext)
.setListener(mPurchasesUpdatedListener)
.build();
アイテム一覧と販売
アプリ内でアイテムを販売するには、まず Play Console にアイテムを追加する必要があります。詳しいアプリ内アイテムの追加方法は、アプリ内課金の管理をご覧ください。注: 新しいアプリにアイテムを追加する場合は、あらかじめアルファ版またはベータ版の配信チャンネルに公開する必要があります。詳細については、ドラフト版アプリのサポート終了をご覧ください。
現在のユーザーに対する価格を含むアイテムの詳細リストを取得するには、
querySkuDetailsAsync()
を呼び出します。その際に、SkuDetailsResponseListener
インターフェースを実装したリスナーを指定する必要があります。次のサンプルコードに示すように、クエリが終了した際にリスナーに通知する onSkuDetailsResponse()
メソッドをオーバーライドすることができます。 List<String> skuList = new ArrayList<> ();
skuList.add("premiumUpgrade");
skuList.add("gas");
SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
params.setSkusList(skuList).setType(SkuType.INAPP);
mBillingClient.querySkuDetailsAsync(params.build(),
new SkuDetailsResponseListener() {
@Override
public void onSkuDetailsResponse(SkuDetailsResult result) {
// Process the result.
}
})
ユーザーが購入するアイテムを選択したら、課金フローを開始してトランザクションの結果を処理する必要があります。アプリで購入リクエストを開始するには、Play Billing Library クライアントの
launchBillingFlow()
メソッドを呼び出します。launchBillingFlow()
メソッド(BillingClient
のその他のメソッドも同様)は、UI スレッドから呼び出す必要があります。 launchBillingFlow()
メソッドの呼び出しには、購入するアイテムの商品 ID や商品タイプ(このケースでは、SkuType.INAPP
)など、購入の完了に必要なデータを含む BillingFlowParams
オブジェクトが必要です。BillingFlowParams
のインスタンスは、newBuilder()
メソッドを呼び出して取得します。 BillingFlowParams.Builder builder = BillingFlowParams
.newBuilder()
.setSku(skuId).setType(SkuType.INAPP);
int responseCode = mBillingClient.launchBillingFlow(builder.build());
前述のように、トランザクションの結果は
onPurchasesUpdated()
メソッドに送信されます。onPurchasesUpdated()
で受信したデータや購入の詳しい処理方法については、トレーニング ガイドのアイテムの購入セクションをご覧ください。 アイテムを消費する
デフォルトでは、すべてのアプリ内アイテムは管理されています。つまり、Google Play はアイテムの所有者を追跡しており、複数回購入することは認めていません。同じアイテムを再購入できるようにするには、再度アイテムを有効にする前にアイテムが消費される必要があります。よくある例としては、ユーザーが何度も購入を希望するような(ゲーム内の通貨や品物など)形でアプリ内アイテムの消費を可能にするケースが考えられます。また一般的には、一度しか購入しないアプリ内アイテムについては消費という形をとらず、永続的な効果があるサービス(プレミアム アップグレードなど)を提供します。
アイテムを消費するには、Play Billing Library クライアントで購入した際に返される
purchaseToken
文字列値を渡して consumeAsync()
メソッドを呼び出します。結果は、ConsumeResponseListener
インターフェースの onConsumeResponse()
メソッドから返されます。この結果を処理するには、メソッドをオーバーライドする必要があります。 アイテムに関連付けられている
purchaseToken
を使ってアイテムを消費する例を次に示します。 ConsumeResponseListener listener = new ConsumeResponseListener() {
@Override
public void onConsumeResponse(@BillingResponse int responseCode,
String outToken) {
if (responseCode == BillingResponse.OK) {
// Handle the success of the consume operation.
// For example, increase the number of player's coins,
// that provide temporary benefits
}
}
};
mBillingClient.consumeAsync(purchaseToken, listener);
サンプルのアップデート: Trivial Drive V2
新しいライブラリには、新しいサンプルが付属しています。新しい Play Billing Library を使ったアプリ内課金を実装する方法を理解してもらうために、Trivial Driveサンプルを一から書き直しています。2013 年に Trivial Drive がリリースされてから、Android エコシステムには多くの新機能や端末、プラットフォームが追加されています。その進化を反映して、Trivial Drive v2サンプルは Android TV や Android Wear でも動作するようになっています。
次のステップ
アプリに統合する前に、Google I/O 2017 で公開されたコードラボで Play Billing Library を試してみることもできます。購入と定期購入: Google Play でアプリを収益化するをご覧ください。このコードラボでは、ユーザーが「車を運転」する簡易版 Trivial Drive V2 にアプリ内購入を追加します。購入や定期購入をアプリに組み込む方法や、購入を処理する信頼性の高いアプリを開発するためのベスト プラクティスを学ぶことができます。
詳しい情報は、Play Billing Libraryに記載されています。また、Android Developers ウェブサイトには、クラスやメソッドが掲載された公式リファレンスが公開されています。プロジェクトで Play Billing Library を実装する方法をステップごとに説明したガイドは、ライブラリのトレーニング クラスをご覧ください。
今後もフィードバックをお願いします
問題や質問がある方は、Google Issue Tracker にバグレポートを送信してください。サンプルに関する問題や提案(バグや新機能など)については、Trivial Drive の問題ページからご連絡ください。実装やライブラリの使用方法、ベスト プラクティスに関する技術的な質問は、google-playおよび play-billing-libraryのタグをつけて StackOverflowに質問するか、Google+ ページのコミュニティにアクセスしてください。
Reviewed by Hak Matsuda - Developer Relations Team