すべてのヨーロッパの価格を100倍に膨らませたコンマ

カンマを除去する価格パーサーは、ドイツの9,99 €を999と読み取った。クラッシュもせず、見た目も正常で、収益モデルは静かに実際の100倍の数字を報告していた。

価格は、桁違いのエラーがチャート上で完全に妥当に見える唯一の入力です。サブスクリプションアプリが年間$6,499と表示するのは、立ち止まって考えれば馬鹿げていますが、ダッシュボードを流し見していると全く目立ちません。

コードがしていたこと

パーサーは数字を照合する前に桁区切りを除去していました。これは英語では正しいですが、ヨーロッパの大半では間違いです。ドイツのストアフロントは9,99 €と表示し、カンマが小数点なので、それを除去すると999になります。

収益モデルは画面上のどのストアフロントからでも価格ラダーを読み取るため、ドイツタブで追跡対象アプリを開くと、アンカー価格が44.36ではなく6,499として入力されました。147倍の過大表示で、エラーも警告も目に見える症状もありません。

修正、そしてロケール検出が間違った答えだった理由

明らかな修正は、ストアフロントを調べてその規則を適用することです。私たちはそうしませんでした。パーサーには出所が確実でない文字列も渡されるため、黙って英語にフォールバックするルックアップは、より見つけにくい形でバグを再現してしまうからです。

代わりに小数点の位置は位置で決まります。ドットとカンマの両方が現れる場合、右端が小数点です:1.234,56と1,234.56はどちらも正しく解析され、どの国から来たかは分かりません。片方だけが現れる場合、ちょうど3桁が続くときは桁区切り、それ以外は小数点として扱われます。

同じバグ、異なる接尾辞をまとって

次にインドネシア。Appleは829,000ルピアを"Rp 829ribu"と表示します。ここでribuはインドネシア語で千を意味します。文字通りに読むと829ルピア、約5米セントで、$69.99の米国価格と比較すると、画面上で最も劇的なローカライズの発見として公開されていたでしょう。

桁を表す単語は処理されるようになりました。しかし、そのテーブルは完全にはなり得ません。どのストアフロントも、こちら側で見たことのない単語を表示する可能性があるからです。そのため、下限も設けられています:基本市場の2%未満に換算される価格は、公開せず信頼できないものとして保留されます。私たちが測定する最も安い実際の市場であるトルコは5%なので、このガードは実際の価格設定を疑うことなく桁違いのエラーを検出します。

関連

ブログ · ケーススタディ · Free ASO tools · 製品 · プライバシーと利用規約 · AsoTheory