はじめに
Unity IAP を使った課金処理の実装を行うことになった人向けて
課金処理の仕組みを理解していない状態から課金処理の仕組みを理解し、実装に至るまでの手順を残しておきます。
実装までの手順
- まずUnity IAPの仕組みについて理解する
- デモ用に実装された
Purchaser.cs
のスクリプトを利用,拡張して実装する
この記事を通じてできるようになること
- Unity IAPを使ったローカル環境での課金処理の実装
- Unity IAPを使ったクライアント端末でのレシート検証
- サーバでのレシート検証の導入概要(Python)
1. 公式ドキュメントの手順に従う
Unity - マニュアル: Unity IAPセットアップ
IAPのテスト 項目は,テストアカウントが作成済みなら飛ばす
2. 公式ドキュメントのクロスプラットフォームの章を読む
Unity - マニュアル: Unity IAP クロスプラットフォーム
ここで課金処理を実装するために、知識として知っておくべきことをまとめると
- 課金処理を行いたいSceneで、
IStoreListener
を実装したクラスのスクリプトをオブジェクトにアタッチし配置する - 上記のオブジェクトのが配置されたSceneに遷移すると
IStoreListener.OnInitialized
が呼ばれる -
IStoreListener
は下記を実装する必要があるOnInitialized
OnInitializeFailed
PurchaseProcessingResult
OnPurchaseFailed
-
ConfigurationBuilder
を利用して、Google Developer Console または iTunes Connectで登録した課金アイテムのプロダクトIDをUnity IAPに認識させる
(※ 複数の課金アイテムがある場合は,複数認識させるためのスクリプトを自前で組む必要がある)
-
サーバでレシート検証を行う場合は,ローカルでの課金アイテム購入時に
ProcessPurchase
でPending
を返し,サーバでのレシート検証後にConfirmPendingPurchase
を呼び出す. -
ローカルでもレシートチェックができる
3. 公式ドキュメントのレシート検証の章を読んでおく
レシート情報をサーバサイドで検証をするために必須知識なので目を通しておく
Unity - マニュアル: Unity IAP 購入レシート
4. Unite2016Tokyoの資料を参考に実装をする
Unity IAP の使い方 - SlideShare
Unite2016TokyoWS01 - Github
このGithubリポジトリの中の Purchaser.cs が実装する上で非常に参考になったので,1, 2で得た知識を元にソースコードを熟読する.
5. サーバでのレシート検証
[Android編]
Androidのアイテム課金でレシート検証をサーバ側で行う
GolangでGooglePlayの課金レシートの署名検証
AndroidでのUnity IAPの購入レシート内のjsonには
json
とsignature
の2つキーがGoogle Playから送られてきたレシートデータになる.
Google Developer Console内に定義されている公開鍵とsignatureの検証 = レシートの検証になる.
PythonではM2Crypto
を使いました.
[iOS編]
receipt-data
をキー,レシートデータ(Unity IAPならpayloadキーで取れる値)をバリューにして以下のURLにPOST
https://buy.itunes.apple.com/verifyReceipt
レスポンスが21007ならサンドボックス用のURLにもう一回送って検証
https://sandbox.itunes.apple.com/verifyReceipt
Pythonではurllib2
を使いました.
参考文献
Unity2016Tokyoのカンファレンス関係者の方々にこの場を借りて感謝致します.