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


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

はじめに

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

Apache License, Version 2.0(以下「本ライセンス」)に基づいてライセンスが付与されています。本ライセンスに従わない場合、このファイルを使用することはできません。本ライセンスのコピーは、http://aws.amazon.com/apache2.0/(英語のみ)で参照できます。また、プラグインファイルに付属するlicenseファイルにも含まれています。このファイルは、明示または暗示を問わず、いかなる保証も条件もなしに、「現状のまま」で配布されます。本ライセンスの下での権限および制限事項を規定する具体的な文言については、本ライセンスを参照してください。

メソッドとイベント

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

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

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

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

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

  1. APIパッケージをインポートします。
  2. 必要に応じて、入力をオペレーションに渡すためのオブジェクトを作成します。入力オブジェクトを作成するには、いくつかの方法があります。詳細については、入力オブジェクトの作成を参照してください。
  3. 非同期オペレーションの場合は、レスポンスの準備が整ったときに呼び出されるコールバック関数を定義します。
  4. 必要な入力やコールバック関数を引数に渡して、オペレーションを呼び出します。

入力オブジェクトの作成

入力オブジェクトは、次のいずれかの方法で定義できます。

  • コンストラクターに引数を渡す。
  • 空のオブジェクトを作成し、暗黙的なセッターを使用してオブジェクトのプロパティを設定する。
  • 空のオブジェクトを作成し、withセッターメソッド呼び出しをチェーン化する。

以下では、入力オブジェクトに定義されている各メソッドについて説明し、入力オブジェクトを作成するための3つの方法の例を示します。

NotifyFulfillmentInput

public function NotifyFulfillmentInput(receiptId:String=null, fulfillmentResult:String=null)

コンストラクター。コンストラクターは、メンバー変数に対応する引数をオプションとして受け取ります。コンストラクターに引数を指定しなかった場合は、暗黙的なセッターを使用するか、withセッター呼び出しをチェーン化することで、後からメンバー変数の値を設定できます。

public function withReceiptId(receiptId:String):NotifyFulfillmentInput

withセッター。NotifyFulfillmentInputオブジェクトのレシートIDを設定し、呼び出しをチェーン化できるようにそのオブジェクトを返します。

public function get receiptId():String

暗黙的なゲッター。ドット表記によるプライベート変数へのアクセスを可能にします。レシートIDを表す文字列値を返します。

public function set receiptId(receiptId:String):void

暗黙的なセッター。ドット表記によるプライベート変数へのアクセスを可能にします。レシートIDを表す文字列値を設定します。

public function withFulfillmentResult(fulfillmentResult:String):NotifyFulfillmentInput

withセッター。NotifyFulfillmentInputオブジェクトのアイテム付与の結果を設定し、呼び出しをチェーン化できるようにそのオブジェクトを返します。

public function get fulfillmentResult():String

暗黙的なゲッター。ドット表記によるプライベート変数へのアクセスを可能にします。アイテム付与の結果を表す文字列値を返します。

public function set fulfillmentResult(fulfillmentResult:String):void

暗黙的なセッター。ドット表記によるプライベート変数へのアクセスを可能にします。アイテム付与の結果を表す文字列値を設定します。

サンプルコード

 // コンストラクターの
notifyFulfillmentInput:NotifyFulfillmentInput = new NotifyFulfillmentInput("12345", "FULFILLED");

// 暗黙的なセッターの例
notifyFulfillmentInput:NotifyFulfillmentInput = new NotifyFulfillmentInput();
notifyFulfillmentInput.receiptId = "12345";
notifyFulfillmentInput.fulfillmentResult = "FULFILLED";

// withセッターの例
notifyFulfillmentInput:NotifyFulfillmentInput =
    new NotifyFulfillmentInput().withReceiptId("12345").withFulfillmentResult("FULFILLED");

ResetInput

public function ResetInput(reset:Boolean=false)

コンストラクター。コンストラクターは、メンバー変数に対応する引数をオプションとして受け取ります。コンストラクターに引数を指定しなかった場合は、暗黙的なセッターを使用するか、withセッター呼び出しをチェーン化することで、後からメンバー変数の値を設定できます。

public function withReset(reset:Boolean):ResetInput

