Google Play In-App Billing(IAB)v3.0からAmazonアプリ内課金(IAP)v2.0に移行させる


Google Play In-App Billing(IAB)v3.0からAmazonアプリ内課金(IAP)v2.0に移行させる

このページでは、Google PlayのIABとAmazonのIAPの違いや、両方のAPIセットをアプリ内で使用する大まかな流れについてまとめています。

IABおよびIAPとは

Google PlayのIn-App Billingは、ユーザーがアプリから仮想アイテムを直接購入できるようにする機能です。たとえば、ユーザーはプレイ中のゲームの追加レベルを購入することができます。AmazonのIAPは、AmazonのAPIでこれと同等のことができる機能です。Google PlayのIn-App Billing機能を実装したアプリを既に持っている場合、コードの修正を行えば簡単にAmazonのアプリ内課金機能を使用することができます。どちらのAPIセットも同様の機能が備わっていますが、名前の付け方や用語が若干異なります。

AmazonアプリストアとAmazonデバイスの要件

Google PlayのIABを実装しているアプリを、Amazonアプリストアにも申請し、Amazonデバイス(Fireタブレットなど)で実行できるようにするには、IABの代わりにAmazonのIAPを実装する必要があります。Google PlayのIABはAmazonデバイスでは動作しません。

Amazon IAP v2.0とGoogle Play IAB v3.0の比較

Google PlayのIAB v3.0とAmazonのIAP v2.0の類似点および相違点については、下記を参照してください。

機能の比較

下表は、Amazon IAP APIとGoogle PlayのIAB APIの比較をまとめたものです。

機能 IAP v2.0(Amazon) IAB v3.0(Google Play) コメント
購入
インテントをAPIで処理する。 あり なし
簡単なAPI呼び出しのフレームワークがある。 あり なし
消費型アイテム
個々の消費型アイテムを複数回購入できる。 あり あり
非消費型アイテム
購入は1回。既に所有している非消費型アイテムを購入しようとすると通知される。 あり あり
定期購入型アイテム
定期購入型アイテムの期間に関して、さまざまなオプションがある。 あり あり Amazonのオプション: 1週間ごと、2週間ごと、1ヶ月ごと、2ヶ月ごと、3ヶ月ごと、6ヶ月ごと、1年ごと。Google Playのオプション: 1ヶ月ごと、1年ごと、季節ごと(カスタマイズ)
無料トライアル期間 あり あり
自動更新オプション あり あり
請求繰り延べオプション なし あり
レシート検証
購入に対するレシート検証サービス あり あり Google Playにはレシート検証機能が用意されていますが、Google Playのレシート検証プロセスは自動化されていません。

Google Playの管理対象アプリ内課金アイテムとAmazonの消費型アイテムおよび非消費型アイテムの比較

Google PlayのIABとAmazonのIAPのどちらを使用しても、ユーザーは同じ種類のアプリ内購入を利用できますが、Google PlayとAmazonでは購入アイテムの種類に対する用語が異なります。下記の表に、Amazonにおける用語とGoogle Playの用語をまとめています。

Amazon 説明 Google Playの対応する名称
消費型アイテム 購入後にアプリ(通常はゲーム)内で使用されるもの。複数回の購入が可能。 消費可能アイテム(管理対象アイテム) 追加のライフやアクション(ゲーム内)、ゲーム内のキャラクターへの追加武器。
非消費型アイテム 1回限りの購入。アプリやゲーム内で機能やコンテンツの使用制限をアンロック(解除)するために1回だけ購入するもの。 消費不可アイテム(管理対象のアプリ内課金アイテム) ゲーム内の追加レベルや、アプリ内の「プレミアムメンバー専用」機能のロック解除。
定期購入型アイテム プレミアムコンテンツやプレミアム機能の使用を期限付きで提供するもの。 定期購入 オンライン雑誌の定期購読、フットボールゲームのリーグへのアクセス。

Google PlayのIABでは、定期購入以外の購入はすべて「アイテムが購入され、ユーザーによって消費される」という扱い方をします。使用されたアイテムはアプリにプロビジョニングされ、その使用が記録として残ります。1回限りの購入となる可能性があるアイテム(新しいゲームレベルのアンロックなど)の場合は、開発時にアイテムが消費型か消費不可かを指定し、そのアイテムの購入を1回限りとするロジックを組み込むことができます。AmazonのIAPでは、このような買い切り型の購入アイテムは、ユーザーが繰り返し購入する可能性がある消費型アイテム(追加ライフなど)とは仕様上区別されます。

