9
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Unityで課金レシート検証する機能を入れるための備忘録

Posted at

経緯

プログラマとして、師と仰いでいるモグメット先生に、レシート検証は大切だから、ちゃんとドキュメント作りなさい。
とご指導頂いたので、ここに書き記します。

達成したい仕様

ユーザが課金アイテムを購入後、課金コールバックが帰ってきた後に、
すぐに課金アイテムを追加するのではなく、レシート検証に成功した場合のみ、追加する。

前提

  • 課金処理成功後、課金コールバック帰ってくる。
  • 課金処理完了メソッドを叩いた後は、課金コールバックは帰ってこない。
  • 正常に課金が行われた場合は、レシート検証は失敗しないものと過程するが、万一何らかの障害があってレシート検証ができなくなった場合でも、開発者のサーバコード修正により、一時的にレシート検証なしに課金処理を成功できる保険を事前に用意しておく。

#流れ

  1. 課金コールバックが呼ばれる。
  2. レシート検証APIを叩く。
  3. (成功時)課金処理を実施する。課金処理完了イベントを発火する。
  4. (失敗時)レシート失敗ポップアップ。OKボタンを押すと、ポップアップが閉じ、再度課金コールバックの発火を依頼するメソッドを叩く。

詳細なシーケンスについては、
Unityでアプリ内課金を簡単に実装する方法
を参考にする。

論点1 ローカル検証かリモート検証か。

UnityIAPがローカル検証をサポートしており、
工数の観点でローカル検証の方がだいぶ楽そうだが、
課金の履歴をサーバで保管したい。いざという時レシート検証処理をサーバ側で向こうにできるようにしたいという要件を達成するため、サーバでの検証を試みる。そのため、GAEサーバ上で、Google Play,IOS Appstore,Amazon App Store 用のレシート検証処理を構築する必要がある。

#Google Play
一度認証トークン取得APIでトークンを取得してから、
レシート検証APIを叩く必要がある。

[【iOS/Android】アプリ内課金 定期購読のサーバーサイド知識総まとめ]
(https://qiita.com/ckm/items/b8cf23ba4bd0ae5bbf34)

#IOS Appstore

ストアのAPIをサーバから叩けばよいが、サンドボックス環境の可能性を考慮する必要がある。

大切なポイント

審査期間中にAppleがサンドボックス環境のレシートを送信してくるため、「開発時はサンドボックス環境、本番運用時は本番環境用」と設定を切り替えるのではなく、実装としていずれのAPIにもリクエストできるようにしておく必要があります。まず先に本番APIにリクエストし、サンドボックスAPIにリクエストすべきステータスが返却されればそのようにします。

参考文献
[【iOS/Android】アプリ内課金 定期購読のサーバーサイド知識総まとめ]
(https://qiita.com/ckm/items/b8cf23ba4bd0ae5bbf34)

#Amazon App Store
シンプルにGETメソッドを叩けばよい模様
アプリ内課金(IAP)アプリのレシート検証

9
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?