2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

[Cordova] cordova-plugin-inapppurchaseを使ったアプリ内課金

Last updated at Posted at 2018-06-27

はじめに

AndroidアプリをCordovaを用いて開発している。
アプリ内課金を実装しようと思ったが、王道プラグインであるcordova-plugin-purchaseで、うまく動作しなかったので、別のプラグインを使ってみた。
あまり、日本語で書かれたドキュメントがなかったので参考までに
(ちなみに、iOS版は試していません)

cordova-plugin-inapppurchaseプラグイン

今回は、cordova-plugin-inapppurchaseを利用する
cordova-plugin-purchaseプラグインよりも、Issueやプルリクが片付けられていないが、まぁ動作するのでそれでよい

インストール

cordova plugin add で普通にインストールできる

$ cordova plugin add cordova-plugin-inapppurchase

アプリ側の設定

まず、cordovaプロジェクトの直下のwwwディレクトリ(アプリのhtml/css/jsファイルがある場所)にmanifest.jsonファイルを作成し、アプリのライセンスキー(Billing Keyとも呼ばれている)を登録する
ライセンスキーは、Google Play Consoleからアプリ内課金を実装したいアプリのダッシュボード画面を開き、左のメニューバーの「開発ツール」>「サービスとAPI」の画面から確認することができる
manifest.jsonは以下のように記載する

{ "play_store_key": "アプリのライセンスキー"}

次に、Cordovaが提供するネイティブ機能をJavascriptから制御したいので、アプリにcordova.jsを読み込ませる
以下をhtmlに追記すればOK

<script src="cordova.js"></script>

(ブラウザからアプリをテストすると、cordova.jsがないというエラーが出るが、実機デバッグや仮想マシンで動かせば問題なく読み込まれるのでご心配なく)

これで、利用準備完了

Google Play Consoleから課金アイテムを登録

本誌の主題ではないが、一応やり方を説明しておく
ライセンスキーを取得したときと同様にGoogle Play Consoleのアプリのダッシュボード画面から、左のメニューバーの「ストアでの表示」>「アプリ内サービス」から課金アイテムを登録する
登録の際に必要な、アイテムIDはアプリ側のJavascriptに必要なのでメモをしておく

ちなみに、公開前のリリースが残っていないと課金アイテムが登録できないっぽいので、登録できない方はα/β版でもいいので適当にAPKをアップロードして試してみてください

利用できるAPI

以降は、本プラグインが利用できるAPIを紹介する
基本的に、公式のREADMEの劣化版だが、日本語で概要を理解すると言った形で利用してもらいたい

APIの利用はinAppPurchaseオブジェクトのメソッドを呼び出す形で行われる

Get Products

課金アイテムのアイテムIDのリストを引数として渡し、アイテムの価格や説明文などの情報を取得する
公式には、「購入する前に呼び出す必要がある」とあるが、呼び出さなくても問題なく動作している気がするので謎
一応、ドキュメントに従ってdevicereadyイベントにフックする形で、呼び出すことをおすすめする

それ以外では、単純にアプリとGoogle Playストアとの疎通が取れているかを確認するために利用できる

inAppPurchase
  .getProducts([{"課金アイテムのIDのリスト"}])
  .then(function (products) {
    console.log(products);
    /*
    [{ productId: 'com.yourapp.prod1', 'title': '...', description: '...', currency: '...', price: '...', priceAsDecimal: '...' }, ...]
    */
  })
  .catch(function (err) {
     console.log(err);
  });

Buy

課金アイテムのIDを引数として渡し、購入処理を行う

inAppPurchase
  .buy({"課金アイテムのID"})
  .then(function (data) {
    console.log(data);
    /*
      {
        transactionId: ...
        receipt: ...
        signature: ...
      }
    */
  })
  .catch(function (err) {
    console.log(err);
  });

Subscribe

定期購入型のアイテムの購入に利用する
BUYメソッドと同じ使い方

Consume

消費型の課金アイテム(ゲーム内コインなど)の消費に利用する
私は利用していないので動作を保証できない

Restore Purchase

購入済みのアイテムのリストを返してくれる
具体的には、課金アイテムのproductIdや購入処理ごとに割り当てられるtransactionIdや購入日時などのオブジェクトのリストが返ってくる
購入者が課金アイテムを購入しているかを確かめたり、利用者がアプロを再インストールしても購入情報をアプリに反映できるようにするために利用する

inAppPurchase
  .restorePurchases()
  .then(function (data) {
    console.log(data);
    /*
      [{
        transactionId: ...
    	productId: ...
    	state: ...
    	date: ...
      }]
    */
  })
  .catch(function (err) {
    console.log(err);
  });
2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?