Google Play ストアで定期購入の価格変更の検証をした結果まとめ

本投稿は TECOTEC Advent Calendar 2024 の6日目の記事です。
こんにちは、証券フロンティア事業部の髙田です。
普段はAndroidアプリエンジニアとしてAndroidアプリの開発に携わっています。
弊社で提供するアプリではサーバー費やデータ購入費の増加に伴い、心苦しいですが定期購入の価格の改定を行いました。
その際に調査したGoogle Play ストアの定期購入での価格変更について、実験を含めた内容を今回はまとめたいと思います。

目次

今回の実験の方法

今回、価格変更の実験では検証用の非公開アプリを利用しました。
リリース済みのアプリで実際に価格を変更してしまうと、テストではなく全ユーザーに影響してしまうためです。
価格変更の実験としてはPlay Billing Labを利用すると比較的簡単にできるのでおすすめです。(実験した後に知ったので今回はナシです。)
どちらの手法を取る場合でもGoogle Play Console上でのテスター登録が必要です。
テスター登録を行わなければ開発者でも実際の課金が走ってしまうので実験する場合は注意してください。

価格変更について

価格変更といっても値上げと値下げがあります。
様々な理由で行われる価格変更ですが、値上げの場合と値下げの場合で設定項目や通知の内容が大きく変わります。
それぞれについての説明とテスト環境での確認結果を記載します。

値下げは簡単

ユーザーにとって有利に働く値下げに関しては仕様自体も簡単です。
値下げの設定を行った後、新規のユーザーは直後から、継続中のユーザーは次回の更新日から改定価格での定期購入が自動的に行われます。
値下げが行われる際にはユーザーには以下のようなメールが送られることで通知がされます。(テスト環境なので5分間の定期購入になっています)

値下げ通知メール

値上げには2種類ある

続いては値上げについてです。
こちらについては価格の変更でもユーザーに対して不利になるにも関わらず通知方法などが実際に試してみなければ分かりにくいです。
ですので実際のメール等を含めて記載します。

オプトイン型

オプトイン型とは簡単に言うとユーザーに同意を求める値上げです。
オプトインの場合には、変更された後にまず以下のようなお知らせが届きます。

変更通知のメール

さらに、更新日の直前には追いメールが届きます。
メールの内容にもあるように、オプトイン型の場合は同意をしない場合は更新日のタイミングで解約となります。

解約しちゃうよの追いメール

ストアで確認した場合、以下のような表示になります。

オプトイン時のストア上の表示

ユーザーに同意を求めるという性質上、同意をし忘れてしまった場合などに解約になってしまうという恐れがあります。

オプトアウト型

オプトアウト型は反対にユーザーに同意を求めることはありません。
なので、しれっと値上げしてしまえるということか!!.........というわけでもありません。
オプトアウト型の場合は、同意を求めるわけではありませんがユーザーに通知は行きます。

値上げ通知メール

こちらもストア上で表示があります。

オプトアウト時のストア上の表示

こちらのメールに関しては値上げがされることのみの通知でユーザーは確認する必要がないことがわかります。
更新時の通知タイミングは以下の流れになります。
今回は月額520円から1000円への値上げをした場合を例として示します。

オプトアウト値上げの通知の流れ

ユーザーに対して同意してもらう手間を掛けずに、自然な価格変更を行うことができます。
ただし、何度もオプトアウトの値上げをしてしまうと、ユーザーとしても結局いくらになったのか分かりにくくなってしまう等の不利益が生じます。
そのため、オプトアウト型の値上げについては365日に1回という制限がついています。
間違った価格にあげてしまった!という場合はオプトアウトでの修正が効きませんので、間違った場合はおとなしくオプトインでの価格変更を行いましょう。
今回は実際に対応したオプトアウト型の価格変更について価格変更のタイミング等も含めてもう少し深堀りしておきたいと思います。

変更設定の方法

