applican

マイページに戻る

Purchase ver.2.0

課金アイテムの情報を取得します。

アプリカンAPIのver.2.0系のPurchaseのリファレンスです

  1. アプリカンAPIのver.1.0系のPurchaseのリファレンスはこちらからご確認ください。

機能

利用用途

アプリ内での課金情報を取り扱いたい場合、こちらの機能をご利用ください。

【対応ランタイムバージョン】

サンプル Purchase
サンプル Purchase
サンプル Purchase
サンプル Purchase
サンプル Purchase
サンプル Purchase
サンプル Purchase
サンプル Purchase
サンプル Purchase

メソッド

getProducts

メソッド説明

getProducts(Array productIds, String In-App, Function successCallback, Function errorCallback)

現在の課金アイテムの情報を取得をします。

パラメータ

productIds : Array iTuens Connectや、Google Play Developer Consoleで設定したIDを配列形式で指定して、複数のアイテム情報を一括して取得できます。
(1件だけ取得する場合も配列形式で指定してください)
In-App : String Androidの場合に定期購読の場合は"subs"、それ以外の場合は"inapp"を指定してください。
iOSの場合にはこの値は無視します。
successCallback : Function 成功時のコールバック
errorCallback : Function 失敗時のコールバック

Return

void

successCallback パラメータ

productId : String プロダクトID
name : String コンテンツ名
price : String 価格(ローカライズされた文字列)
description : String コンテンツの説明文
os : String プラットフォームのOS。"ios"又は"android"。

サンプルコード

var productIds = ['jp_co_xxx_yyy_coin100', 'jp_co_xxx_yyy_coin200'];
applican.purchase.getProducts(productIds, 'inapp', purchaseGetProductsSuccess, purchaseGetProductsError);
function purchaseGetProductsSuccess(products){
	var dump = "purchaseGetProductsSuccess\n";
	var cnt = products.length;
	if(cnt>0){
		for(var i=0; i<cnt; i++){
			var product = products[i];
			dump += "========================\n";
			dump += "productId:"+product.productId+"\n";
			dump += "name:"+product.name+"\n";
			dump += "price:"+product.price+"\n";
			dump += "description:"+product.description+"\n";
		}
	}
	alert(dump);
}
function purchaseGetProductsError(error){
	var dump = "purchaseGetProductsError\n";
	dump += "code:"+error.code+"\n";
	dump += "message:"+error.message+"\n";
	alert(dump);
}

makePurchase

メソッド説明

makePurchase(String productId, String In-App, Function successCallback, Function errorCallback, PurchaseOptions options)

課金を開始します。ネイティブの課金ダイアログが表示されます。

iOSの場合、プロビジョニングファイルがAppStore以外の場合は自動的にサンドボックスに接続しますが、明示的にサンドボックスに接続したい場合には、optionsで指定することができます。 アプリ申請の際は必ずサンドボックスモードをfalseにしてください。※optionsはランタイム2.3.1以上、applican.js-2.3.1以上で有効です。

iOSの自動更新課金では、共有シークレットをレシート検証に使用します。
共有シークレットは、AppStoreConnectで取得したものを、ビルド設定>追加オプション設定画面>AppStoreConnect共有シークレットで指定してください。

パラメータ

productId : String iTuens Connectや、Google Play Developer Consoleで設定したIDを指定してください。
In-App : String Androidの場合に定期購読の場合は"subs"、それ以外の場合は"inapp"を指定してください。
iOSの場合にはこの値は無視します。
successCallback : Function 成功時のコールバック
errorCallback : Function 失敗時のコールバック
options : <PurchaseOptions> 課金オプション。サンドボックス環境を指定したい場合に使用します。

Return

void

finishPurchase

メソッド説明

finishPurchase(String In-App, Function successCallback, Function errorCallback)

makePurchaseメソッドの成功時のコールバックを受け取った際に、決済を完了させるために呼び出す必要があります。

パラメータ

In-App : String Androidの場合に定期購読の場合は"subs"、それ以外の場合は"inapp"を指定してください。
iOSの場合にはこの値は無視します。
successCallback : Function 成功時のコールバック
errorCallback : Function 失敗時のコールバック

Return

void

successCallback パラメータ

productId : String プロダクトID
purchaseId : String 課金ID
receipt : String 課金認証用のレシート
os : String プラットフォームのOS。"ios"又は"android"。

補足

※iOSとAndroidで、決済を完了させる処理の呼び出しに違いがあるため注意してください。

  • iOSの場合は必ず呼び出します。
  • Androidの場合は消費アイテムの場合のみ呼び出します。プロダクトIDで判別して送信するように実装してください。

サンプルコード

