Tutorialチュートリアル
アプリ内課金を利用するには
課金アイテムの情報取得
applican.purchase.getProducts([プロダクトIDの配列], [課金種別], [成功時のコールバック], [失敗時のコールバック]);
プロダクトID
Google Play Developer Consoleや、iTuens Connectで設定したIDを配列形式で指定して、複数のアイテム情報を一括して取得できます。(1件だけ取得する場合も配列形式で指定してください)
課金種別
Androidの場合に定期購読の場合はsubs”、それ以外の場合はinapp”を指定してください。iOSの場合にはこの値は無視します。
通常の課金 | 定期購読 |
---|---|
inapp | subs |
サンプルコード
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); }
成功時のコールバックの引数は以下の内容のオブジェクトが配列で渡されます。
パラメータ名 | 説明 |
---|---|
productId | プロダクトID |
name | コンテンツ名 |
price | 価格。(ローカライズされた文字列) |
description | コンテンツの説明文 |
os | プラットフォームのOS。"ios" 又は "android"。 |
課金実行
applican.purchase.makePurchase([プロダクトID], [課金種別], [成功時のコールバック], [失敗時のコールバック]);
applican.purchase.finishPurchase([課金ID], [成功時のコールバック], [失敗時のコールバック]);
※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); }
課金実行の成功時のコールバックの引数には以下の内容のオブジェクトが渡されます。
パラメータ名 | 説明 |
---|---|
productId | プロダクトID |
purchaseId | 課金ID |
receipt | 課金認証用のレシート |
os | プラットフォームのOS。"ios" 又は "android"。 |
課金情報のレストア
applican.purchase.restorePurchase([課金種別], [成功時のコールバック], [失敗時のコールバック]);
※Androidの場合は課金種別毎に呼び出す必要があります。iOSの場合は課金種別のパラメータを使わないため、1回の呼び出しですべての課金情報を取得できます。
レストア機能は以下の目的で使用します。
・非消費型の購入をレストアする(広告非表示など)
・定期購読の購入をレストアする
・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); }
restorePurchaseの成功時のコールバックの引数は以下の内容のオブジェクトが渡されます。
パラメータ名 | 説明 |
---|---|
productId | プロダクトID |
purchaseId | 課金ID |
receipt | 課金認証用のレシート |
os | プラットフォームのOS。"ios" 又は "android"。 |
isRestore | 購入済みアイテムのレストアかどうか(iOSのみ。Androidはfalse固定) |
購入が未完了かどうかを判定する方法がiOSとAndroidで異なるので注意してください。
iOSの場合の判定方法 | Androidの場合の判定方法 |
---|---|
isRestoreがfalse | productIdが消費型アイテム |
購入未完了の決済についてはアイテム等の付与を行った後、finishPurchaseを実行して決済を完了させるようにしてください。
上記のサンプルコードではrepairPurchaseを再帰的に呼び出し、未完了決済が全て無くなるまで繰り返し処理をするように実装しています。