cocos2d-xのapp内課金をappC cloudからSDKBoxに変えた話

スマホのイメージ

アプリを開発するのは楽しいことこの上ないですが、せっかく作ったアプリはお金に変えないともったいないところです。いや、もったいないというのもありますが、モチベーションの維持にも繋がるので、たとえ趣味の開発でもお金が稼げる仕組みはあったほうがいいですね。というわけでapp内課金って大事なんです。

appC cloud有料化

app内課金を自前で導入するのは面倒です。まっとうにやろうとすると、AndroidとiPhoneの両方でそれぞれ実装しないといけません。cocos2d-xでゲームを作り始めて数ヶ月、この「アプリ内課金の実装どうするんだ問題」が常につきまとっていました。iPhoneとAndroidで別々にガチ実装するとか超手間だし、そもそもjavaがほぼ書けないし、余計な勉強したくないし…。

というわけでずっとapp内課金はappC cloudに頼っていました。appCはクラウドと連携して、色々と便利な機能を(割と)簡単に実装できるサービスです。app内課金も(割と)簡単に、iPhoneとAndroid同じコードで実装することができて、しかも課金の操作に必要な画面を勝手に生成してくれるというクールっぷりなので、技術も時間もない私的にはなかなか重宝しました。

アプリ広告,アプリ内課金,プッシュ通知の無料サービス iOS,Android,Unity,Cocos2d-x対応 appC cloud

ところがこのたびappCが終了し、有料サービスに移行することになりました。

新しいサービスはitemstoreというらしく、これまで数ヶ月タダ乗りさせていただいた手前、申し訳ないのでちょっと利用してみようと登録したのですが…

%%title

itemstore(アイテムストア) – アプリ内課金[In-App Purchase]を簡単実装

これ…地味に高いな。

個人は月額980円 + アプリ追加ごとに500円、
法人は月額9,800円

という料金体系(2016/06/03現在。詳しくはご利用料金|itemstore(アイテムストア) – アプリ内課金[In-App Purchase]を簡単実装)。

私は個人で開発してるわりに体面上は法人として活動しているので、月額9,800円です。年額にすると約12万円。12万円もあったらブラックサンダーが4,000個は買えるぞ…!?

というわけで色々と天秤にかけた結果、今回はappC Cloudを撤廃し、SDKBoxを使ってapp内課金を実装することにしました。

SDKBoxとは

%%title

SDKBOX: The Cure for SDK Fatigue

SDKBoxはcocos2d-xやUnityその他フレームワークに、サードパーティのSDKと連携する機能を簡単に付与できるツールです。要するに、app内課金やGoogleAnalyticsのトラッキングといった機能を簡単に使えるようになります。

もちろんタダです(重要)。

appCとSDKBoxの違い

とても便利なSDKBoxですが、appC(itemstore)と比較すると、当然優れている点とそうでない点があります。

値段

上述の通り、SDKBoxはタダですが、appCはitemstoreに移行し、有料化しました。

ランキング機能 (LeaderBoard)

appCでは、iOS/Android共通のゲーム内ランキングを簡単に実装することができました。
SDKBoxでは、GameCenterやGooglePlayと連携するSDKBox Playというツールがある(らしい。力尽きて試してない)ので似たようなことは出来ますが、どうしてもAndroidとiOSで別々のランキングになってしまいます。

課金画面

appCではapp内課金の購入画面を作らなくても、勝手に表示してくれました。

appCの例

こんな感じです。itemstoreではもっと見た目のカスタマイズができるらしいです。

これに対してSDKBoxでは、課金の機能は提供してくれますが、画面自体は自前で作る必要があります。

その他の機能

SDKBoxにもappC(itemstore)にも、それぞれ便利な機能が色々とあります。
自分が何の機能を使いたいかで比較検討したほうがよさそうです。

SDKBoxの実装

実装は簡単で、特に書くべきこともないです。 簡単っていいね!

In-App Purchases(IAP) with C++ – SDKBOX

↑ここに書いてある通りに実装するだけ。

I am looking example project for sdkbox iap – SDKBOX – Cocos2d-x Forum

cocos2d-xのコードは(特に難しいこともないですが)↑ここを参考にするとすぐできます。

SDKBox導入時のトラブル

実装は簡単でしたが、いくつかトラブルもありました。

インストール時にエラー

$ sdkbox import iap

コマンドの結果、こんな感じのエラーが出ました。

SDKBOX iap error

エラー出力には「マニュアルでインストールしてね!」と書いてあって、その面倒くささから軽くめまいがしますが、結論からいうとなにもする必要はありませんでした。

cocos2d-xへのSDKBOXのインストールとエラー対応 – GAME SHONEN

↑に書いてある通り、AppDelegate.cppを一度でも編集しているとエラーになるようですが、そこだけ後で自前で実装すればいいので大丈夫です。

include “PluginIAP/PluginIAP.h"
AppDelegate::applicationDidFinishLaunching()
{
sdkbox::IAP::init();
}

こんなん。私はAppDelegate.cppじゃなくて自前クラスのところでinitするように書きましたが、特に問題なくちゃんと動きました。

なんかAndroidでうまく動かない

iOSではちゃんと動くのに、Androidだと動かない…。

と思っていたら、唯一の設定ファイルであるsdkbox_config.jsonの書式を間違っていました。具体的にはコンマが抜けていました。颯爽とコピペで作ったのに間違えていて、そんな自分が残念でしたが嫌いじゃないと思いました。

appCとSDKBox、どっちが簡単?

appCとSDKBoxの導入ですが、やってみた感じではSDKBoxの方が導入が簡単でした。appCの方はライブラリやら何やらの設定を手動でやらないといけないので、工数も多くて間違いやすいと思います。

ただし、appCからitemstoreに変わって導入手順も変更されています。

実際に試してはいないのですが、チュートリアルを読んだ感じではappCよりだいぶ簡単のようです。また導入で問題があっても、サポートに助けてもらうことができるでしょう。

SDKBoxはコマンド打つだけで導入できるので簡単ですが、日本語の情報は少なく、トラブルが起きても自力で解決する必要があります。

その他

SDKBoxの導入自体は簡単だったのですが、Android StudioやAndorid SDK、NDKをアップデートしたらコンパイルが通らなくなって半日ほど潰しました。

iOSだとこういうトラブルはほぼないのですが、Androidは大変です。正直にいうとウンコ食べろクソAndroidと思いました。

今後は迂闊にアップデートしないよう、またする前に環境のバックアップをとるように気をつけたいと思います。

とにかくこれで、今まで以上にapp内課金が簡単に導入できるので、もっと面白い感じでゲーム内に課金を絡められるよう、そして札束風呂でドンペリができるように頑張りたいと思います。

じぃーまでした。