var options = { sandbox: true };						
applican.purchase.makePurchase('jp_co_xxx_yyy_coin100', 'inapp', makePurchaseSuccess, makePurchaseError, options);
function makePurchaseSuccess(result){
	if(result.productId=='jp_co_xxx_yyy_coin100'){
		//※課金アイテムの付与などの処理を実装する
	}else if(result.productId=='jp_co_xxx_yyy_coin200'){
		//※課金アイテムの付与などの処理を実装する
	}

	//決済完了にする処理。
	//iOSの場合は必ず送信。Androidは消費アイテムの場合のみ送信する。
	if(result.os=="ios" ||
		(result.os=="android" && (result.productId=="jp_co_xxx_yyy_coin100" || purchase.productId=="jp_co_xxx_yyy_coin200"))){
		applican.purchase.finishPurchase(result.purchaseId,  finishPurchaseSuccess, finishPurchaseError);
	}else{
		alert('決済完了しました:'+result.purchaseId);
	}
}
function makePurchaseError(error){
	var dump = "makePurchaseError\n";
	dump += "code:"+error.code+"\n";
	dump += "message:"+error.message+"\n";
	alert(dump);
}
function finishPurchaseSuccess(purchaseId){
	alert('決済完了しました:'+purchaseId);
}
function finishPurchaseError(error){
	alert('決済完了できませんでした。'+"code:"+error.code+"\n"+"message:"+error.message);
}

restorePurchase

メソッド説明

restorePurchase(String In-App, Function successCallback, Function errorCallback, PurchaseOptions options)

課金済み情報を再取得することができます。

Androidの場合は課金種別毎に呼び出す必要があります。
iOSの場合は課金種別のパラメータを使わないため、1回の呼び出しですべての課金情報を取得できます。

iOSの場合、プロビジョニングファイルがAppStore以外の場合は自動的にサンドボックスに接続しますが、明示的にサンドボックスに接続したい場合には、optionsで指定することができます。 アプリ申請の際は必ずサンドボックスモードをfalseにしてください。※optionsはランタイム2.3.1以上、applican.js-2.3.1以上で有効です。

レストア機能は以下の目的で使用します。

  • 非消費型の購入をレストアする(広告非表示など)
  • 定期購読の購入をレストアする
  • finishPurchaseを送信できずに決済を中断してしまった場合の復帰処理

パラメータ

In-App : String Androidの場合に定期購読の場合は"subs"、それ以外の場合は"inapp"を指定してください。
iOSの場合にはこの値は無視します。
successCallback : Function 成功時のコールバック
errorCallback : Function 失敗時のコールバック
options : <PurchaseOptions> 課金オプション。サンドボックス環境を指定したい場合に使用します。

Return

void

successCallback パラメータ

productId : String プロダクトID
purchaseId : String 課金ID
receipt : String 課金認証用のレシート
os : String プラットフォームのOS。"ios"又は"android"。
isRestore : Boolean 購入済みアイテムのレストアかどうか(iOSのみ。Androidはfalse固定)

補足

※購入が未完了かどうかを判定する方法がiOSとAndroidで異なるので注意してください。

  • iOSの場合 … isRestoreがfalse
  • Androidの場合 … productIdが消費型アイテム

購入未完了の決済についてはアイテム等の付与を行った後、finishPurchaseを実行して決済を完了させるようにしてください。

サンプルコード

var _incomplete_purchase;	//未完了決済を格納する変数

applican.purchase.restorePurchase('inapp', restorePurchaseSuccess, restorePurchaseError);

function restorePurchaseSuccess(result){
	_incomplete_purchase = new Array();

	var cnt = result.length;
	if(cnt>0){
		for(var i=0; i<cnt; i++){
			var purchase = result[i];

			//購入が未完了のものをストック
			if((purchase.os=="ios" && !purchase.isRestore)
				|| (purchase.os=="android" &&
				 (purchase.productId=="jp_co_xxx_yyy_coin100" ||
				  purchase.productId=="jp_co_xxx_yyy_coin200"))){

				_incomplete_purchase.push(purchase);
			}else{
				//※購入済みアイテムをレストアする処理
			}
		}
	}

	if(_incomplete_purchase.length>0){
		//購入が未完了のものを完了させる処理を呼ぶ
		repairPurchase();
	}else{
		alert('レストア完了');
	}
}
function restorePurchaseError(error){
	var dump = "restorePurchaseError\n";
	dump += "code:"+error.code+"\n";
	dump += "message:"+error.message+"\n";
	alert(dump);
}

//購入が未完了のものを完了させる処理
function repairPurchase(){
	if(_incomplete_purchase.length<1){
		alert('未完了決済の処理完了');
		return;
	}

	var purchase = _incomplete_purchase.shift();

	if(purchase.productId=='jp_co_xxx_yyy_coin100'){
		//※課金アイテムの付与などの処理を実装する
	}else if(purchase.productId=='jp_co_xxx_yyy_coin200'){
		//※課金アイテムの付与などの処理を実装する
	}

	//決済完了にする処理
	applican.purchase.finishPurchase(purchase.purchaseId, repairPurchase, repairPurchaseError);
}

function repairPurchaseError(error){
	alert('決済完了できませんでした。'+"code:"+error.code+"\n"+"message:"+error.message);
}

上記のサンプルコードではrepairPurchaseを再帰的に呼び出し、未完了決済が全て無くなるまで繰り返し処理をするように実装しています。

エラーコード

各処理の失敗時のコールバックのエラーコード

PurchaseError.UNKNOWN_ERROR = 0;		//不明なエラー
PurchaseError.INVALID_ARGUMENT = 1;	//パラメータ異常
PurchaseError.BUSY = 2;				//処理中
PurchaseError.NOT_SUPPORTED = 3;		//課金非対応
PurchaseError.CANCELED = 4;			//ユーザキャンセル
PurchaseError.ALREADY_OWNED = 5;		//既に購入済み
PurchaseError.NOT_OWNED = 6;			//購入していない