Edited at

Unity IAP実装方法まとめ


Unity IAP


手順

Unity IAPの仕組みについて理解した後,デモ用に実装されたPurchaser.csのスクリプトを利用,拡張して実装していくのが最短だと思う(実体験に基づく感想)


このまとめ記事全体を通じてできるようになること


  1. Unity IAPを使ったローカル環境での課金処理の実装

  2. Unity IAPを使ったクライアント端末でのレシート検証

  3. サーバでのレシート検証の導入概要(Python)


1. 公式ドキュメントの手順に従う

Unity - マニュアル: Unity IAPセットアップ

IAPのテスト 項目は,テストアカウントが作成済みなら飛ばす


2. 公式ドキュメントのクロスプラットフォームの章を読む

Unity - マニュアル: Unity IAP クロスプラットフォーム

ここで知る必要があること:



  • IStoreListenerを実装したクラスのスクリプトをオブジェクトにアタッチして,課金処理を行うシーンに配置すること

  • 上記のオブジェクトのあるシーンに遷移するとIStoreListener.OnInitializedが呼ばれる


  • IStoreListenerによって実装する必要がある


    • OnInitialized


    • OnInitializeFailed

    • PurchaseProcessingResult


    • OnPurchaseFailedの4つの関数があること




  • ConfigurationBuilderを利用して[Google Developer Console | iTunes Connect]で登録した課金アイテムのプロダクトIDをUnity IAPに認識させていること

(※ 複数の課金アイテムがある場合は,複数認識させるためのスクリプトを自前で組む必要がある)


  • サーバでレシート検証を行う場合は,ローカルでの課金アイテム購入時にProcessPurchasePendingを返し,サーバでのレシート検証後に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には

jsonsignatureの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を使いました.


参考文献

Unity IAPを使ってて思ったこと

Unity2016Tokyoのカンファレンス関係者の方々にこの場を借りて感謝致します.