【Titanium】TiStoreKitを使ったapp purchaseの導入
※この記事の方法では、Titanium 1.7以降では動作しないので、
公式から出ているstorekitをお使い下さい。
詳しくはこちらhttp://maccle.com/programming/titanium/use-ti-storekit-over-v1-8/
--------------------------
Titaniumにて作り直した(Androidと同時に展開したかったので。まあ・・Androidの方は全然売れませんが・・)、
簡単な4コマ漫画アプリ、「寿幸子」なのですが、
iOS版はアプリ内課金に対応しています。
masuidrive様の、TiStoreKitを使い実装しました。
コードは以下の通りです。(ほとんどexample/app.jsと一緒ですが・・)
function log(str){
if(platform != "android"){
Ti.API.log('log:' + str);
}
}
function closePurchase(){
StoreKit = null;
//ここでボタンロックの解除などを行なう
}
function runPurcahse(){
var productsName = "***";//itunes connectで登録したアイテム名
var StoreKit = require("jp.masuidrive.ti.storekit");
if("[object JpMasuidriveTiStorekitModule]" != StoreKit.toString()){
alert("エラー" , "内部Storekitモジュールでエラーが発生しました" , ["OK"]);
closePurchase();
return;
}
if(!StoreKit.canMakePayments){
alert("確認" , "購入が行えない設定になっているようです。端末の「設定」→「一般」→「機能制限」の「App内での購入」がOFFになっていないかご確認下さい。" , ["OK"]);
closePurchase();
return;
}
var payment = StoreKit.createPayment();
if(payment.toString() != "[object Payment]"){
alert("エラー" , "paymentオブジェクトが作成できませんでした。" , ["OK"]);
closePurchase();
return;
}
if(productsName == payment.product){//ここが違う(判定は'!=' では?)ような・・?しかし動作確認で問題なかったのでそのままにしてしまった・・情報求むm(_ _)m
alert("エラー" , "購入IDがストアの物と一致しません。" , ["OK"]);
endPurchasing();
return;
}
var payment = StoreKit.createPayment();
StoreKit.defaultPaymentQueue.addEventListener("restoreFinished", function(e) {
log("restoreFinished");
});
StoreKit.defaultPaymentQueue.addEventListener("restoreFailed", function(e) {
log("restoreFailed");
});
StoreKit.defaultPaymentQueue.addEventListener("purchasing", function(e) {
log("purchasing");
});
StoreKit.defaultPaymentQueue.addEventListener("purchased", function(e) {
StoreKit.defaultPaymentQueue.finishTransaction(e.transaction);
log("purchased");
//ここでファイルに書き込むなど、購入情報の保存を行なう
var alertDialog = Titanium.UI.createAlertDialog({
title: 'ご購入ありがとうございました',
message: '購入が完了しました。購入の情報はiTunesアカウントで管理されますので、アプリを再インストールした場合や端末を変えた場合でも、アカウントが同じであれば、再び課金されることはありません。',
buttonNames: ['OK']
});
alertDialog.show();
closePurchase();
});
StoreKit.defaultPaymentQueue.addEventListener("failed", function(e) {
StoreKit.defaultPaymentQueue.finishTransaction(e.transaction);
log("failed!");
var alertDialog = Titanium.UI.createAlertDialog({
title: '購入時エラー',
message: 'エラーが発生しました/' + e.transaction.error.message,
buttonNames: ['OK']
});
alertDialog.show();
closePurchase();
});
payment.product = productsName;
StoreKit.defaultPaymentQueue.addPayment(payment);
}
runPurcahse();//購入処理実行
※購入アイテムのタイプは"Non-Consumable"にしています。