[iOS] Sandboxテスターによる課金デバッグはProduction環境で行なってはいけない

ios

はじめに

こんぬづは、『あの娘にキスと白百合を』で有名な缶乃先生の別作品である『サイダーと泣き虫。』という短編集が 最高 of 最高 なのでぜひ読んで欲しいと思っている田中です。

さて、今回は課金のデバッグでハマったポイントについて紹介します。

Sandboxテスターによる課金デバッグをProduction環境で行なってはいけない理由

注釈として、今記事の 「Production環境」 という言葉が指すのは、 リリース済みのアプリ環境 のことです。

理由は、公式ドキュメントからの引用ですが、Production環境においてSandboxテスターを使用してしまうと、そのSandboxテスターは無効なテスターとなってしまい、以降そのSandboxテスターを使っての課金のデバッグは行えなくなってしまうからです。そしてもし利用した場合、その課金デバッグは正常に行われません。(デバッグ時の具体的な挙動としては、 SKPaymentTransactionObserver のDelegateメソッドが正常にコールされないなど)

Important: If you mistakenly use a sandbox tester account to log in to a production environment on your test device instead of your test environment, the sandbox account becomes invalid and can’t be used again. If this happens, create a new sandbox tester account with a new email address.

解決策

課金デバッグを行う場合は課金用のdev環境を用意する必要があります。

手順1. デバッグ用のアプリとProductIdを用意する

課金デバッグ用にProduction環境とは別の BundleId でアプリを iTunes Connect 上に登録する解決策があります。この時、ProductId はProduction環境用のIdと重複して使うことはできないので別な ProductId を登録する必要があります。

手順2. SKProductsRequestでProductを取得するために使用する文字列の準備

サーバーサイドで ProductId を管理している場合は、サーバーサイドのdev環境においてはSandboxテスト用の ProdutId を返却するようにします。

アプリ内で ProductId を管理している場合は、新たに Build Configuration と Build Scheme を作成して、ビルド環境ごとの変数として ProductId を管理すると良いでしょう。

さいごに

「Sandboxテスターによる課金デバッグはProduction環境では行なってはいけない、古事記にも書いてある。 」ということと、その解決策を紹介してきました。

dev環境で行うデバッグが正確なデバッグであるかどうかというと難しいところはありますが、なにかより良い方法をご存知の方は教えていただけると幸いです。

参考・関連

  • mono0926

    TestFlight版はリリース版と基本的に同一ですが、課金はSandbox環境なので、それで課金デバッグできますよ( ´・‿・`)
    要件によっては本記事のやり方もありとは思います。
    (僕も普通に共存しているテスト版アプリで課金デバッグする時などにはそうしています。)

    • ktanaka117

      コメントありがとうございます!
      そうか、TestFlight版はまた別で、そっちではできるんですね。また別の機会にまとめようと思います!