Xamarin用アプリ内課金(IAP)プラグイン


Xamarin用アプリ内課金(IAP)プラグイン

はじめに

このドキュメントでは、Xamarin用アプリ内課金(IAP)v2.0プラグインの使用方法を示すサンプルコードを紹介します。

Apache License, Version 2.0(以下「本ライセンス」)に基づいてライセンスが付与されています。本ライセンスに従わない場合、このファイルを使用することはできません。本ライセンスのコピーは次の場所で参照できます。

http://aws.amazon.com/apache2.0/(英語のみ)

また、プラグインファイルに付属するlicenseファイルにも含まれています。このファイルは、明示または暗示を問わず、いかなる保証も条件もなしに、「現状のまま」で配布されます。本ライセンスの下での権限および制限事項を規定する具体的な文言については、本ライセンスを参照してください。

メソッドとイベント

アプリでは、メソッド呼び出しを開始してイベントをリッスンすることができます。メソッド呼び出しでリクエストが開始され、その一部はレスポンスを返します。メソッド呼び出しのレスポンスとして送信されるのがイベントです。イベントは、システムで生成される非同期メッセージであり、リクエストされたデータを呼び出し元に返します。

NotifyFulfillmentを除き、すべてのメソッド呼び出しはシステムにデータをリクエストします。データのリクエストを開始すると、requestId文字列(一意のリクエスト識別文字列)を格納したオブジェクトがシステムから直ちに返されます。リクエストしたデータは、イベントを通じて非同期的に返されます。ただし、NotifyFulfillmentメソッド呼び出しについては、アプリからユーザーに購入アイテムが配信されたことをAmazonに通知する目的で使用するものなので、レスポンスは返されません。

イベントに格納されているデータを取得するには、ハンドラー関数を定義して、特定のイベントタイプのイベントリスナーにバインドする必要があります。返されたデータにはイベントハンドラー内からアクセスでき、また、リクエストメソッド呼び出しで返されたrequestIdに一致する一意のrequestIdが含まれています。必要に応じて、requestIdを使用して、特定のリクエストに対応するレスポンスを見つけることができます。

Cordovaでメソッド呼び出しを開始する方法

メソッド呼び出しを開始するには、一般に次の手順に従います。

  1. プラグインとのやり取りに使用するオブジェクトを取得します。
  2. 必要に応じて、入力をメソッドに渡すためのオブジェクトを作成します。
  3. 非同期オペレーションの場合は、システムレスポンスの準備が整ったときに呼び出されるコールバック関数を定義します。
  4. 必要な入力やコールバック関数を引数に渡して、オペレーションを呼び出します。

GetUserData

GetUserDataは、現在ログインしているユーザーのユーザーIDおよびマーケットプレイスを取得するリクエストを開始します。

using com.amazon.device.iap.cpt;

// プラグインとのやり取りに使用するオブジェクトを取得します
IAmazonIapV2 iapService = AmazonIapV2Impl.Instance;

// 入力なしで同期オペレーションを呼び出します
RequestOutput response = iapService.GetUserData();

// 戻り値を取得します
string requestIdString = response.RequestId;

Purchase

Purchaseは、商品の購入フローを開始します。

using com.amazon.device.iap.cpt;

// プラグインとのやり取りに使用するオブジェクトを取得します
IAmazonIapV2 iapService = AmazonIapV2Impl.Instance;

// オペレーションに入力として渡すオブジェクトを作成します
SkuInput request = new SkuInput();

// 入力値を設定します
request.Sku = "sku";

// 入力オブジェクトを渡して同期オペレーションを呼び出します
RequestOutput response = iapService.Purchase(request);

// 戻り値を取得します
string requestIdString = response.RequestId;

GetProductData

GetProductDataは、最大100個のSKUのアイテムデータを取得するリクエストを開始します。

using com.amazon.device.iap.cpt;

// プラグインとのやり取りに使用するオブジェクトを取得します
IAmazonIapV2 iapService = AmazonIapV2Impl.Instance;

// オペレーションに入力として渡すオブジェクトを作成します
SkusInput request = new SkusInput();

// SKU文字列のリストを作成します
List<string> list = new List<string>();
list.Add("sku1");
list.Add("sku2");
list.Add("sku3");

// 入力値を設定します
request.Skus = list;

// 入力オブジェクトを渡して同期オペレーションを呼び出します
RequestOutput response = iapService.GetProductData(request);

// 戻り値を取得します
string requestIdString = response.RequestId;

GetPurchaseUpdates

GetPurchaseUpdatesは、購入またはキャンセルされたアイテムに関するアップデートを取得するリクエストを開始します。

using com.amazon.device.iap.cpt;

// プラグインとのやり取りに使用するオブジェクトを取得します
IAmazonIapV2 iapService = AmazonIapV2Impl.Instance;

// オペレーションに入力として渡すオブジェクトを作成します
ResetInput request = new ResetInput();

// 入力値を設定します
request.Reset = true;

