0
Thumbsup

いい質問だ

0

Thumbsdown

うーん

(Android) In-App Billingモジュール 購入が成功した時のコードの書き方

ns.penchan
ns.penchan 10

投稿日:2013-01-28 09:46:08

Titanium Studio, build:: 3.0.1.201212181159
Titanium SDK: 2.1.4GA
Android: Runtime V8
Module: Ti.inappbilling 2.2.0

いつもお世話になっております。
iPhoneアプリを、Androidに移植しています。アプリ内課金(In-App Billimg)モジュールの購入が成功した時のコードの書き方を教えてください。非消耗型コンテンツで、広告を消すなどを考えています。

やりたいこと) 購入が成功したら、アプリケーションプロパティにセットして、広告を消すなどの処理を追記したい。「PURCHASESTATECHANGED_EVENT」のところに、記入すると見当は付きましたが、試行錯誤してもうまくいきませんでした。よろしくお願いたします。

InAppBilling.addEventListener(InAppBilling.PURCHASE_STATE_CHANGED_EVENT, function(e){

    NotifyMe('PURCHASE STATE CHANGED CALLED ' + e.signedData + ' ' + e.signature+'\n'+ 'SECURITY RESULT ' + e.result);

    Ti.API.info('PURCHASE STATE CHANGED CALLED');
    Ti.API.info('Signature Verification Result:\n' + VerificationString(e.result));
    Ti.API.info('Signed Data:\n' + e.signedData);

    if (e.signedData != null) {
        var response = JSON.parse(e.signedData);
        /*
         * We are not guaranteed to have any orders returned so 
         * we need to make sure that this one exists before using it.
         * 
         * If there is no notificationId then there is no need to confirmNotifications().
         * This happens when restoreTransactions() triggers a PURCHASE_STATE_CHANGED_EVENT.
         */
        if (response.orders[0] && response.orders[0].notificationId) {
            var synchronousResponse = InAppBilling.confirmNotifications({
                notificationIds: [response.orders[0].notificationId]
            });
            displaySynchronousResponseCodes(synchronousResponse);

            //追記 購入が成功した時の処理
            if(xxx === yyy){
                alert('ご購入ありがとうございます'):
                Titanium.App.Properties.setBool(e.signedData.productId, true);
            }
        }
    }
});


回答

yagi_
yagi_
2540
Tcad_icon Tcmd_icon Tce_icon

Thumbsup

いい回答

0

Thumbsdown

うーん

イベントリスナーの中身です:

if(e.signedData != null){
  var response = JSON.parse(e.signedData);
  if(response.orders[0]){
    switch (response.orders[0].order_info.purchaseState) {
      case 0:
        // 購入完了
        break;
      case 1:
        // キャンセル処理
        break;
      case 2:
        // 払い戻し完了
        break;
      case 3:
        // 期限切れ
        break;
      default:
        // 例外処理
        break;
    }
  }
}

が、Googleの課金だとキャンセルが出来るので、すぐに有料の機能を有効にしてしまうと後で支払いをキャンセルされる可能性がありますのでご注意ください。


yagi_様 いつもいつも助けていただき、ありがとうございます。 以下のコードで、アプリケーションプロパティに値をセットすることが出来ました。 ```javascript if (e.signedData != null) { var response = JSON.parse(e.signedData); if(response.orders[0]){ switch (response.orders[0].purchaseState) { case 0: // 購入完了 alert('ご購入ありがとうございます。: '+response.orders[0].productId); Titanium.App.Properties.setBool(response.orders[0].productId, true); break; case 1: // キャンセル処理 alert('キャンセルしています。: '+response.orders[0].productId); Titanium.App.Properties.setBool(response.orders[0].productId, false); break; case 2: // 払い戻し完了 alert('払い戻し完了しました。: '+response.orders[0].productId); Titanium.App.Properties.setBool(response.orders[0].productId, false); break; case 3: // 期限切れ alert('期限切れです。: '+response.orders[0].productId); Titanium.App.Properties.setBool(response.orders[0].productId, false); break; default: // 例外処理 alert('例外処理: '+response.orders[0].productId); break; } .......... ``` しかし次の問題が発生。yagi_様の書かれている通り、ユーザーがキャンセルした場合、アプリケーションプロパティをfalseに戻す処理が出来ていません。 ユーザーからの開発者へのアプリ内課金キャンセル要求 ⬇ 開発者による、開発者アカウントのGoogle Checkout でのキャンセル処置 ⬇ Google Play Application からアプリケーションへのキャンセル通知 ⬇ アプリケーションでキャンセル通知を受け、アプリケーションプロパティ=false をセット という流れは想像できますが、実装についてはお手上げです。また、霧の中に戻ってしまった... 初心者には、アプリ内課金は難しすぎるのでしょうか? --- ns.penchan

アプリにキャンセルの通知が来ませんか? --- yagi_

ログインすると回答することができます。