Versehen Sie jeden Google-Play-Kauf mit einer verschleierten Konto-ID, sonst trifft eine Rückbuchung ein, die sich nicht mehr zuordnen lässt
Google Play erlaubt es, jede Zahlung mit einer stabilen, gehashten ID zu versehen und liest sie zurück, wenn ein Streitfall eintrifft. Setzen Sie sie, und eine Rückbuchungsprüfung verweist auf genau den Nutzer, dessen Nutzung Sie melden müssen. Lassen Sie sie weg, und Sie gleichen eine nackte Bestellnummer mit Vermutungen ab, unter einer 24-Stunden-Uhr.

Wichtigste Erkenntnisse
- Die verschleierte Konto-ID ist eine Zeichenkette, die Sie mit setObfuscatedAccountId an einen Google-Play-Kauf anhängen. Google Play speichert sie zusammen mit der Bestellung und gibt sie später als obfuscatedExternalAccountId zurück, sodass sich ein Kauf zu dem Nutzer in Ihrem System zurückverfolgen lässt, der ihn getätigt hat.
- In Googles Worten erlaubt das Feld Google Play, ungewöhnliche Aktivität zu erkennen, etwa wenn viele Geräte innerhalb kurzer Zeit über dasselbe Konto einkaufen. Es zu setzen speist Googles eigene Betrugsprüfung zum Kaufzeitpunkt, bevor eine Transaktion abgeschlossen wird.
- Der Bezeichner ist auf 64 Zeichen begrenzt und darf keine personenbezogenen Daten im Klartext enthalten. Google sagt, dass das Speichern von PII wie E-Mail-Adressen in diesem Feld dazu führt, dass Käufe blockiert werden, und empfiehlt stattdessen einen Einweg-Hash oder Verschlüsselung.
- Wenn eine Bank-Rückbuchung Ihre Prüfung erfordert, sendet Google Play eine PendingRefundReviewNotification, die eine Bestellung nennt, keine Person. Die verschleierte Konto-ID ist der Verknüpfungsschlüssel, der diese Bestellung dem Nutzerdatensatz zuordnet, dessen Nutzung Sie melden müssen.
- Sie beantworten einen Streitfall, indem Sie orders.reviewrefund innerhalb von 24 Stunden aufrufen, mit einer refundPreference, einem sampleContentProvided-Flag und Nutzungsbelegen wie consumptionPercentageMilliunits und consumptionUsageEvents. Diese Belege können Sie erst zusammenstellen, wenn Sie wissen, zu welchem Nutzer die Bestellung gehört.
- Für Google-Play-Bestellungen, die am oder nach dem 3. August 2026 aufgegeben werden, stellt eine verlorene Rückbuchung dem Entwickler den Kaufpreis abzüglich der Google-Servicegebühr plus die Rückbuchungsgebühr der Bank in Rechnung. Ein Streitfall, den Sie nicht beantworten können, weil Sie die Bestellung nicht identifizieren, ist nun ein direkter Kostenposten, nicht bloß ein verlorener Verkauf.
- Setzen Sie die ID bei jedem Kauf, nicht nur bei Abonnements, und lesen Sie sie serverseitig zurück. Auf dem Client stammt sie aus Purchase.getAccountIdentifiers, und in Ihrem Backend ist es das Feld obfuscatedExternalAccountId im Kaufdatensatz.
Eine Google-Play-Rückbuchungsprüfung trifft ein und nennt eine Bestellung und ein Kauf-Token. Sie sagt Ihnen nicht, wer der Kunde ist. Wenn Sie diesem Kauf nie Ihren eigenen Bezeichner aufgeprägt haben, gleichen Sie jetzt eine nackte Bestellnummer mit Ihrer Nutzertabelle ab, unter einer 24-Stunden-Uhr, und müssen mit Nutzungsbelegen antworten, die Sie womöglich gar nicht finden. Die verschleierte Konto-ID ist die Lösung. Es ist eine kurze Zeichenkette, die Sie beim Bezahlen anhängen und die Google Play mit dem Kauf speichert und Ihnen später zurückgibt, sodass sich jede Bestellung genau dem Nutzer zuordnen lässt, der sie getätigt hat. Hier ist, was das Feld ist, warum es überhaupt darüber entscheidet, ob Sie einen Streitfall beantworten können, und was es kostet, es wegzulassen, jetzt da eine verlorene Rückbuchung eine Rechnung ist.
Was die verschleierte Konto-ID tatsächlich ist
Die verschleierte Konto-ID ist eine optionale Zeichenkette, die Sie in den Google-Play-Abrechnungsablauf übergeben, wenn ein Kunde etwas kauft. Sie setzen sie mit setObfuscatedAccountId auf dem BillingFlowParams-Builder, und Google speichert sie neben dem Kauf. Es ist nicht der Name des Kunden, nicht seine E-Mail und nicht sein Google-Konto. Es ist Ihr eigener Bezeichner für Ihren eigenen Nutzer, geschrieben in einer Form, die Google aufbewahren kann, ohne zu erfahren, wer die Person ist.
Es ist eine Zeichenkette, die Sie beim Bezahlen setzen, kein Name
In Googles Worten legt setObfuscatedAccountId eine optionale verschleierte Zeichenkette fest, die eindeutig mit dem Nutzerkonto des Käufers in Ihrer App verbunden ist. Das Wort verschleiert leistet echte Arbeit. Google will nicht Ihre rohe Nutzer-ID oder irgendetwas, das die Person identifiziert. Es will ein stabiles Token, das eins zu eins auf einen Nutzer auf Ihrer Seite abbildet, und nicht mehr. Das Feld ist auf 64 Zeichen begrenzt, was einen Hash bequem fasst und nicht viel sonst.
Google liest es zuerst für seine eigene Betrugsprüfung
Bevor es Ihnen überhaupt nützt, erfüllt das Feld eine Aufgabe für Google. Die Abrechnungsdokumentation sagt, Google Play kann diesen Wert nutzen, um ungewöhnliche Aktivität zu erkennen, etwa wenn viele Geräte innerhalb kurzer Zeit über dasselbe Konto einkaufen, und dass Google diese Daten nutzt, um verdächtiges Verhalten zu erkennen und manche Arten betrügerischer Transaktionen zu blockieren, bevor sie abgeschlossen werden. Der erste Nutzen des Setzens liegt also stromaufwärts, in saubereren Käufen und weniger von jenen betrügerischen, die später zu Stornierungen und Streitfällen werden. Google nennt die verschleierte Konto-ID und die Voided Purchases API nicht ohne Grund gemeinsam als seine beiden zentralen Werkzeuge gegen Missbrauch.
Warum es zählt, wenn eine Rückbuchungsprüfung eintrifft
Eine Rückerstattung, die Sie kommen sehen, ist einfach. Der harte Fall ist die Bank-Rückbuchung, denn sie beginnt nicht damit, dass Ihr Kunde mit Ihnen spricht. Sie beginnt bei der Bank, und Google Play leitet sie an Sie als Prüfung mit angehängter Uhr weiter.
Der Streitfall nennt eine Bestellung, keine Person
Wenn ein Kunde eine Belastung bei seiner Bank anficht und Google Ihre Eingabe braucht, sendet Google Play eine PendingRefundReviewNotification. Diese Nachricht identifiziert die Bestellung. Sie trägt nicht Ihre Nutzer-ID, weil Google Ihre Nutzer-ID nie hatte. Es hatte nur, was auch immer Sie dem Kauf aufgeprägt haben. War das nichts, durchsuchen Sie jetzt rückwärts eine nackte Bestellnummer und ein Kauf-Token gegen Ihre eigenen Datensätze, in der Hoffnung, das Token zum Kaufzeitpunkt protokolliert zu haben, und in der Hoffnung, dass die Übereinstimmung eindeutig ist. Wenn Sie eine verschleierte Konto-ID gesetzt haben, trägt der Kauf Ihren eigenen Hash, Sie schlagen den Nutzer in einer Abfrage nach und gehen zum Zusammenstellen der Belege über, statt nach der Identität zu jagen.
Was orders.reviewrefund tatsächlich von Ihnen verlangt
Den Streitfall zu beantworten bedeutet, die Methode orders.reviewrefund innerhalb von 24 Stunden aufzurufen. Google erfasst Ihren ersten Aufruf und ignoriert den Rest, die erste Antwort ist also die einzige Antwort. Dies sind die Felder, die es will, und jedes einzelne der Belegfelder setzt voraus, dass Sie bereits wissen, zu welchem Nutzer die Bestellung gehört.
| Feld | Erforderlich | Was es enthält |
|---|---|---|
| pendingRefundToken | Ja | Das Token aus der PendingRefundReviewNotification, die Sie beantworten |
| refundPreference | Ja | APPROVE, DECLINE oder NEUTRAL, Ihre Empfehlung, ob Play erstatten soll |
| sampleContentProvided | Ja | Ob Sie vor dem Kauf eine kostenlose Probe, eine Testversion oder eine Beschreibung der Funktion gegeben haben |
| consumptionPercentageMilliunits | Optional | Wie viel des Kaufs der Kunde verbraucht hat, 0 bis 100,000 milliunits |
| consumptionUsageEvents | Optional | Eine Liste von Ereignissen, jedes ein Fall, in dem der Nutzer das Gekaufte verbraucht oder genutzt hat |

