はじめに
こんにちは、デリッシュキッチン開発部でソフトウェアエンジニアをしている新谷です。 新卒で入社してから早1年が経ち、時の流れの速さを感じています。
今回は、アプリ課金システムにおけるサーバー側のテスト方法についてご紹介します。 最近、デリッシュキッチンとヘルシカにおけるアプリ課金システムのサーバー側の修正を行いました。 その際、テスト方法に苦戦したので、その内容をまとめたいと思います。
アプリ課金システムの概要
デリッシュキッチンとヘルシカでは、iOSとAndroidの両方でアプリ課金ができますが、今回はiOSの課金についてのご紹介です。 そもそもアプリ課金には、以下の2種類があります。
- 一度切りの買い切り型
- サブスクリプション型(定期課金)
今回、扱うのはサブスクリプション型(定期課金)の課金です。 サブスクリプションの課金は、処理として大きく2つに分けられ、最初の購入処理とその後の通知処理です。 通知処理とは、Appleから通知される購読状態を受けて、ユーザーの状態を更新する処理です。 1つ目の購入処理の概要は以下の図のようになり、購入したレシートの検証とレシートの保存が主な処理です。 ここでは、subscription処理と呼ぶことにします。

2つ目の通知処理の概要は以下の図のようになり、ユーザーの課金状態を更新するのが主な処理です。 ここでは、notification処理と呼ぶことにします。

デリッシュキッチンとヘルシカでは、課金サーバーが分かれているので、厳密には上記の図ではないのですが、行っている処理は大枠では同じです。 ヘルシカの課金サーバーについては、以下の記事で解説されています。
サーバー側でテストするべき箇所
サーバー側でテストするべき箇所は、subscription処理とnotification処理の内、課金サーバー側で行う処理です。 テスト項目については、今回省略しますが、基本的にはsubscription処理とnotification処理で、DBに保存しているレシートの情報が正しいかどうかをテストすることになります。
テスト方法
iOS課金には、テストする方法として、以下の2つがあり、どちらとも実際に課金しても請求は発生しません。
- TestFlightでの課金
- Sandboxアカウントでの課金
TestFlightでの課金
TestFlightでの課金は、TestFlightで配布されたテストバージョンのアプリで課金を行う方法です。 TestFlightで課金すると、更新頻度は通常より短くなり以下の表のようになります。
1週間 | 1ヶ月 | 2ヶ月 | 3ヶ月 | 6ヶ月 | 1年 | |
---|---|---|---|---|---|---|
更新頻度 | 1日 | 1日 | 1日 | 1日 | 1日 | 1日 |
詳しい情報は公式サイトを参照してください。
Sandboxアカウントでの課金
Sandboxアカウントでの課金は、SandboxにしたいAppleアカウントをApp Store Connectに登録することで、Sandboxアカウントで課金を行えます。 Sandbox課金は、更新頻度はApp Store Connectで設定することができ、デフォルトが5分となっています。 表にすると以下のようになります。
更新頻度 | 1週間 | 1ヶ月 | 2ヶ月 | 3ヶ月 | 6ヶ月 | 1年 |
---|---|---|---|---|---|---|
更新頻度 | 3分 | 5分 | 10分 | 15分 | 30分 | 1時間 |
更新頻度は以下の候補があります。
- 3分
- 5分(デフォルト)
- 30分
- 1時間
こちらも、詳しい情報は公式サイトを参照してください。
TestFlightで配布しているアプリでSandbox課金を行う方法
TestFlightで課金する場合の注意点として、課金してしまうとキャンセルすることができません。また、更新頻度が1日に1回で1週間続くので、notification処理のテストが1日に1回しか確認できず、キャンセルまで1週間待つ必要があります。
そのため、基本テストするときはSandboxアカウントで課金を行いたいです。 しかし、TestFlightで配布しているアプリでは、TestFlightで登録されているAppleアカウントで課金させられてしまいます。

これは、TestFlightで配布しているアプリでは、TestFlightのアカウントで課金させられてしまうためです。 そのため、一度、Apple Storeからサインアウトを行うことで、TestFlightのアカウントからサインアウトします。 その後、課金をしようとすると以下のようにログイン画面に遷移します。

ここで、Sandboxアカウントでログインを行うことで、Sandbox課金を行うことができます。
まとめ
今回は、iOS課金のサーバー側のテスト方法についてご紹介しました。 Androidの課金については、またやり方が異なるので、また記事にしたいと思います。 iOS課金の実装やテストを行う際の参考になれば幸いです。