コードを移植する

このセクションでは、Google PlayのIAB APIからAmazon IAP APIにアプリを移植する方法を説明します。その手順は次のとおりです。

  1. AmazonのIAPをサポートするようにAndroidManifest.xmlファイルを構成する。
  2. アプリにIABとIAPを仲介するロジックを実装する。
  3. Amazon IAP APIを追加して実装する。
  4. アプリをテストする。

AndroidManifest.xmlファイルを構成する

AndroidManifest.xmlファイルを構成して、アプリのIAP Response Receiverを定義します。IAP Response Receiverによって、Amazonクライアントからのインテントの伝達が、アプリに確実に伝わるようになります。Google PlayのIABとAmazonのIAPの両方に対応している場合、IAB関連の要素はIAPでは無視されるため、これらを削除する必要はありません。

AndroidManifest.xmlファイルに、IAP ResponseReceiverに対応する<receiver>タグを追加します。

<application>
...
    <receiver android:name="com.amazon.inapp.iap.ResponseReceiver">
        <intent-filter>
            <action android:name="com.amazon.inapp.purchasing.NOTIFY" android:permission="com.amazon.inapp.purchasing.Permission.NOTIFY">
        </action></intent-filter>
    </receiver>
...
</application>

IABとIAPを仲介するロジックを実装する

アプリがホストされている場所を問わず、アプリには同じコードベースを使用することができます。必要なのは、AmazonアプリストアとGoogle Playのどちらからアプリがダウンロードされたかを判定するロジックをアプリに追加することだけです。ユーザーがアプリをダウンロードした場所に応じて、IAPとIABのいずれかに対応したメソッドを実行します。

下記のコード例では、パッケージがGoogle PlayとAmazonアプリストアのどちらからインストールされたかを判定します。

PackageManager pkgManager = context.getPackageManager();

 String installerPackageName = pkgManager.getInstallerPackageName(context.getPackageName());

 if(installerPackageName.startsWith("com.amazon")) {
 // Amazon
 } else if ("com.android.vending".equals(installerPackageName)) {
 // Google Play
 }

Amazon IAP APIを追加して実装する

AmazonのIAPはGoogle PlayのIABとほぼ同じように動作します。AmazonのIAP APIを実装するためにコード内にパスを作成する際、Google PlayのIABと同様のロジックフローを使用できますが、クラス名やメソッド名の違いを考慮する必要があります。

下記の表に、よく使われるIAPメソッドとそれに対応するIAB呼び出しをまとめています。

PurchasingServiceのメソッド PurchasingListenerのコールバック レスポンスオブジェクト 対応するIAB呼び出し
getUserData() onUserDataResponse() UserDataResponse N/A
getPurchaseUpdates() onPurchaseUpdatesResponse() PurchaseUpdatesResponse getPurchases()
getProductData() onProductDataResponse() ProductDataResponse getSkuDetails()
purchase() onPurchaseResponse() PurchaseResponse getBuyIntent()
UNAVAILABLE N/A N/A consumePurchase()

AmazonのnotifyFulfillment()の呼び出しと、Google PlayのconsumePurchaseの呼び出しは、ある程度対応しています。IABの管理対象アイテムでconsumePurchase()を呼び出すと、アイテムの状態が「未購入」に戻ります。これにより、実質上アイテムは消費型アイテムになります。その後、getPurchases()を呼び出しても、そのレスポンスにはレシートが表示されなくなります。アプリがgetPurchaseUpdates()を呼び出すまでの間、AmazonはnotifyFulfillment()の呼び出しで消費型アイテムのレシートを返します。

IAPのクラスとメソッドの詳細については、In-App Purchasing API Reference v2.0(アプリ内課金(IAP)APIリファレンスv2.0)を参照してください。

アプリをテストする

IAP v2.0を組み込んだアプリをテストするには、App Testerツールをダウンロード・インストールします。アプリ内課金(IAP)をテストするに記載された手順やリンクに従い、App Testerをインストール・使用してください。

アプリをローカルでテストした後は、ライブアプリテストサービスを使用して、指定したユーザーグループに対し、本番環境でアプリのベータテストを行うことができます。