withセッター。ResetInputオブジェクトのリセット状態を設定し、呼び出しをチェーン化できるようにそのオブジェクトを返します。

public function get reset():Boolean

暗黙的なゲッター。ドット表記によるプライベート変数へのアクセスを可能にします。すべての購入のリストを取得するかどうかを表すブール値を返します。

public function set reset(reset:Boolean):void

暗黙的なセッター。ドット表記によるプライベート変数へのアクセスを可能にします。すべての購入のリストを取得するかどうかを決定するブール値を設定します。

サンプルコード

 // コンストラクターの例
resetInput:ResetInput = new ResetInput(true);

// 暗黙的なセッターの例
resetInput:ResetInput = new ResetInput();
resetInput.reset = true;

// withセッターの例
resetInput:ResetInput = new ResetInput().withReset(true);

SkuInput

public function SkuInput(sku:String=null)

コンストラクター。コンストラクターは、メンバー変数に対応する引数をオプションとして受け取ります。コンストラクターに引数を指定しなかった場合は、暗黙的なセッターを使用するか、withセッター呼び出しをチェーン化することで、後からメンバー変数の値を設定できます。

public function withSku(sku:String):SkuInput

withセッター。SkuInputオブジェクトのSKUを設定し、呼び出しをチェーン化できるようにそのオブジェクトを返します。

public function get sku():String

暗黙的なゲッター。ドット表記によるプライベート変数へのアクセスを可能にします。SKUの文字列値を返します。

public function set sku(sku:String):void

暗黙的なセッター。ドット表記によるプライベート変数へのアクセスを可能にします。SKUの文字列値を設定します。

サンプルコード

 // コンストラクターの例
skuInput:SkuInput = new SkuInput("SKU_20156789");

// 暗黙的なセッターの例
skuInput:SkuInput = new SkuInput();
skuInput.sku = "SKU_201387654";

// withセッターの例
skuInput:SkuInput = new SkuInput().withSku("SKU_201954321");

SkusInput

public function SkusInput(skus:Vector.<String>=null)

コンストラクター。コンストラクターは、メンバー変数に対応する引数をオプションとして受け取ります。コンストラクターに引数を指定しなかった場合は、暗黙的なセッターを使用するか、withセッター呼び出しをチェーン化することで、後からメンバー変数の値を設定できます。

public function withSkus(skus:Vector.<String>):SkusInput

withセッター。SkusInputオブジェクトのSKUを設定し、呼び出しをチェーン化できるようにそのオブジェクトを返します。

public function get skus():Vector.<String>

暗黙的なゲッター。ドット表記によるプライベート変数へのアクセスを可能にします。SKUを保持する文字列ベクトルを返します。

public function set skus(skus:Vector.<String>):void

暗黙的なセッター。ドット表記によるプライベート変数へのアクセスを可能にします。SKUを保持する文字列ベクトルを設定します。

サンプルコード

 // ヘルパーオブジェクト
skus:Vector.<String> = new Vector.<String>();
skus.push("SKU_012345", "SKU_246810", "SKU_135792", "SKU_987654");

// コンストラクターの例
skusInput:SkusInput = new SkusInput(skus);

// 暗黙的なセッターの例
skusInput:SkusInput = new SkusInput();
skusInput.skus = skus;

// withセッターの例
skusInput:SkusInput = new SkuInput().withSkus(skus);

GetUserData

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

// APIパッケージをインポートします
import com.amazon.device.iap.cpt.*;

// 入力を受け取らない同期オペレーションGetUserDataを呼び出します
var requestOutput:RequestOutput = AmazonIapV2.getUserData();

// レスポンスオブジェクトから、このリクエストに関連付けられたrequestIdを取得します
var requestId:String = requestOutput.requestId;

Purchase

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

// APIパッケージをインポートします
import com.amazon.device.iap.cpt.*;

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

// 入力オブジェクトのメンバー変数の値を設定します
request.sku = "MAS-123456";

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

// レスポンスオブジェクトから、このリクエストに関連付けられたrequestIdを取得します
var requestId:String = requestOutput.requestId;

GetProductData

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

// APIパッケージをインポートします
import com.amazon.device.iap.cpt.*;

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

// SKU文字列のリストを作成します
var list:Vector.<String> = new Vector.<String>();
list.push("sku1");
list.push("sku2");
list.push("sku3");

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

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

