Python
Unity

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のカンファレンス関係者の方々にこの場を借りて感謝致します.