2014年10月23日

iTunes 対応 (21) | IAP ゲーム内課金 part 4! Soomla SDK実装 完結編!!

さて、前回でIAP処理もほぼ終わってるんだけど、一応買い切り型アイテムの確認もしときますね。

購入処理の追加
さ、どうなんでしょう?
ちょっと確認してみますね。

まずは購入部分に、前やったみたいに購入処理を追加してみましょうね。
Screen Shot 2014-10-21 at 3.10.18 PM.png
429行目が購入の為の、BuyItem 呼び出し。
たぶん将来的にはこの辺変わるから本気で書いてないのもあるけど、bNoAd っていうフラグが出来てます。
これが true だったら、広告無しになるIAP購入済のつもりで書いてあります。


さらに購入後のフラグチェック
じゃ今度は購入確認の追加。
ゲーム全体で、さっきの bNoAd フラグを見て処理を振り分ける事にしますが、フラグのセット自体は、StoreController の中でやりますよ。
Screen Shot 2014-10-21 at 3.15.27 PM.png
ここの44行目。毎回数を確認して、一個以上あったらフラグを true に。
この LocalStoreInfo.UpdateBalances() 関数ですが、システムの初期化後や、在庫に変化があった時、今関係ないけど、中間通貨に変化があった時とかの各種イベント発生後に必ず呼ばれて、情報を更新する様になってます。たとえばこことか。
Screen Shot 2014-10-21 at 3.21.23 PM.png
アイテム残量に変化があった時のエベントハンドラ。LocalStoreInfo の更新を呼んでる
消費する必要の無いアイテムだから、やる事はこれだけかな?


さて、実行結果は?
じゃ、実行してみましょうかね!
う〜ん。100%の大成功じゃないのはご愛嬌ですねw
でもほぼ100%!買った後は、広告表示されなくなって、待ち時間も大幅短縮!

でもやっぱり、買った瞬間に絶賛表示中の広告、消えて欲しいですよね。
あとで、コード書き換えときます。
せっかく買ったのに、目の前のが消えないんじゃ怒られちゃうね^^;


デバイス変更時とかに向けての対応
さて、実はテストしてる間にちょっとした問題に気がついていたんですが...
アプリをアンインストール後に、購入済の Non-Consumable アイテムの復旧が出来てなかったんですね。
(iTunes側は覚えてるから、購入済のアカウントだと、購入してるけど、もう一回買う?って確認画面がでてました。この後の挙動は正直確認してないんですが、買ってしまっても、レストアされるだけで課金はされないと思ってますが...)
私も無知で全然知らなかったんですが、復旧用に、別途処理を入れないと行けないみたい。
この処理自体は Soomla 様にも用意されてるみたいなんですが、起動後毎回、とかやる処理でも無いので、Apple 様的には、ボタンを用意して、ユーザーにタイミングを決めてもらいなさい。という処理が推奨の様です。

なんで、ボタンをストア画面に追加して、レストア処理をやってみたいと思いますね。
で、追加しましたよー!
NewStore.PNG

左上のボタンがレストア用のボ・タ・ン
このボタンが押された時に、Soomla SDK のレストア処理を呼び出す事にしますね。
Screen Shot 2014-10-22 at 2.56.49 AM.png
え〜っと、このコードは、StoreController クラスの中です。124行目が、今回のメインに当たる購入済データのレストア処理。
この RestoreTransaction() 関数を、ボタンが押された時に呼びましょうね。

で、処理が終わったのを拾うのがイベントハンドラ。
データレストア関係のイベントはOnRestoreTransactionsStarted と OnRestoreTransactionsFinished の二つかな?
Screen Shot 2014-10-22 at 3.03.32 AM.png
これの実装が、下のこんな感じ。特に変わった事はしてないけど、終了後はインベントリーの更新、しましょうね。
Screen Shot 2014-10-22 at 3.03.15 AM.png
他には、ここで設定してる bMarketPurchase フラグを利用して、true の間、OS が持ってるスピナー(ぐるぐる回るローディング中アニメーション)を表示する様にしてますね。

実は、このスピナーをちゃんと表示する為に、元々直接呼んでた StoreInventory.BuyItem をここに纏めて、フラグもここでセットする様になったんですよね。タイミングよく表示されなくてちょっと苦労してたんだけど、実はイベントハンドラでセットしてたこのフラグが、イベントが数フレーム遅れて発生するんで、上手くステップの管理が出来て無かっただけだったんですw
だらしないなぁ〜....
ま、直ったからいいんだけど。

さて、ちゃんと動くかな...?
う〜ん。大丈夫みたい!!
確認メッセージとか当然もうちょっと必要だけど、処理はちゃんと動いてるね!!


ついでにスピナーの管理も
さて、おまけでスピナー。
元々ある機能だし、ネイティブプラグインももう怖くないし簡単だろうと思ってたら、Unityから上手く簡単には呼び出せないみたいですね。
で、ちょっとリサーチしてみたら、Unity にちゃんと呼び出しが用意してあるみたい!
あぁ〜、用意してあるって事は、ホントに出すの大変なんだろうなぁ〜。

って訳で、普通に Unity の API で単純に出してます。
Screen Shot 2014-10-22 at 3.16.53 AM.png
リファレンスに書いてあるけど、なぜかコルーチンで呼んで走らせないといけないらしい。
なんでだろ?闇が深いなぁ〜。ま、いいや。
StartSpinner で表示開始。 StopSpinner でフラグがクリアされたらループを抜けて終了。

目で見て確認しなくてもたぶんヘーキだけど、前のビデオで既に実装済なんで、見たかったら目を凝らして確認してみてね♪


さーて。これでようやく入れたかった基本機能、全部完了かな?
じゃ、こっからガンガンゲームのクオリティを上げて行きましょう!!

        にほんブログ村 ゲームブログ×PlayNCBlogへ
 初めてみました。よかったらクリックお願いね ♪


なんかもう、イスラエルに足を向けて寝れない
posted by やまけん at 12:05| Comment(0) | Unity | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

×

この広告は180日以上新しい記事の投稿がないブログに表示されております。