Google Play の購入すべてに難読化アカウント id を刻め、さもないとチャージバックが追跡不能なまま届く
Google Play では、購入ごとに安定したハッシュ化 id を刻印でき、争議が発生するとそれを読み返してくれます。設定しておけば、チャージバック審査は、使用状況を報告しなければならないまさにその利用者に結びつきます。省略すれば、24 時間の時計の下で、素の注文 id を頼りに推測で照合することになります。

要点
- 難読化アカウント id は、setObfuscatedAccountId で Google Play の購入に付加する文字列です。Google Play はそれを注文とともに保存し、後で obfuscatedExternalAccountId として返すため、購入をそれを行ったあなたのシステム上の利用者までたどれます。
- Google 自身の言葉では、このフィールドによって Google Play は不規則な活動、たとえば短時間のうちに同一アカウントで多数の端末が購入するといった事象を検出できます。設定すれば、取引が完了する前の購入の瞬間に、Google 自身の不正審査へデータを送り込むことになります。
- この識別子は 64 文字までに制限され、平文で個人情報を持ってはなりません。Google は、メールアドレスなどの PII をこのフィールドに保存すると購入がブロックされると述べ、代わりに一方向ハッシュまたは暗号化を推奨しています。
- 銀行のチャージバックがあなたの審査を必要とするとき、Google Play は PendingRefundReviewNotification を送ります。それが名指すのは注文であって、人ではありません。難読化アカウント id は、その注文を、使用状況を報告しなければならない利用者レコードへ対応づける結合キーです。
- 争議への回答とは、24 時間以内に orders.reviewrefund を呼び出し、refundPreference、sampleContentProvided フラグ、そして consumptionPercentageMilliunits や consumptionUsageEvents といった消費の証拠を添えることです。その証拠は、注文がどの利用者のものかを知って初めて組み立てられます。
- 2026 年 8 月 3 日以降に発生した Google Play の注文では、敗れたチャージバックは開発者に、購入価格から Google の手数料を引いた額に、銀行のチャージバック手数料を加えて請求します。注文を特定できずに回答できない争議は、いまや単なる失注ではなく、直接のコストです。
- サブスクリプションだけでなく、購入すべてにこの id を設定し、サーバー側で読み返してください。クライアントでは Purchase.getAccountIdentifiers から取得でき、バックエンドでは購入レコード上の obfuscatedExternalAccountId フィールドです。
Google Play のチャージバック審査は、注文と購入トークンだけを名指して現れます。顧客が誰かは教えてくれません。もしその購入に自分の識別子を刻んでいなければ、あなたはいま 24 時間の時計の下で、素の注文 id を利用者テーブルに照合し、見つけられないかもしれない使用の証拠で回答しなければなりません。難読化アカウント id がその解決策です。それはチェックアウト時に付加する短い文字列で、Google Play が購入とともに保存し、後であなたに返すため、注文はすべて、それを行ったまさにその利用者までたどれます。以下では、このフィールドが何であるか、なぜそれが争議に回答できるかどうかそのものを左右するのか、そして敗れたチャージバックが請求書になったいま、省略の代償が何かを説明します。
難読化アカウント id とは実際に何か
難読化アカウント id は、顧客が何かを買うときに Google Play の課金フローへ渡す任意の文字列です。BillingFlowParams ビルダーの setObfuscatedAccountId で設定し、Google が購入とともに保存します。それは顧客の名前でも、メールアドレスでも、Google アカウントでもありません。それは、あなた自身の利用者に対するあなた自身の識別子であり、Google がその人が誰かを知ることなく保持できる形で書かれています。
それはチェックアウト時に設定する文字列であって、名前ではない
Google の言葉では、setObfuscatedAccountId は、あなたのアプリ内で購入者の利用者アカウントに一意に紐づく任意の難読化文字列を指定します。「難読化」という語は実際の役割を担っています。Google はあなたの生の利用者 id も、その人を特定できるものも欲しがりません。求めているのは、あなたの側の利用者と一対一に対応する安定したトークンだけです。このフィールドは 64 文字までに制限され、ハッシュを余裕をもって収めますが、それ以上はほとんど入りません。
Google はまず自身の不正審査のためにそれを読む
あなたに役立つより前に、このフィールドは Google のために一つの仕事をします。課金のドキュメントには、Google Play はこの値を用いて、短時間のうちに同一アカウントで多数の端末が購入するといった不規則な活動を検出でき、Google はこのデータを用いて疑わしい挙動を検出し、一部の種類の不正取引を完了する前にブロックする、とあります。ですから設定の最初の見返りは上流にあり、より清潔な購入と、後で無効化や争議になる不正な購入の減少に表れます。Google が難読化アカウント id と Voided Purchases API を、二大コア不正対策ツールとして並べて挙げているのには理由があります。
チャージバック審査が届くとき、なぜそれが重要か
予見できる返金は簡単です。難しいのは銀行のチャージバックです。なぜならそれは、あなたの顧客があなたに話しかけることから始まらないからです。それは銀行から始まり、Google Play は時計を付けた審査としてあなたに転送します。
争議が名指すのは注文であって、人ではない
顧客が銀行に請求を争い、Google があなたの意見を必要とするとき、Google Play は PendingRefundReviewNotification を送ります。そのメッセージが識別するのは注文です。あなたの利用者 id は運びません。なぜなら Google はあなたの利用者 id を持ったことがないからです。持っていたのは、あなたが購入に刻んだものだけです。もしそれが何もなければ、あなたはいま、素の注文 id と購入トークンを自分の記録に逆検索し、購入時にそのトークンを記録していたことを、そして照合に曖昧さがないことを願うはめになります。もし難読化アカウント id を設定していれば、購入はあなた自身のハッシュを運び、一度のクエリで利用者を見つけ、身元探しではなく証拠づくりへ進めます。
orders.reviewrefund が実際にあなたに求めるもの
争議への回答とは、24 時間以内に orders.reviewrefund メソッドを呼び出すことです。Google はあなたの最初の呼び出しを記録し、残りは無視するので、最初の回答が唯一の回答です。以下がそれの求めるフィールドであり、証拠フィールドはどれも、注文がどの利用者のものかをあなたがすでに知っていることを前提としています。
| フィールド | 必須 | 何を運ぶか |
|---|---|---|
| pendingRefundToken | はい | あなたが回答している PendingRefundReviewNotification からのトークン |
| refundPreference | はい | APPROVE、DECLINE、または NEUTRAL。Play が返金すべきかどうかについてのあなたの推奨 |
| sampleContentProvided | はい | 購入前に無料サンプル、試用、またはその機能の説明を提供したかどうか |
| consumptionPercentageMilliunits | 任意 | 顧客が購入のどれだけを消費したか、0 から 100,000 milliunits |
| consumptionUsageEvents | 任意 | イベントのリスト。それぞれが、利用者が購入したものを消費または使用した一つの事例 |

