1月
19
2014

Unityで簡単かつ無料でアプリ内課金を実装できるライブラリ「SOOMLA」を使ってみた

先日リリースしたiPhoneアプリ「ワンパットゴルフ」では、アプリ内課金をしています。
このアプリはUnityで開発したのですが、Unity本体ではアプリ内課金をサポートしておらず、課金部分はネイティブで自作 or ライブラリを利用しないといけません。

ネイティブで自作はめんどくさそうだし、かといって Asset Store にあるライブラリはどれも有料。。どうしよう。。と悩んで色々ググってたら、SOOMLA というオープンソースライブラリを見つけました。

SOOMLAとは

アプリ内課金を簡単に実装することのできるオープンソースライブラリです。Unity以外にも、iOS、Android、cocos2d-xで利用することが出来ます。
今回は非消費型アイテムしか試していませんが、消費型アイテムにも対応しています。

インストール

下記ページの右側にある[unity3d-store]-[Download]から.unityPackageファイルをダウンロードしてインストールのが楽だと思います。その下にサンプルプロジェクトがあるので、一緒にダウンロードしておきましょう。
http://project.soom.la/

使い方

細かい実装方法に関してはサンプルプロジェクトを見ると分かると思うので、大まかな実装の流れを説明します。今回は非消費型アイテムの使い方になりますが、iOS版でしか実装していません。Android版に関しては別途必要な設定や処理が必要になるため、ドキュメントをご確認ください。

【Soomlaのプレハブをシーンに追加】
課金したいシーンに、Soomlaのプレハブを追加します。
Inspector パネルで、「Custom Secret」「Android Public Key」「Soom Sec」を設定してください。
設定内容は下記を参考にしてください。
https://github.com/soomla/unity3d-store

【課金アイテムクラスの作成】
サンプルプロジェクトの
/Assets/Soomla/Code/MuffinRushAssets.cs
を参考にして課金アイテムクラスを作成します。
プロダクトID、価格、アイテムの種類等を設定します。

【StoreController の初期化】
アプリのロード時に、StoreControllerを初期化します。
StoreController.Initialize(new YourStoreAssetsImplementation());
初期化は1度だけで、Awake()ではなく、Start()で実行しないといけません。
【追記】YourStoreAssetsImplementationの部分は、【課金アイテムクラスの作成】で作成したクラスを指定してください

【イベントの登録】
Events クラスに購入成功時などのイベント処理を登録します。
イベントの種類や具体的な登録方法は、サンプルプロジェクトの
/Assets/Soomla/Code/ExampleEventHandler.cs
を参考にしてください。
今回の実装では、StoreController.Initialize()の直後に登録処理を記述しました。

【購入処理】
StoreController.BuyMarketItem(プロダクトID);
購入に成功した場合や失敗した場合の処理は、Events.OnMarketPurchase や Events.OnUnexpectedErrorInStore に登録したメソッドで行います。

【復元処理】
StoreController.RestoreTransactions();

【(端末の)アプリで非消費型アイテムが購入済になっているか】
StoreInventory.NonConsumableItemExists(プロダクトID)

まとめ

SOOMLAの概要やUnityでの使い方について説明しました。
そんなSOOMLAを使っているアプリ「ワンパットゴルフ」は、App Store や Google Play で絶賛公開中です。
ぜひ遊んでみてください!

iPhone: https://itunes.apple.com/us/app/oneputtgolf/id791400827?l=ja&ls=1&mt=8
Android: https://play.google.com/store/apps/details?id=jp.shunsukeosawa.OnePuttGolf&hl=ja

5 Comments + Add Comment

  • 【StoreController の初期化】
    アプリのロード時に、StoreControllerを初期化します。
    StoreController.Initialize(new YourStoreAssetsImplementation());
    初期化は1度だけで、Awake()ではなく、Start()で実行しないといけません。

    The type or namespace name `YourStoreAssetsImplementation’ could not be found. Are you missing a using directive or an assembly reference?

    初期化しようとすると、こういうエラーが出てしまいました。
    どうしたらよいでしょうか??

    • 説明が不足していましたが、
      YourStoreAssetsImplementation
      は、【課金アイテムクラスの作成】で作成した課金アイテムクラスのことです。
      補足説明を追記します。

  • 初めまして、山崎と申します。
    soomlaのブログ、参考になります。
    課金されると広告が非表示にする非消費型アイテム(広告非表示)の方法がわかりません。
    何卒、ご教授お願いします。

    • 自分の場合は、広告非表示フラグを保持しておいて、購入処理が成功した場合に広告非表示フラグをオンにして、フラグがオンの場合は広告を表示しないようにしています。

      • ありがとうございます。やってみます。

Leave a comment

開発したiPhoneアプリ

ワンパットゴルフ
パターゴルフゲーム

いい感じフリースロー
バスケットボールのフリースローゲーム

進撃のクレオパトラ
横スクロールアクションゲーム

リア充診断
写真を解析してリア充診断

Classifee
写真を解析して自動分類

Eye Net Surfer
目で操作できるWebブラウザ

どっちの絵が高い?
絵画クイズゲーム
ゲーム-トリビア1位

ハゲかつら
かつらキャッチゲーム

心霊写真なう
心霊写真を作るアプリ
写真44位

視線で読書なう
視線で操作するPDFリーダー
ブック10位

Gesture Books
ジェスチャー操作のPDFリーダー

アイビューワ
目で操作する写真ビューワ
写真4位、総合58位

ウインク検定
ウインク検定
ウインクの上手さの判定アプリ 

印象派なう
印象派なう
写真を印象派風に加工するアプリ
写真46位