Edited at

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

More than 1 year has passed since last update.

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

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を使う場合は、(この大迷惑な仕様の事を)忘れないように注意しましょう。