NHN Cloud NHN Cloud Meetup!

Gamebaseアプリ内課金(IAP)の紹介(1)

はるか昔にスマートフォンが初めて登場したとき、決済といえば有料アプリの購入を意味していました。アプリ内課金は、2011年2月にApp Storeが「App内課金」に対応したのが最初で、2011年3月にはAndroid Market(後のGoogle Play)も「アプリ内課金サービス」に対応したことで一般的になりました。今回は、Gamebaseのアプリ内課金を紹介したいと思います。

NHNが開発・運営するゲームサイトである、NHNハンゲームでは「驚くべき無料ゲーム!スマートハンゲーム」というスローガンでサービスを行っています。しかし、実際には完全無料ではなく、ゲームのインストールとプレイが「無料」で、アプリ内課金も備えています。
もちろん、すべてがアプリ内課金機能でサービスしているわけではなく、米国のApp Storeで有料アプリとしてリリースされたウルフボーイのように、韓国のストアでは無料アプリとしてサービスしているケースも多数あります。

NHNのゲームプラットフォームは、韓国のスマートフォンアプリストアがオープンしてからアプリ内課金(IAP)機能をサポートし始めました。NHNではスマートフォンプラットフォームの長い歴史を持ち、さまざまな経験も経て、安全性・信頼性・パフォーマンス・開発において高い利便性を誇っています。

スマートフォンアプリのサービスを運用されたことがある方は、AppleのiOSやGoogleのAndroidが新しいOSバージョンをリリースするたびにアップデートに追われる経験をされたことがあると思います。私たちも、UDIDが使えなくなったため、IDFAと任意のデバイスIDを作成して使うようにしたり、64bitへの移行、レシートの検証変更、minSDKとtargetSDKのポリシー変更など、さまざまな変化を経験しました。そして、このような多様な要件を満たすため、状況に応じた対応を行い、その履歴がソースに残りました。

個々のアプリのみがそのような履歴や経験を残すのではなく、プラットフォームもエコシステムの変化によって多くの変化を秘めています。個々のアプリの段階では苦にならなかったことも、プラットフォームにおいてはさまざまなアプリの履歴や経験に対応しながら、多彩な例外状況やバージョンを管理しています。サービスを長きにわたり運営していると、多くの変化を経験することができ、例外状況への対応もたくさん蓄積されます。

しかし一方で、以前は正しかった内容でも現在はそうではなく、その内容が更新されずソースに残っていることがあります。開発時に利用していたものや、忘れさられた非推奨(Deprecated)のAPIが呼び出されてエラーが発生する可能性もあります。かつては有用な機能であったにも関わらず、現在ではトレンドから外れ、忘れさられてしまったものがプラットフォームの領域に少なからず容量を占めることもあります。

まるで古い家のように所々を直しながら住むと便利ですが、NHNでも初期開発から年月が経ち、構造を改良したり、新技術/機能を適用したり、大規模な修繕を行いたいというニーズが徐々に高まってきました。それとともに、多くの労力を費やして開発し整備したプラットフォームを、NHNの独自サービスにのみ適用するのが果たして有用なのか、と悩むようになりました。

そして検討した結果、Gamebaseを開発し、NHN内外で使用できる共有プラットフォームとしてサービスできるように準備することになりました。スマートフォンアプリのサービス初期では、社内サービスのみを対象にしたハンゲームスマートフォンプラットフォーム(HSP)を開発/運営していました。Gamebaseは、この社内限定プラットフォームであったHSPを、サービス経験と開発環境の現状に合わせて、不要な機能と老朽化した要素を排除し、開発されたアプリサービスプラットフォームです。

なかでも安定性と時流に乗ったGamebaseの機能の1つが、アプリ内課金(IAP)の機能です。
IAPは、決済をしてアイテムを受け取る、ということを機能の中核とします。

ですが、そのためには、こまめにさまざまな機能を実行しなければなりません。商品リストを照会して購入可能なアイテムと価格情報をユーザに提供し、ユーザが購入しようとするアイテムと実際の購入アイテムが何であるかを知る必要があります。ストアを通じて決済された後、レシートを検証しハッキングに対する備えも必要です。また、決済処理が正常に処理されなかった場合は、これに対する再処理を続行するか、もしくは結果を再確認しIAPプロセスを終了する必要があります。過去のIAP機能は、決済と支給で完結すると考えられていたかもしれませんが、決済に対する指標やモニタリングも重要なIAP機能となります。特にGoogle Playストアの払い戻し管理サービスの収益性は重要な要素のひとつです。

それでは次に、ひとつずつできるだけ簡単に機能をレビューし、プラットフォームの適用について知っておくべき内容をご案内したいと思います。

1.アプリ内課金(IAP)開発開始 – ストアの設定
Gamebaseを適用したアプリ内課金(IAP)の開発において、ストアの設定から始めることを不思議に思われるかもしれません。
IAPを適用するために行うAppleとONEStore(※韓国で2番目に大きいストア)の設定は、比較的簡単に設定が可能です。そのためか、AppStoreとONEStoreの決済に関連するお問い合わせは、Googleに比べ相対的に少ないです。

– Appleコンソールガイド参照
– ONEStoreコンソールガイド参照
– Googleコンソールガイド参照

私たちが提供するガイドはIAP利用向けの内容で、実際のストアを利用する際には、各ストアが提供しているガイドを参照いただくことをお勧めします。その理由は、全体的なストアの設定フローに従って設定した方が漏れなく準備できることと、TOASTに移行した各ストアのガイドが、ご覧になるタイミングによって最新版ではない可能性があるためです。

ストアの設定はGamebaseの適用有無とは関係なく必ず行うべきプロセスですが、Gamebaseを適用した場合、プラットフォームの機能に関連するエラーは、Gamebaseを通じてエラーコードを確認することになります。ストアの設定時、Gamebaseでよく確認されるエラーコードは以下のとおりです。

code:3009
description:External library error

Gamebaseを適用するサービスで、Gamebaseの3009エラーコードが出て初期化ができない、またはログインができず決済が行えない、といった内容のお問い合わせをよくいただきます。たとえば、以下のような形式です。

3009 は、外部ストアの設定にエラーがあることを示す値で、10 はストアからダウンロードするdetail codeに該当します。

"code":3009,"message":"External library error
"code":10,

Googleのdetail codeが10の場合、証明書のSHA-1値に問題があることを意味します。他の証明書のハッシュ値を入れていたり、SHA-1値を入れるべき位置で値が抜けていたりするケースなどが該当します。

Gamebaseを利用する開発会社の多くから、上記のエラーコードについてお問い合わせをいただきました。Gamebaseで関連するエラーコードを照会すると「Googleの設定と証明書ハッシュ値を確認してください」という回答が出力されるので、不思議に思われるかもしれませんが、外部ライブラリのエラーの場合は、ストアの設定の問題と見ればよいでしょう。

頻繁に発生するエラーや照会に関するGoogleガイド
Googleのエラーコード参照
CommonStatusCodes
GoogleSignInStatusCodes

Google Play Developer API開始
APIプロジェクトリンク

開発者アカウント設定
開発者アカウントのユーザー追加と権限管理

外部ライブラリのエラーの問題は決済だけでなく、認証、初期化などの他の機能を利用した場合も発生する可能性があります。エラーコードに3009 が表示されたら、上記のガイドを参考にして設定を確認する必要があります。

NHN Cloud Meetup 編集部

NHN Cloudの技術ナレッジやお得なイベント情報を発信していきます
pagetop