Unity Codeless IAPで簡単に課金アイテムを実装できた話
Unityでは、なんとコードを書かなくても課金機能が実装できるらしい・・・!
そんな噂を聞きつけ、私はさっそくコードを書かない課金アイテムの実装に着手しました。
まずは公式のドキュメントを読んで・・・公式の・・・ドキュメント・・・?
Codeless IAP Getting Started Guide
・・・え、これだけ?Restoreとかどうすんの?ええ?
購入だけなら確かにコードなしで実装できそうですが、iOS版をリリースするには最低でもリストア機能を実装しないと審査を通りません。ということはこのままではダメです。
コードはちょっと書く
Unity Codeless IAPの情報はまだ少ないですが、よく探したらもう少しちゃんとしたドキュメントがありました。
リストアを実装している方の日本語の記事もありましたが、↓こちらはちょっと遠回りして実装してる感じ。記載されている情報はとても参考になります。Restoreボタンと同じシーンにPurchaseボタンを配置しないとダメ、とか重要。
UnityIAP IAPボタンを用いた非消費型アイテムのリストア対応 – Qiita
IAPButton.csとか改造しなくても普通にリストアは実装できます。割と簡単でした。
テストした当日、Apple側に問題が発生していたことに気づかず4時間ほど無駄にしましたが、簡単でした。なんだよちくしょう(おかけで普通にコードで実装もできるようになったけど・・・)!
引っかかった点
iOS版はルールとしてレストアするボタンを設置する必要があり、勝手にレストアのプロセスが走ることはありません。
これに対してAndroid版(というかGooglePlay版?)は勝手にレストアが走るので注意が必要です。
私の場合、アイテムの購入後に子孫くんが特別なコメントを言うようになっていたのですが、レストアが走るとアプリの起動時にいきなりアイテム購入のコメントを口走るのでビビリました。
このあたりは実装の工夫でなんとでもなるので工夫しましょう。
感想
Codeless IAPでとても簡単にアプリ内課金が実装できるのはマジですが、ドキュメントが少ないのでそういう意味で苦戦するかもしれません。
あと、おそらく人生で1度しかない「初めてのCodeless IAPの実装」をやっている時に限ってApple側で問題を起こすのはやめてほしいです。
Codeless IAPは実機でテストした時にロクなログを吐いてくれなかったので、原因の究明に時間と精神力を奪われました。アレがなければそもそも徹夜なんかしなかったのに!
とにかく、割とお高いAssetとか購入せずに簡単にアプリ内課金が実装できるのは素晴らしいです。特に私のような超零細個人開発者には救いの神ですね。
それと今回、初期バージョンでは課金を実装しなかったアプリに対して、プレイヤーの皆さんから「お布施してやるから課金機能をつけろ」という言葉をいただけたのは本当に励みになりました。マジで凄いことですよね!
そんな幹事で、皆さんも楽しくアプリを作って稼ぎましょう。
じぃーまでした。
ディスカッション
コメント一覧
質問させてください。
IAPButton コンポーネントのButton Type をRestoreに設定するだけでリストアはできるようになるのでしょうか?
それともRestoreボタンも何かコードを書く必要があるのでしょうか?
Unity初心者なので、教えていただけるとありがたいです。
コメントありがとうございます。
IAPButtonを配置してあるシーンに、ButtonTypeをRestoreに設定したボタン(以下レストアボタン)を配置するだけでレストアの処理は走ると思います。
具体的にはレストアボタンを押すと、アイテムの購入完了と同じonPurchaseComplete(Product product)メソッドが購入済みアイテムの数だけ呼ばれます。購入時になにかイベントが起こるような作りだとイベントが連続で起こってしまいますので注意が必要です。
レストアボタンを押した時に他の処理(画面に触れなくするとか)をしたい場合はインスペクタから通常のButtonと同じように設定できます。
すべてのレストアが完了した時になにか処理をしたい場合(画面に触れない状態を解除するとか)は、多少工夫が必要です。っていうか未だに私も正しいやり方がわからないので、参考程度でお願いします。
このブログ記事ではIAPButton.csを改造する必要ないと書きましたが最近は改造するほうが楽だと気づいたのでそうしています。
やり方1:
IABButton.cs内のvoid OnTransactionsRestored(bool success)メソッドに処理を書く
簡単ですが、たぶんそのままだと自前のクラスにアクセスできないのでさらに工夫が必要です。
やり方2(おすすめ):
IABButton.cs内のvoid Restore()の以下をコメントアウトする
CodelessIAPStoreListener.Instance.ExtensionProvider.GetExtension<IAppleExtensions>().RestoreTransactions(OnTransactionsRestored);
自前クラスの好きなところ(レストア開始時とか)に以下の処理を追加する
同じクラス内にvoid OnTransactionsRestored(bool success)を実装する(->リストア完了時にこのメソッドが呼ばれます)
またいずれのやり方でも、UnityIAPをアップデートしたら再度IAPButton.csを修正する必要がありますので注意してください。
以上となります。
時間がなくてガチャガチャ書いてしまいましたが参考になれば幸いです。
ありがとうございます!とても参考になりました。
おかげさまで無事実装できました。
お役に立ててよかったです!
こんにちは。
私もCodeless IAPで実装しようと考えているのですが、
1つのボタンでAndroidとiOSの両方で動作可能なのでしょうか?
それと、消費型アイテムの場合はレストア対応不要で合ってるでしょうか?
基本的にGooglePlayで公開するアプリについては、リストアの実装は不要です。
逆にAppStoreで公開する場合は非消費型アイテムのリストアを実装しないと審査に通りません。
という感じになっております。適当にググって基本的なところを情報収集されることをおすすめします。本当は公式ドキュメントを読むのが一番ですが・・・