Unity用IAP v2.0プラグイン
本ドキュメントでは、アプリ内課金(IAP)v2.0 SDKに代わるUnity用プラグインの使用方法を示すサンプルコードを紹介します。
Unity用プラグインはこちらからダウンロード可能です。
Apache License, Version 2.0(以下「本ライセンス」)に基づいてライセンスが付与されています。本ライセンスに従わない場合、このファイルを使用することはできません。本ライセンスのコピーは、https://aws.amazon.com/apache-2-0/(英語のみ)で参照できます。また、プラグインファイルに付属するlicenseファイルにも含まれています。このファイルは、明示または暗示を問わず、いかなる保証も条件もなしに、「現状のまま」で配布されます。本ライセンスの下での権限および制限事項を規定する具体的な文言については、本ライセンスを参照してください。
メソッドとイベント
アプリでは、メソッド呼び出しを開始してイベントをリッスンすることができます。メソッド呼び出しでリクエストが開始され、その一部はレスポンスを返します。メソッド呼び出しのレスポンスとして送信されるのがイベントです。イベントは、システムで生成される非同期メッセージであり、リクエストされたデータを呼び出し元に返します。
NotifyFulfillment
を除き、すべてのメソッド呼び出しはシステムにデータをリクエストします。データのリクエストを開始すると、requestId
文字列(一意のリクエスト識別文字列)を格納したオブジェクトがシステムから直ちに返されます。リクエストしたデータは、イベントを通じて非同期的に返されます。ただし、NotifyFulfillment
メソッド呼び出しについては、アプリからユーザーに購入アイテムが配信されたことをAmazonに通知する目的で使用するものなので、レスポンスは返されません。
イベントに格納されているデータを取得するには、ハンドラー関数を定義して、特定のイベントタイプのイベントリスナーにバインドする必要があります。返されたデータにはイベントハンドラー内からアクセスでき、また、リクエストメソッド呼び出しで返されたrequestId
に一致する一意のrequestId
が含まれています。必要に応じて、requestId
を使用して、特定のリクエストに対応するレスポンスを見つけることができます。
Unityでメソッド呼び出しを開始する方法
メソッド呼び出しを開始するには、一般に次の手順に従います。
- プラグインとのやり取りに使用するオブジェクトを作成します。
- 必要に応じて、入力をオペレーションに渡すためのオブジェクトを作成します。
- 非同期オペレーションの場合は、レスポンスの準備が整ったときに呼び出されるコールバック関数を定義します。
- 必要な入力やコールバック関数を引数に渡して、オペレーションを呼び出します。
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);
Unityでイベントを処理する方法
イベントを処理するには、一般に次の手順に従います。
- プラグインとのやり取りに使用するオブジェクトを作成します。
- イベントハンドラーを定義します。
- イベントハンドラーをイベントリスナーに登録します。
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);
例
Puchaserクラスのファイルを作成します。次のコードを追加します。
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using com.amazon.device.iap.cpt;
public class Purchaser : MonoBehaviour, IStoreListener
{
// プラグインとのやり取りに使用するオブジェクト(IAPサービスオブジェクト)を取得します。
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);
これで購入の準備が整いました。定義済みSKU「100_gold_stars」の購入を実際に処理する関数に、以下のコードを貼り付けます。
// オペレーションに入力として渡すオブジェクトを作成します
SkuInput request = new SkuInput();
// 入力値を設定します
request.Sku = "100_gold_stars";
// 入力オブジェクトを渡して同期オペレーションを呼び出します
RequestOutput response = iapService.Purchase(request);
// 戻り値を取得します
string requestIdString = response.RequestId;
ゲームが購入関数のレスポンスを受け取ると、EventHandler()メソッドが実行されます。