LoginSignup
4
4

More than 5 years have passed since last update.

[備忘録] AndroidのIn-app BillingのorderIdは、テスト時にはセットされない

Last updated at Posted at 2016-09-18

忘れていると、とても痛い目にあう仕様。

AndroidのIn-app BillingのorderIdは、
(アプリのアルファ/ベータ公開)テスト時にはセットされない

ドキュメントの片隅に、ひっそりと書いてあります。
[Testing In-app Billing]
https://developer.android.com/google/play/billing/billing_testing.html#testing-purchases
Testing In-app Purchasesセクション。

Test purchases can be used in alpha/beta releases only.

Test Purchases (In-app Billing Sandbox)

Test purchases don't have an orderId field

または、In-app Billing Referenceの、
Table 4. Descriptions of the JSON fields for INAPP_PURCHASE_DATA.
を参照。

ですが、この仕様を忘れていた場合、テスト時にorderIdがセットされていないことが発覚するのは、アプリのアルファ/ベータ公開テスト時。

なので、orderIdをチェックするコードが入っている場合は、何らかの対策しておかないといけません。(テスト時はスルーするなど)
・・といっても、「テスト時」かどうか判定できない(テストかどうか判定するフラグは、データに入っていない)ので、実際は、本番用とテスト用のバージョンを分けるしかありません。
言い換えると、orderIdを扱う箇所があるなら、本番にならないとテストできないパスが存在するということ。

テスト段階で、(購入処理の一部ができないなどで)対策が抜けている事に気づいた場合は・・
・対策用のコードを入れたら、他の場所に不具合が出た
(例:orderId以外のチェックなどが原因で、セーブデータが読込めない)
・テスト時のセーブデータを、本番用にそのまま使えない
(例:orderIdが設定されていないデータが混在するので、セーブデータの消去が必要)
・すでに公開していたアプリに、購入機能を追加した場合は・・テスト参加者は、どこまでロールバックするのだろう?
というシナリオもあり得るので、要注意。

そして、(テスト時は)orderIdに紐付くデータを持たせられない
こちらの方が深刻な問題です。(テスターだけロールバック・・を除けば。)

取引照合用のデータベースなどで、うっかり、注文ID(orderId)をキーにしてしまったなんて事は・・、いや、(仕様上の制限を説明していなければ)普通、するでしょう。当然、Web周りも影響を受けるわけで。

テストをしないで公開する?設計変更して大幅に直す?それとも・・公開を一旦中止する?

そんな選択に迫られないためにも、In-app Billingを使う場合は、(この大迷惑な仕様の事を)忘れないように注意しましょう。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4