// 入力オブジェクトを渡して同期オペレーションを呼び出します
RequestOutput response = iapService.GetPurchaseUpdates(request);

// 戻り値を取得します
string requestIdString = response.RequestId;

NotifyFulfillment

NotifyFulfillmentは、購入アイテムの付与完了についてAmazonに通知します。

using com.amazon.device.iap.cpt;

// プラグインとのやり取りに使用するオブジェクトを取得します
IAmazonIapV2 iapService = AmazonIapV2Impl.Instance;

// オペレーションに入力として渡すオブジェクトを作成します
NotifyFulfillmentInput request = new NotifyFulfillmentInput();

// 入力値を設定します
request.ReceiptId = "receiptID";
request.FulfillmentResult = "FULFILLED";

// 入力オブジェクトを渡して同期オペレーションを呼び出します
RequestOutput response = iapService.NotifyFulfillment(request);

Cordovaでイベントを処理する方法

イベントを処理するには、一般に次の手順に従います。

  1. プラグインとのやり取りに使用するオブジェクトを取得します。
  2. イベントハンドラーを定義します。
  3. イベントハンドラーをイベントリスナーに登録します。

GetUserDataResponse

GetUserDataResponseは、GetUserData呼び出しのレスポンスを返します。

using com.amazon.device.iap.cpt;

// プラグインとのやり取りに使用するオブジェクトを取得します
IAmazonIapV2 iapService = AmazonIapV2Impl.Instance;

// イベントハンドラーを定義します
private void EventHandler(GetUserDataResponse args)
{
    string requestId = args.RequestId;
    string userId = args.AmazonUserData.UserId;
    string marketplace = args.AmazonUserData.Marketplace;
    string status = args.Status;
}

// イベントハンドラーを登録します
iapService.AddGetUserDataResponseListener(EventHandler);

PurchaseResponse

PurchaseResponseは、Purchase呼び出しのレスポンスを返します。

using com.amazon.device.iap.cpt;

// プラグインとのやり取りに使用するオブジェクトを取得します
IAmazonIapV2 iapService = AmazonIapV2Impl.Instance;

// イベントハンドラーを定義します
private void EventHandler(PurchaseResponse args)
{
    string requestId = args.RequestId;
    string userId = args.AmazonUserData.UserId;
    string marketplace = args.AmazonUserData.Marketplace;
    string receiptId = args.PurchaseReceipt.ReceiptId;
    long cancelDate = args.PurchaseReceipt.CancelDate;
    long purchaseDate = args.PurchaseReceipt.PurchaseDate;
    string sku = args.PurchaseReceipt.Sku;
    string productType = args.PurchaseReceipt.ProductType;
    string status = args.Status;
}

// イベントハンドラーを登録します
iapService.AddPurchaseResponseListener(EventHandler);

GetProductDataResponse

GetProductDataResponseは、GetProductData呼び出しのレスポンスを返します。

using com.amazon.device.iap.cpt;

// プラグインとのやり取りに使用するオブジェクトを取得します
IAmazonIapV2 iapService = AmazonIapV2Impl.Instance;

// イベントハンドラーを定義します
private void EventHandler(GetProductDataResponse args)
{
    string requestId = args.RequestId;
    Dictionary<string, ProductData> productDataMap = args.ProductDataMap;
    List<string> unavailableSkus = args.UnavailableSkus;
    string status = args.Status;

    // productDataMap内のアイテムごとに、SKUに対応する以下の値を取得できます
    // ("sku"は実際のSKUに置き換えてください)
    string sku = productDataMap["sku"].Sku;
    string productType = productDataMap["sku"].ProductType;
    string price = productDataMap["sku"].Price;
    string title = productDataMap["sku"].Title;
    string description = productDataMap["sku"].Description;
    string smallIconUrl = productDataMap["sku"].SmallIconUrl;
}

// イベントハンドラーを登録します
iapService.AddGetProductDataResponseListener(EventHandler);

GetPurchaseUpdatesResponse

GetPurchaseUpdatesResponseは、GetProductData呼び出しのレスポンスを返します。

using com.amazon.device.iap.cpt;

// プラグインとのやり取りに使用するオブジェクトを取得します
IAmazonIapV2 iapService = AmazonIapV2Impl.Instance;

// イベントハンドラーを定義します
private void EventHandler(GetPurchaseUpdatesResponse args)
{
    string requestId = args.RequestId;
    string userId = args.AmazonUserData.UserId;
    string marketplace = args.AmazonUserData.Marketplace;
    List<PurchaseReceipt> receipts = args.PurchaseReceipts;
    string status = args.Status;
    boolean hasMore = args.HasMore;

    // 購入レシートごとに、以下の値を取得できます
    string receiptId = receipts[0].ReceiptId;
    long cancelDate = receipts[0].CancelDate;
    long purchaseDate = receipts[0].PurchaseDate;
    string sku = receipts[0].Sku;
    string productType = receipts[0].ProductType;
}

// イベントハンドラーを登録します
iapService.AddGetPurchaseUpdatesResponseListener(EventHandler);