// レスポンスオブジェクトから、このリクエストに関連付けられたrequestIdを取得します
var requestId:String = requestOutput.requestId;

GetPurchaseUpdates

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

 // APIパッケージをインポートします
import com.amazon.device.iap.cpt.*;

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

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

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

// レスポンスオブジェクトから、このリクエストに関連付けられたrequestIdを取得します
var requestId:String = requestOutput.requestId;

NotifyFulfillment

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

// APIパッケージをインポートします
import com.amazon.device.iap.cpt.*;

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

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

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

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

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

  1. APIパッケージをインポートします。
  2. イベントハンドラーを定義します。
  3. イベントハンドラーをイベントリスナーに登録します。

GetUserDataResponse

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

// APIパッケージをインポートします
import com.amazon.device.iap.cpt.*;

// イベントハンドラーを定義します
private function getUserDataResponseEventHandler(event:AmazonIapV2Event):void
{
    var response:GetUserDataResponse = event.getUserDataResponse;
    var requestId:String = response.requestId;
    var userId:String = response.amazonUserData.userId;
    var marketplace:String = response.amazonUserData.marketplace;
    var status:String = response.status;
}

// イベントハンドラーを登録します
AmazonIapV2.addEventListener(AmazonIapV2Event.GET_USER_DATA_RESPONSE, getUserDataResponseEventHandler);

PurchaseResponse

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

// APIパッケージをインポートします
import com.amazon.device.iap.cpt.*;

// イベントハンドラーを定義します
private function purchaseResponseEventHandler(event:AmazonIapV2Event):void
{
    var response:PurchaseResponse = event.purchaseResponse;
    var requestId:String = response.requestId;
    var userId:String = response.amazonUserData.userId;
    var marketplace:String = response.amazonUserData.marketplace;
    var receiptId:String = response.purchaseReceipt.receiptId;
    var cancelDate:Number = response.purchaseReceipt.cancelDate;
    var purchaseDate:Number = response.purchaseReceipt.purchaseDate;
    var sku:String = response.purchaseReceipt.sku;
    var productType:String = response.purchaseReceipt.productType;
    var status:String = response.status;
}

// イベントハンドラーを登録します
AmazonIapV2.addEventListener(AmazonIapV2Event.PURCHASE_RESPONSE, purchaseResponseEventHandler);

GetProductDataResponse

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

// APIパッケージをインポートします
import com.amazon.device.iap.cpt.*;

// イベントハンドラーを定義します
private function getProductDataResponseEventHandler(event:AmazonIapV2Event):void
{
    var response:GetProductDataResponse = event.getProductDataResponse;
    var requestId:String = response.requestId;
    var productDataMap:Object = response.productDataMap;
    var unavailableSkus:Vector.<String> = response.unavailableSkus;
    var status:String = response.status;

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

// イベントハンドラーを登録します
AmazonIapV2.addEventListener(AmazonIapV2Event.GET_PRODUCT_DATA_RESPONSE, getProductDataResponseEventHandler);

GetPurchaseUpdatesResponse

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

// APIパッケージをインポートします
import com.amazon.device.iap.cpt.*;

// イベントハンドラーを定義します
private function getPurchaseUpdatesResponseEventHandler(event:AmazonIapV2Event):void
{
    var response:GetPurchaseUpdatesResponse = event.getPurchaseUpdatesResponse;
    var requestId:String = response.requestId;
    var userId:String = response.amazonUserData.userId;
    var marketplace:String = response.amazonUserData.marketplace;
    var receipts:Vector.<PurchaseReceipt> = response.receipts;
    var status:String = response.status;
    var hasMore:Boolean = response.hasMore;

    // レシートごとに、以下の値を取得できます
    var receipt:PurchaseReceipt = receipts[0];
    var receiptId:String = receipt.receiptId;
    var cancelDate:Number = receipt.cancelDate;
    var purchaseDate:Number = receipt.purchaseDate;
    var sku:String = receipt.sku;
    var productType:String = receipt.productType;
}

// イベントハンドラーを登録します
AmazonIapV2.addEventListener(AmazonIapV2Event.GET_PURCHASE_UPDATES_RESPONSE, getPurchaseUpdatesResponseEventHandler);