Google Play Consoleでの設定は至って簡単です。
定期購入の基本プランの編集から価格と在庫状況の箇所にある「Set prices」からそれぞれ価格を設定します。

Set pricesから設定する
提供している国の分だけ設定する必要がありますが、すべての国を選択していると一つの国の通貨で選択するだけで自動で各通貨に換算されます。
ここで注意が必要なのは設定を確定したタイミングで新規購入者の定期購入の価格が即座に変更されます。
"いついつから変更"としたい場合は設定するタイミングには注意が必要です。
さらに、現在継続して定期購入に登録しているユーザーに対しては別途設定が必要です。
プランと特典を選択する箇所で縦三点リーダー(「︙」アイコン)を選択します。
縦三点リーダーを選択
ここでオプトインオプトアウトを選択することが可能です。
オプトアウトできない時は赤文字で注意される

これらを設定するだけで、特に申請なども不要です。

余談

レシート情報について

最後にストアの定期購入を利用するにあたって、まあまあ見ることになるレシート情報についてまとめておきます。
本題とはあまり関係はありませんが、どうせなら備忘録的に書いておこうと思います。
Google Play Console内の注文履歴などから支払いに関する購入トークンを取得し、リクエストを投げることで以下のようなレスポンスを受けることができます。

{
    "startTimeMillis": "1687951263810",
    "expiryTimeMillis": "1735384646304",
    "autoRenewing": true,
    "priceCurrencyCode": "JPY",
    "priceAmountMicros": "1180000000",
    "countryCode": "JP",
    "developerPayload": "",
    "paymentState": 1,
    "orderId": "GPA.****-****-****-*****..**",
    "acknowledgementState": 1,
    "kind": "androidpublisher#subscriptionPurchase"
}
  • startTimeMillis
    定期購入を開始した日時がエポックミリ秒で表示されます。
  • expiryTimeMillis
    定期購入が期限を迎える日がエポックミリ秒で表示されます。
  • autoRenewing
    定期購入が期限後に自動更新されるかが表示されます。
    猶予期間や一時停止期間が設定されている場合はすべての期間が終了するまでtrueで返されます。
  • priceCurrencyCode
    ユーザーの定期購入がどの通貨で行われているかを確認できます。
  • priceAmountMicros
    ユーザーの定期購入の上記通貨での価格がマイクロで表示されます。(なぜマイクロ表示なのかは???)
  • countryCode
    ユーザーの定期購入の国コードが表示されます。
  • developerPayload
    一意の文字列を指定することで識別することができましたが現状では非推奨となっており、あまり利用すべきではありません。
  • paymentState
    ユーザーの支払い状況が表示されます。
    • 0 : ユーザーの支払いが保留中です
    • 1 : ユーザーの支払いが受領済みです
    • 2 : ユーザーは無料期間の利用です
  • orderId
    orderIdが表示されます。 末尾の数字で定期購入の継続数を判定できます。(未記載から始まり、0,1,2...)
  • acknowledgementState
    注文の承認状況が表示されます。
    ストアでの購入では、ストアの購入処理が終わった後、3日以内に承認処理を行う必要があります。
  • kind
    購入処理のタイプが入ります。

まとめ

今回はGoogle Play ストアの価格変更について、実際にテストをしてみた結果を含めてまとめました。
ストアの定期購入については、ドキュメントを読んでも実際にはどうなるのかイマイチわからない場合も多く、お金の絡む重要な箇所なのになかなか対応に不安が残る部分です。
実際に実験をしてみることで理解が深まる点もあり、対応したい方式に適したものを見つけることができました。
やったことないけど実際どうなるの?という疑問をお持ちの方の参考になれば幸いです。

テコテックの採用活動について

テコテックでは新卒採用、中途採用共に積極的に募集をしています。
採用サイトにて会社の雰囲気や福利厚生、募集内容をご確認いただけます。
ご興味を持っていただけましたら是非ご覧ください。 tecotec.co.jp