iOSアプリのアプリ内課金をテストするときに見ておくべき事をメモした内容です。

アプリ内課金を試す場合は、申請する前にiTunes Connectでアイテムを登録しておく必要があります。

まず最初に、テスト用のiTunesアカウントを作成しておきます。

  1. iTunes ConnectのManage Usersへ
  2. Select User TypeでTest Userを選択
  3. Add New Userから新規ユーザーを作成する。

ここで作成したテストアカウントを使ってテストを行います。
テストは実機でしか行えないので、先に普段使っているiTunesアカウントは、App Storeからログアウトしておいた方でいいです。
(アプリ内からiTunesアカウントのログアウトはできないため)
またJailbreakした端末ではテストができないようになっているので、普通の実機を使ってテストを行う必要があります。
(In-App Purchase で、プロダクトID が invalid になる場合の対処方法 – Over&Out その後)

以下、チェックする所を箇条書きにしたもの

  • 課金を行うページにiTunes アカウントを使用する旨のメッセージが表示されているか?
    メールアドレスとパスワードを使って課金アイテムを購入するが、
    その時に使うアカウントがiTunes Storeのアカウントで有ることを示すメッセージがあったほうがいい。
  • 電波がないときに購入ボタンを押した場合エラーになるか?
    通信エラーであるというメッセージがでるか?
    機内モードにして試すのが楽な方法
  • 機能制限で”App内での購入”が許可されてない場合に
    機能制限に関するエラーメッセージがでるか?
    “設定 > 一般 > 機能制限で[App内での購入]をONにしてください” のようなエラーメッセージがでると丁寧
  • 購入が成功したかが分かるか?
    購入成功のメッセージとかがあると分かりやすい
  • 購入ボタンを連打できたりしないか?
    単純に実装してると購入リクエストが複数飛んでややこしくなるので、
    モーダルなローディングメッセージやボタンを複数押せないような作りになっていたほうがいい。
  • ローディング画面などがある場合
    課金処理後にそのローディングメッセージがちゃんと消えるかどうか?
    購入(失敗/成功)、通信エラー、リストア(成功/失敗)等色々あるので、ちゃんとローディングメッセージが消えるかを確認する
  • Consumable(消費型)プロダクトの課金アイテムである場合、何度も購入できるか?
    消費型はアップルが購入情報を保存してくれない。
  • Non-Consumable(非消費型)プロダクトの課金アイテムである場合、リストア処理ができるか?
    2012年9月3日現在だと、リストア処理はちゃんとUIとして用意しないとリジェクトされる傾向になってる
    iOSアプリ内課金、リストア機能なしはなぜリジェクトされるのか: 誰でもできる電子書籍iPhoneアプリ開発講座
  • 購入ボタンを押したときに何も反応がない
    上の方のと同じような事だけど、フィードバックのないボタン等が存在しないかを確認
  • 購入中に通信が切れた場合
    テストするのは難しいけど、一応留意しておく。

月額課金の場合(Auto-Renewable Subscriptions)

基本的には消費型とやることは同じです。

月額課金の場合、Sandbox内では実際の時間と異なる時間になってることに注意します。
例えば、1ヶ月ごとの更新となる課金の場合、Sandboxでは5分で期限切れとなるため、リストアのテストをする場合
課金してからすぐ試さないと期限切れとなります。(レシートを検証すると21006を返す)

本番環境とサンドボックス環境では以下のような期間の対応になってます。

本番環境 サンドボックス環境
1週間 3分
1ヶ月 5分
2ヶ月 10分
3ヶ月 15分
6ヶ月 30分
1年 1時間

アプリ内課金のテストは自動的にSandbox(StoreKitアラート集 – StoreKitDemoで出るようにEnviroment: Sandboxとなる)で行われますが、
この Sandbox で挙動が結構怪しくなったり(具体的にはリストアで返ってくるものがおかしいなど)した場合は、
アプリを一度削除してみる事や、テストユーザーのアカウントを作りなおして見るなどすると改善することがあります。

他参考

実装については以下等が参考になる

Post Navigation