applican

マイページに戻る

Purchase ver.1.0

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

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

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

機能

利用用途

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

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

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

メソッド

  • getProducts(Array productIds, String In-App, Function successCallback, Function errorCallback)
  • makePurchase(String productId, String In-App, Function successCallback, Function errorCallback)
  • finishPurchase(String In-App, Function successCallback, Function errorCallback)
  • restorePurchase(String In-App, Function successCallback, Function errorCallback)
  • toggleSandbox(Boolean enable, Function successCallback)
  • setSharedPassword(String password, Function successCallback)

getProducts

メソッド説明

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

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

補足

※makePurchaseを呼ぶ前にgetProductsを呼んでください。getProductsは課金アイテムの一覧を検証して一時的なデータベースに入れます。このデータベースはmakePurchaseに使われます。

パラメータ

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)

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

パラメータ

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

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で判別して送信するように実装してください。

サンプルコード

applican.purchase.makePurchase('jp_co_xxx_yyy_coin100', 'inapp', makePurchaseSuccess, makePurchaseError);
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)

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

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

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

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

パラメータ

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"。
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を再帰的に呼び出し、未完了決済が全て無くなるまで繰り返し処理をするように実装しています。

toggleSandbox (iOSのみ)

メソッド説明

toggleSandbox (Boolean enable, Function successCallback);

パラメータ

enable : Boolean trueの場合はSandboxモードを有効にします
successCallback : Function 成功時のコールバック

補足

※テスト用の課金の際、このAPIでiTunesをサンドボックスモードに切り替えます。サンドボックスモードをtrueにしない場合、テスト用課金を行うことができません。また、アプリ申請の前には必ずfalseにして下さい。

setSharedPassword (iOSのみ)

メソッド説明

setSharedPassword (String password, Function successCallback);

パラメータ

password : String iTunesで取得したシェアパスワード
successCallback : Function 成功時のコールバック

補足

※iOS iTunes課金の際にこのパスワードが必要です。パスワードはアカウント毎に異なります。iTunes Connectでパスワードを表示すると、前回表示したパスワードが自動的にリセットされるのでご注意ください。

パスワード取得方法

  1. iTunes Connectへログイン。
  2. My Appsを選択。
  3. アプリを選択。
  4. Featuresタブを選択。
  5. View Shared Secretを選択。
  6. この時点で前回の「View Shared Secret」を押した時のパスワードが変わります。新しく表示されたパスワードをご利用ください。

課金テストの時にテスターアカウントをご利用ください。テスターアカウント課金の場合、実際にはお金が掛かりませんので大変便利です。サンドボックスアイテム以外を課金した場合、テストアカウントはブロックされるのでご注意ください。
ブロックされた場合、新しいアカウントが必要となります。

テスターアカウント作成方法

  1. iTunes Connectへログイン。
  2. Users and Rolesを選択。
  3. Sandbox Testersタブを選択。
  4. ( + )ボタンを押して新しいテスターアカウントの情報入力。同じメールアドレスを入れたくない場合は、iCloudのアリアスを使用できます。
  5. 届いたメールで確認リンクを押す。
  6. 確認の後にテスト端末でiCloudとiTunesをログアウトして、テスターアカウントでiCloudへログインしてください。

エラーコード

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

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;			//購入していない