省略の代償は実際にいくらか
Google Play の歴史の大半では、防御できないチャージバックは失注であり、肩をすくめて済むものでした。それが変わりました。2026 年 8 月 3 日以降に発生した注文では、敗れたチャージバックは開発者に、購入価格から Google の手数料を引いた額に、銀行のチャージバック手数料を加えて請求します。あなたが回答できないその争議は、いまや一つの明細項目です。
一つの注文を最後まで見てみましょう。顧客が $9.99 の購入を銀行に争います。Google Play が審査を送り、あなたには 24 時間あります。もし購入にタグを付けていれば、利用者を見つけ、購入したもののほとんどを消費したと分かり、DECLINE の選好と消費の証拠で reviewrefund に回答し、Google に不当な争議を争うための実在の主張を与えます。もしタグを付けていなければ、注文を間に合うように特定できないか、何もない状態で回答するかで、争議はあなたの側の言い分なしに裁かれ、8 月 3 日以降の注文では、$9.99 から Google の手数料を引いた額を払い戻し、さらにしばしば $20 近くに達する定額の銀行チャージバック手数料を払います。小さな売上では、その定額手数料だけで、あなたが手にした純額を上回ることもあります。
- 失われた収益:この売上におけるあなたの純取り分が、反転する。
- 銀行のチャージバック手数料:カードネットワークが定める定額のコスト。2026 年 8 月 3 日以降に発生した注文に上乗せで課され、通常の返金には決して付かない。
- 無駄になった支出:そのアカウントがすでに使った計算資源、サードパーティ API 呼び出し、ストレージ。回答できたかどうかに関わらず、失われる。
- 見えないパターン:安定したアカウント id がなければ、同じ利用者が繰り返し争っていることも分からず、連続的な悪用が無関係な一度きりの損失として読めてしまう。
購入をブロックされずに設定する方法
二つのルールが、チームがこのフィールドで犯すほぼすべての誤りをカバーします。id をハッシュ化し、そしてどこにでも設定することです。
利用者 id をハッシュ化し、決して PII を送らない
このフィールドにメールアドレス、電話番号、その他の生の個人情報を入れないでください。Google は、メールアドレスなどの PII を平文で保存すると購入がブロックされると明言し、値の生成には一方向ハッシュまたは暗号化を推奨しています。清潔なパターンは、内部利用者 id の一方向ハッシュを、毎回同じ方法で計算し、同じ利用者が常に同じ 64 文字の文字列を生むようにすることです。その人の Google アカウント id も、あなたの開発者 id も使わないでください。この値は、あなたのシステムにだけ意味を持つべきです。
購入すべてに設定し、サーバー上で読み返す
この id を、一回限りの商品もサブスクリプションも同様に、あらゆる課金フローに付加し、ラベルのない購入が決して生じないようにしてください。購入後は、二か所で読み返します。クライアントでは、Purchase.getAccountIdentifiers がオブジェクトを返し、その getObfuscatedAccountId があなたの設定した文字列を返します。バックエンドでは、サーバー側の購入レコードが obfuscatedExternalAccountId フィールドとしてそれを運び、信頼すべきはサーバーの控えです。なぜなら争議はあなたのサーバーに届くのであって、端末には届かないからです。
一つのアカウントに多数のプロファイルがある場合は setObfuscatedProfileId を使う
もしあなたのアプリで一つのアカウントが複数のプロファイルを持てるなら、たとえばストリーミングの世帯や、複数のキャラクターを持つゲームなら、setObfuscatedProfileId も設定してください。それも同じ種類の、ハッシュ化された 64 文字の PII なし文字列で、購入を行ったプロファイルにスコープされます。Google は、プロファイル id を設定するときはアカウント id も渡すよう求めていると注記しているので、両方を送ってください。結果として、争議はアカウントだけでなく、その金を使ったまさにそのプロファイルへも対応づきます。
iOS における対応、一行で
App Store は別の名前で同じ考えを持っています。iOS では購入に appAccountToken、すなわち UUID を付加し、それは取引上に、そして顧客が返金を求めたときに Apple が送る CONSUMPTION_REQUEST 上に返ってきます。問題の形は両ストアで同一です。争議や返金のフローは取引を参照し、あなた自身の識別子こそが、使用状況を報告できる利用者へそれを結び直すものです。
| 詳細 | Google Play | App Store |
|---|---|---|
| あなたが設定するフィールド | setObfuscatedAccountId による難読化アカウント id | appAccountToken |
| 形式 | ハッシュ化文字列、64 文字、PII なし | UUID |
| どこで返るか | 購入上の obfuscatedExternalAccountId | 取引上の appAccountToken |
| 供給する期限 | orders.reviewrefund、24 時間 | CONSUMPTION_REQUEST、12 時間 |
| あなたが報告するもの | 消費割合と使用イベント | Apple の消費フィールド |
これらはどれも作るのが難しくありません。省略するのは簡単です。なぜならチェックアウトのコードを書く日はチャージバックが届く日ではなく、省略の代償はその時まで見えないからです。RefundHalt は両ストアでアカウント識別子を設定して追跡し、購入と利用者のリンクを保ち、争議が常に実在の顧客に解決するようにし、そして販売時に記録した消費の証拠を添えて、Google Play の orders.reviewrefund と Apple の CONSUMPTION_REQUEST にそれぞれの期限内で回答します。24 時間の時計は、誰がそのものを買ったのか言えないと気づくべき瞬間ではありません。
よくある質問
- Google Play 課金における難読化アカウント id とは何ですか。
- それは setObfuscatedAccountId で購入に付加する任意の文字列で、あなたのアプリ内で購入者の利用者アカウントに一意に紐づきます。Google Play はそれを注文とともに保存し、多数の端末が一つのアカウントで購入するといった不規則な活動の検出に用い、後で obfuscatedExternalAccountId としてあなたに返すため、購入を特定の利用者まで結び直せます。
- 難読化アカウント id のフィールドに利用者のメールアドレスや id を入れてもよいですか。
- いいえ。Google は、メールアドレスなどの個人を特定できる情報を平文でこのフィールドに保存すると購入がブロックされると述べています。値の生成には一方向ハッシュまたは暗号化を用い、64 文字以内に収め、その人の Google アカウント id やあなたの開発者 id は使わないでください。
- 難読化アカウント id は Google Play のチャージバックにどう役立ちますか。
- チャージバック審査、すなわち PendingRefundReviewNotification が名指すのは注文であって、あなたの利用者ではありません。難読化アカウント id は、その注文を正しい利用者レコードへ対応づける結合キーであり、注文がどの顧客のものかを推測せずに、24 時間以内に実在の消費の証拠を添えて orders.reviewrefund に回答できます。
- 難読化アカウント id はサブスクリプションに設定すべきですか、それとも一回限りの購入だけですか。
- 一回限りの商品もサブスクリプションも、購入すべてに設定してください。ラベルのない購入は、争議や無効化が届いたときに利用者までたどれない購入であり、争議はどの注文タイプにも起こりえます。
- 難読化アカウント id と難読化プロファイル id の違いは何ですか。
- アカウント id は購入をあなたのアプリ内の利用者アカウントへ対応づけます。プロファイル id は、一つのアカウントが複数のプロファイルやキャラクターを持つアプリで、それをそのアカウント内の特定のプロファイルへ対応づけます。どちらもハッシュ化された 64 文字の PII なし文字列で、Google は、プロファイル id を設定するときはアカウント id も渡す必要があると注記しています。
出典と参考資料
- Android Developers: Fight fraud and abuse (Play Billing)
- Android Developers: BillingFlowParams.Builder (setObfuscatedAccountId, setObfuscatedProfileId)
- Android Developers: AccountIdentifiers (getObfuscatedAccountId)
- Android Developers: Help Google dispute chargebacks
- Google Play Developer API: Method orders.reviewrefund
- Play Console Help: Chargeback cost responsibility update (August 3, 2026)
- Apple Developer: Handling refund notifications (CONSUMPTION_REQUEST, appAccountToken)
RefundHalt
App Store と Google Play の返金を自動処理
続きを読む
銀行明細の身に覚えのない請求はチャージバックに変わり、チャージバックは返金よりもコストがかかる
顧客があなたのアプリの請求だと判別できないと、彼らはあなたではなく銀行に連絡し、その紛争はチャージバックとして着地します。Apple はすべてを apple.com/bill として表示し、何も変更させてくれません。Google Play では明細表示名を設定できます。それぞれのコストと、あなたがコントロールできるものをここで解説します。
Apple はいったん認めた払い戻しを取り消すことができ、サーバーが無視した取り消された払い戻しは、支払った顧客を締め出す
App Store がいったん認めた払い戻しを取り消すとき、Apple はあなたのサーバーが取り消したアクセスを復元することを期待します。App Store と Google Play における払い戻し、払い戻し拒否、払い戻し取り消しの各通知の仕組みと、無視したときにそれぞれが何を招くのかを解説します。