Die training class for Selling In-app Products in Android schlägt eine Nutzlast zu verwenden, wenn eine Kaufanfrage machen:Was wird als Entwickler-Payload in Google In-App Billing-APIs verwendet?
Das fünfte Argument enthält eine ‚Entwickler Nutzlast‘ Zeichenfolge, die Sie zusätzliche Informationen senden zu einer Bestellung verwenden können (es kann ein leerer String sein) . In der Regel wird damit ein Zeichenfolgen-Token übergeben, das diese Bestellanforderung eindeutig identifiziert. Wenn Sie einen Zeichenfolgenwert angeben, gibt Google Play diese Zeichenfolge zusammen mit der Kaufantwort zurück. Wenn Sie anschließend Fragen zu diesem Kauf stellen, gibt Google Play diese Zeichenfolge zusammen mit den Kaufdetails zurück.
Sicherheit Empfehlung: Es ist ein gute Übung in einer Zeichenfolge zu übergeben, die Ihre Anwendung hilft den Benutzer zu identifizieren, die den Kauf getätigt, so dass Sie später überprüfen können, dass dies durch den Benutzer ein legitimer Kauf. Bei Verbrauchsartikeln können Sie eine zufällig generierte Zeichenfolge verwenden. Bei nicht konsumierbaren Elementen sollten Sie jedoch eine Zeichenfolge verwenden, die den Benutzer eindeutig identifiziert.
Die Implementing IAB Purchase page hat eine ähnliche Empfehlung, mit dem zusätzlichen Hinweis, dass die Nutzlast Wert auf Ihrem eigenen sicheren Server geprüft werden soll:
Sicherheit Empfehlung: Wenn Sie eine Kaufanfrage senden, ein erstellen String-Token, das diese Bestellanforderung eindeutig identifiziert und dieses Token in developerPayload einfügt. Sie können eine zufällig generierte Zeichenfolge als Token verwenden. Wenn Sie die Kaufantwort von Google Play erhalten, überprüfen Sie die zurückgegebene Datensignatur, die orderId und die developerPayload-Zeichenfolge. Für zusätzliche Sicherheit sollten Sie die Überprüfung auf Ihrem eigenen sicheren Server durchführen. Stellen Sie sicher, dass die orderId ein eindeutiger Wert ist, den Sie zuvor noch nicht verarbeitet haben, und dass die developerPayload-Zeichenfolge mit dem Token übereinstimmt, das Sie zuvor mit der Kaufanforderung gesendet haben.
auf dem Quellcode der Suche nach dem Trivial Drive App, die Google mit der API zu demonstrieren, finde ich diese Warnung:
* WARNING: Locally generating a random string when starting a purchase and
* verifying it here might seem like a good approach, but this will fail in the
* case where the user purchases an item on one device and then uses your app on
* a different device, because on the other device you will not have access to the
* random string you originally generated.
*
* So a good developer payload has these characteristics:
*
* 1. If two different users purchase an item, the payload is different between them,
* so that one user's purchase can't be replayed to another user.
*
* 2. The payload must be such that you can verify it even when the app wasn't the
* one who initiated the purchase flow (so that items purchased by the user on
* one device work on other devices owned by the user).
*
* Using your own server to store and verify developer payloads across app
* installations is recommended.
Also von all diesen Nachrichten, es wie eine schlechte Idee klingt Verwenden Sie eine Zufallszahl/Zeichenfolge für die Nutzlast. Auch nach dem Lesen der letzten Warnung klingt es nach einer schlechten Idee, die Geräte-ID als Payload zu übergeben, da sie für den gleichen Benutzer auf verschiedenen Geräten unterschiedlich sein wird. Was sollte also für die Entwickler-Payload verwendet werden?
Meine App bietet lokale Funktionen, auf die der Benutzer zugreifen kann, ohne sich bei einem Dienst anmelden zu müssen. Es gibt also kein Konzept für einen "Benutzer" und auch keine serverseitige Komponente. Die In-App-Kaufanfrage bezieht sich auf ein Upgrade, mit dem Anzeigen aus der App entfernt werden. Ist es sinnvoll, dass eine App wie diese die Payload-Funktion nutzt, oder ist es besser, eine leere Zeichenfolge dafür zu verwenden und sie anfällig für Replay-Angriffe zu machen?
Warum machen sie es nicht einfach für jeden und tun was Amazon und Apple tun und bieten einen externen Quittungsvalidierungsservice an? –
@MichaelWiles sie es tun, überprüfen AndroidPublisher API (https://developers.google.com/apis-explorer/#p/androidpublisher/v2/), insbesondere androidpublisher.purchases.products.get Methode – tomrozb