はじめに

先日KLabではパブリッシングパートナー会社様及び共同開発パートナー会社様向けに、 「モバイルオンラインゲーム開発SDK」として、社内で開発・利用を推進しているライブラリ群の提供を開始しました。
今日はこのSDKに含まれているストア課金処理ライブラリおよび仮想通貨管理ライブラリについて、その提供の背景と概要についてお話しします。

ストア課金処理ライブラリ・仮想通貨管理ライブラリ提供の背景

多くのスマートフォン用アプリには、アプリの中から追加で課金を行うことでロックされた機能を有効化したり、新たなコンテンツを追加したりする機能があります。
これを実現しているのがアプリ内課金の機能です。オンラインゲームでは仮想通貨の購入やゲーム内機能をアンロックする目的で利用されるケースが多いようです。

このアプリ内課金は基本的にアプリ(スマートフォン端末)とGoogle PlayやiTunesなどの決済サーバ間で完結します。
つまり運営者が独自にサーバを用意することは仕様上必須ではありませんが、一方でオンラインゲームの運営サーバ(以降、リモートサーバ)側ではコンテンツの付与などをそのサーバ上で間違いなく行う必要があるため、アプリとリモートサーバとの連携処理を適切に実装する必要があります。

構成概念図

このようなリモートサーバにおける課金処理で特に注意しなければならないのが、購入情報の検証すなわち不正対策と、そこで付与されるコンテンツ=仮想通貨の管理に関する実装です。

決済プラットフォームが提供している仕様書の内容だけでは、オンラインゲームに特化したベストプラクティスといったことまではあまり読み取ることができません。
つまりこれらの処理は運用ノウハウといえる領域であり、各社独自に工夫を凝らしている状況ではないかと思います。

前置きが長くなりましたがこのストア課金処理ライブラリおよび仮想通貨管理ライブラリの目的は、このリモートサーバ側の「購入情報の検証」および「仮想通貨の管理」に関するKLabの運用ノウハウを透過的に、つまり容易に利用可能にすることでオンラインゲーム開発者が本来の作業に集中できるようにすることにあります。
なお、これらの機能はモジュール化されており自由に組み合わせることが可能な設計としています。

購入情報の検証 (ストア課金処理ライブラリ)

オンラインゲームのように購入情報をアプリからインターネットを介してリモートサーバに送信し、リモートサーバ上でコンテンツ付与を行う際に注意しなければならないのが不正対策です。
具体的に言うとアプリ内課金に関する処理を迂回するようにアプリそのものを改ざんされたりすることもありますし、偽の購入情報を送りつけるようなツールも横行していますので、このような不正利用者によるただ乗りがないよう考慮して検証を実装する必要があるわけです。

ただしオンラインゲームに関して言うと、アプリ内課金に必ずリモートサーバが介在するためスタンドアロンアプリ=リモートサーバを必要としないアプリに比べると不正対策は比較的容易です。
というのもアプリについてはバイナリ自体やメモリ改ざんが技術的に可能でも、サーバ側を乗っ取ってプログラムを書き換えるようなことはそれと比較してずっと難しいからです。
つまりオンラインゲームにおいてはサーバサイドでの検証を適切に漏れなく行うことで、不正利用をほぼ100%防ぐことができます。

ストア課金処理ライブラリでは次のようなチェックを実施することで不正対策を行っています。

  • 署名あるいは検証サーバを利用した検証の実施
  • 購入情報内の決済IDによる一意性の担保
  • 購入情報に含まれる製品IDや商品IDの存在チェック
  • などなど……

上記でおわかりのように一つひとつの処理は技術的に難易度が高いものではありません。
ただしこのような手続きはアプリ毎の依存部分があまりないことや、実際には検証サーバへの接続処理やリトライ処理等エラーハンドリング、各種ログ実装(忘れがちになる部分ですが運用では重要です)など煩雑な対応も付随して多く発生するためライブラリ化するメリットが大きいところといって良いと思います。

仮想通貨の管理 (仮想通貨管理ライブラリ)

日本国内向けに有償で発行が行われた仮想通貨は、発行額や発行形態に応じて資金決済に関する法律(資金決済法)という法律の適用を受けることがあります。
目的は利用者保護にあり、この場合事業者および発行する仮想通貨の名称や単価等を監督省庁に届け出る必要がありますし、事業者に万が一のこと(破産など)があったときに備えて仮想通貨発行額に応じた発行保証金の供託を行わなければならないことになっています。

これを実現するには一貫したルールで仮想通貨の付与・利用を行う必要がありますし、さらにこれらの入出力ログは厳密に管理されなければなりません。
このためKLabでは仮想通貨は種別毎に先入先出法で管理することで入出力を厳格にルール付けした上で残高管理を行っているのですが、このような実装は一定の会計知識も必要ですし、やや複雑な手続きになりがちな上に万が一不具合があった場合にはその損害も計り知れません。
そこでこのような処理をカプセル化し、付随する固有の業務処理におけるトランザクション管理やロック機構がテンプレート化されたライブラリとして提供することで仮想通貨の正確な管理・運用を支援しています。

さいごに

このライブラリの検証処理機能としては現在 python向けにIn-App Purchase(App Store)用とIn-app Billing(Google Playストア)用のものを提供しており、以後ニーズを見ながら他の決済プラットフォーム向けのものを提供予定です(動作環境等詳細につきましては までお問い合わせください)。
ライブラリの開発チームでは常に最新の情報を把握して、プログラムへの反映を継続して行うようにしています。

KLabではこのようにアプリの開発や運用で得られた知見を、各種ライブラリやフレームワークといった共通のコンポーネントとして集約することにより開発業務の効率化を進めています。

9/17から開催される東京ゲームショウでも当社コーナーを出展していますので、興味を持たれた方はぜひ遊びに来てくださいね。


Shimanuki