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

2017.05.20

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんぬづは、『あの娘にキスと白百合を』で有名な缶乃先生の別作品である『サイダーと泣き虫。』という短編集が 最高 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環境で行うデバッグが正確なデバッグであるかどうかというと難しいところはありますが、なにかより良い方法をご存知の方は教えていただけると幸いです。

参考・関連