Was es tatsächlich kostet, es wegzulassen
Den größten Teil der Geschichte von Google Play hindurch war eine Rückbuchung, die Sie nicht verteidigen konnten, ein verlorener Verkauf und ein Achselzucken. Das hat sich geändert. Für Bestellungen, die am oder nach dem 3. August 2026 aufgegeben werden, stellt eine verlorene Rückbuchung dem Entwickler den Kaufpreis abzüglich der Google-Servicegebühr plus die Rückbuchungsgebühr der Bank in Rechnung. Der Streitfall, den Sie nicht beantworten können, ist jetzt ein Posten auf der Rechnung.
Gehen wir eine Bestellung durch. Ein Kunde ficht einen Kauf von $9.99 bei seiner Bank an. Google Play sendet die Prüfung, und Sie haben 24 Stunden. Wenn Sie den Kauf gekennzeichnet haben, finden Sie den Nutzer, sehen, dass er das meiste des Gekauften verbraucht hat, und beantworten reviewrefund mit einer DECLINE-Präferenz und den Verbrauchsbelegen, was Google einen echten Fall gibt, um einen unrechtmäßigen Streitfall anzufechten. Wenn Sie ihn nicht gekennzeichnet haben, können Sie die Bestellung entweder nicht rechtzeitig identifizieren oder Sie antworten mit nichts, der Streitfall wird ohne Ihre Seite entschieden, und bei einer Bestellung nach dem 3. August zahlen Sie die $9.99 abzüglich der Google-Gebühr zurück, plus eine pauschale Bank-Rückbuchungsgebühr, die oft bei etwa $20 landet. Bei einem kleinen Verkauf kann diese Pauschalgebühr allein größer sein als das, was Sie netto verdient haben.
- Die verlorenen Einnahmen: Ihr Nettoanteil am Verkauf, umgekehrt.
- Die Rückbuchungsgebühr der Bank: eine Pauschalkosten, die das Kartennetzwerk festlegt, obendrauf berechnet bei Bestellungen, die nach dem 3. August 2026 aufgegeben werden, die eine bloße Rückerstattung nie trägt.
- Die verschwendeten Ausgaben: die Rechenleistung, die Drittanbieter-API-Aufrufe und der Speicher, die das Konto bereits genutzt hat, verloren, ob Sie antworten konnten oder nicht.
- Das Muster, das Sie nicht sehen können: ohne eine stabile Konto-ID können Sie auch nicht erkennen, dass derselbe Nutzer immer wieder anficht, sodass sich serieller Missbrauch als unzusammenhängende Einzelverluste liest.
Wie Sie es setzen, ohne dass Käufe blockiert werden
Zwei Regeln decken fast jeden Fehler ab, den Teams mit diesem Feld machen. Hashen Sie die ID, und setzen Sie sie überall.
Hashen Sie Ihre Nutzer-ID, senden Sie nie PII
Setzen Sie keine E-Mail, keine Telefonnummer und kein rohes persönliches Detail in dieses Feld. Google ist eindeutig, dass das Speichern von PII wie E-Mail-Adressen im Klartext dazu führt, dass Käufe blockiert werden, und es empfiehlt einen Einweg-Hash oder Verschlüsselung, um den Wert zu erzeugen. Das saubere Muster ist ein Einweg-Hash Ihrer internen Nutzer-ID, jedes Mal auf dieselbe Weise berechnet, sodass derselbe Nutzer immer dieselbe 64-Zeichen-Zeichenkette erzeugt. Verwenden Sie auch nicht die Google-Konto-ID der Person oder Ihre Entwickler-ID. Der Wert sollte nur für Ihr System etwas bedeuten.
Setzen Sie es bei jedem Kauf und lesen Sie es auf Ihrem Server zurück
Hängen Sie die ID an jeden Abrechnungsablauf an, an Einmalprodukte und Abonnements gleichermaßen, sodass kein Kauf je unbeschriftet bleibt. Nach dem Kauf lesen Sie sie an zwei Stellen zurück. Auf dem Client gibt Purchase.getAccountIdentifiers ein Objekt zurück, dessen getObfuscatedAccountId Ihnen die gesetzte Zeichenkette liefert. In Ihrem Backend trägt der serverseitige Kaufdatensatz sie als Feld obfuscatedExternalAccountId, und der Server-Kopie ist zu vertrauen, denn ein Streitfall trifft auf Ihrem Server ein, nicht auf dem Gerät.
Verwenden Sie setObfuscatedProfileId, wenn ein Konto viele Profile hat
Wenn Ihre App zulässt, dass ein Konto mehrere Profile hält, ein Streaming-Haushalt oder ein Spiel mit mehreren Charakteren, setzen Sie auch setObfuscatedProfileId. Es ist dieselbe Art gehashter, 64-Zeichen-, PII-freier Zeichenkette, auf das Profil bezogen, das den Kauf getätigt hat. Google merkt an, dass das Setzen einer Profil-ID auch verlangt, die Konto-ID zu übergeben, senden Sie also beide. Das Ergebnis ist, dass sich ein Streitfall nicht nur dem Konto zuordnet, sondern genau dem Profil, das das Geld ausgegeben hat.
Die iOS-Entsprechung, in einer Zeile
Der App Store hat dieselbe Idee unter einem anderen Namen. Auf iOS hängen Sie einem Kauf ein appAccountToken an, eine UUID, und es kommt bei der Transaktion und bei der CONSUMPTION_REQUEST zurück, die Apple sendet, wenn ein Kunde eine Rückerstattung verlangt. Die Gestalt des Problems ist auf beiden Stores identisch. Der Streit- oder Rückerstattungsablauf verweist auf eine Transaktion, und Ihr eigener Bezeichner ist das, was sie zu einem Nutzer zurückbindet, dessen Nutzung Sie melden können.
| Detail | Google Play | App Store |
|---|---|---|
| Feld, das Sie setzen | verschleierte Konto-ID via setObfuscatedAccountId | appAccountToken |
| Format | Gehashte Zeichenkette, 64 Zeichen, kein PII | UUID |
| Wo es zurückkommt | obfuscatedExternalAccountId beim Kauf | appAccountToken bei der Transaktion |
| Das Fenster, das es speist | orders.reviewrefund, 24 Stunden | CONSUMPTION_REQUEST, 12 Stunden |
| Was Sie melden | Verbrauchsprozentsatz und Nutzungsereignisse | Apples Verbrauchsfelder |
Nichts davon ist schwer zu bauen. Es ist leicht zu überspringen, denn der Tag, an dem Sie den Checkout-Code schreiben, ist nicht der Tag, an dem eine Rückbuchung eintrifft, und die Kosten des Überspringens sind bis dahin unsichtbar. RefundHalt setzt und verfolgt den Konto-Bezeichner auf beiden Stores, hält die Verbindung von Kauf zu Nutzer, sodass ein Streitfall stets zu einem echten Kunden auflöst, und beantwortet Google Plays orders.reviewrefund und Apples CONSUMPTION_REQUEST innerhalb ihrer Fenster mit den zum Verkaufszeitpunkt erfassten Verbrauchsbelegen. Die 24-Stunden-Uhr ist nicht der Moment, um zu entdecken, dass Sie nicht sagen können, wer die Sache gekauft hat.
Häufig gestellte Fragen
- Was ist die verschleierte Konto-ID in der Google-Play-Abrechnung?
- Es ist eine optionale Zeichenkette, die Sie mit setObfuscatedAccountId an einen Kauf anhängen und die eindeutig mit dem Nutzerkonto des Käufers in Ihrer App verbunden ist. Google Play speichert sie mit der Bestellung, nutzt sie, um ungewöhnliche Aktivität zu erkennen, etwa viele Geräte, die über ein Konto einkaufen, und gibt sie Ihnen später als obfuscatedExternalAccountId zurück, sodass Sie einen Kauf zu einem bestimmten Nutzer zurückbinden können.
- Darf ich die E-Mail oder ID eines Nutzers in das Feld der verschleierten Konto-ID setzen?
- Nein. Google sagt, dass das Speichern personenbezogener Daten wie E-Mail-Adressen im Klartext in diesem Feld dazu führt, dass Käufe blockiert werden. Verwenden Sie einen Einweg-Hash oder Verschlüsselung, um den Wert zu erzeugen, halten Sie ihn innerhalb von 64 Zeichen, und verwenden Sie nicht die Google-Konto-ID der Person oder Ihre Entwickler-ID.
- Wie hilft die verschleierte Konto-ID bei einer Google-Play-Rückbuchung?
- Eine Rückbuchungsprüfung, die PendingRefundReviewNotification, nennt die Bestellung, nicht Ihren Nutzer. Die verschleierte Konto-ID ist der Verknüpfungsschlüssel, der diese Bestellung dem richtigen Nutzerdatensatz zuordnet, sodass Sie orders.reviewrefund innerhalb von 24 Stunden mit echten Verbrauchsbelegen beantworten können, statt zu raten, zu welchem Kunden die Bestellung gehört.
- Sollte ich die verschleierte Konto-ID bei Abonnements oder nur bei Einmalkäufen setzen?
- Setzen Sie sie bei jedem Kauf, sowohl bei Einmalprodukten als auch bei Abonnements. Jeder unbeschriftete Kauf ist einer, den Sie nicht zu einem Nutzer zurückverfolgen können, wenn ein Streitfall oder eine Stornierung eintrifft, und Streitfälle können bei jedem Bestelltyp eintreffen.
- Was ist der Unterschied zwischen der verschleierten Konto-ID und der verschleierten Profil-ID?
- Die Konto-ID ordnet einen Kauf einem Nutzerkonto in Ihrer App zu. Die Profil-ID ordnet ihn einem bestimmten Profil innerhalb dieses Kontos zu, für Apps, in denen ein Konto mehrere Profile oder Charaktere hält. Beide sind gehashte, 64-Zeichen-Zeichenketten ohne PII, und Google merkt an, dass das Setzen einer Profil-ID auch das Übergeben der Konto-ID erfordert.
Quellen und weiterführende Informationen
- 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
Der Rückerstattungs-Autopilot für App Store und Google Play
Weiterlesen
Eine nicht erkannte Abbuchung auf einem Kontoauszug wird zu einer Rückbuchung, und eine Rückbuchung kostet Sie mehr als eine Rückerstattung
Wenn ein Kunde nicht erkennt, wofür Ihre App ihm etwas berechnet hat, ruft er die Bank an statt Sie, und dieser Streitfall landet als Rückbuchung. Apple zeigt alles als apple.com/bill an und lässt Sie nichts ändern. Google Play lässt Sie den Namen auf dem Auszug festlegen. Hier ist, was jede Variante kostet und was Sie steuern.
Apple kann eine bereits gewährte Rückerstattung rückgängig machen, und eine rückgängig gemachte Rückerstattung, die Ihr Server ignoriert, sperrt einen Kunden aus, der bezahlt hat
Wenn der App Store eine bereits gewährte Rückerstattung rückgängig macht, erwartet er, dass Ihr Server den Zugriff wiederherstellt, den Sie entzogen haben. So funktionieren die Benachrichtigungen über Rückerstattung, abgelehnte Rückerstattung und rückgängig gemachte Rückerstattung im App Store und bei Google Play, und was jede davon kostet, wenn Sie sie ignorieren.