Verwenden des In-App-Abrechnungsdienstes von Google Play

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Erstellen einer Android-App


In-App-Bezahldienste ermöglichen Ihnen, digitalen Inhalt direkt in Ihren Anwendungen zu verkaufen. Google Play In-app Billing ist der In-App-Abrechnungsdienst von Google für Android. In diesem Thema wird beschrieben, wie Sie mit FireMonkey Ihren Anwendungen den Zugriff auf die In-App-Abrechnung von Google Play ermöglichen.

Hinweis: Die folgenden Informationen stellen Ergänzungen des Hauptthemas über die Android-Entwicklung in der Dokumentation dar. Lesen Sie deshalb zuerst Mobile Android-Anwendungsentwicklung.

Unterstützte Geräte

FireMonkey unterstützt die In-App-Abrechnung von Google Play auf Geräten mit Android 2.2 oder später und der neuesten Version des Google Play Store. Siehe auch Plattformvoraussetzungen für FireMonkey, Android-Anforderungen.

Hinweis: Android-Emulatoren werden nicht unterstützt.

Grundvoraussetzungen

Bevor Sie den In-App-Abrechnungsdienst von Google Play verwenden können, müssen Sie:

Konfigurieren Ihren Anwendung für die In-App-Abrechnung in Google Play

Google verlangt, dass Sie einen Entwurf Ihrer Anwendung hochladen, bevor Sie In-App-Produkte hinzufügen können.

Laden Sie vor dem Hinzufügen der In-App-Abrechnungsunterstützung von Google Play zu Ihrer Anwendung Ihre Anwendung in ihrem aktuellen Stadium auf Google Play hoch:

  1. Bereiten Sie Ihre Anwendung für die Bereitstellung vor.
  2. Erstellen Sie ein signiertes .apk-Package für Ihre Anwendung.
  3. Laden Sie Ihre neue Anwendung auf Google Play hoch.

Klicken Sie auf der Google Play Developer Console auf der Seite für Ihre Anwendung auf Dienste und APIs. Auf der Seite "Dienste und APIs" wird der Lizenzschlüssel Ihrer Anwendung angezeigt. Wenn Sie Ihre Instanz von TInAppPurchase für die Verbindung mit Google Play konfigurieren, müssen Sie diesen Lizenzschlüssel in die Eigenschaft ApplicationLicenseKey kopieren.

TInAppPurchase unterstützt verwaltete In-App-Produkte. Unter In-app Billing Version 3, Product Types finden Sie weitere Informationen über verwaltete Produkte.

Hinweis: Gegenwärtig werden keine Abonnements unterstützt.

Hinzufügen der Unterstützung für die In-App-Abrechnung von Google Play zu mobilen Apps

Sie müssen Ihrer Anwendung eine Instanz dieser Komponente hinzufügen, und eine Verbindung zum In-App-Abrechnungsdienst von Google Play herstellen, entweder beim Start der Anwendung oder zu einem anderen Zeitpunkt. Anschließend können Sie den Dienst verwenden. Wenn eine Verbindung zum In-App-Abrechnungsdienst von Google Play eingerichtet ist, können Sie:

Herstellen einer Verbindung zum In-App-Abrechnungsdienst von Google Play

Bevor Sie den In-App-Abrechnungsdienst von Google Play verwenden können, müssen Sie TInAppPurchase für die Verbindung mit dem In-App-Abrechnungsdienst von Google Play konfigurieren und eine Verbindung einrichten.

Konfigurieren der Verbindungsdaten für den In-App-Abrechnungsdienst von Google Play

Um auf Android eine Verbindung zum In-App-Abrechnungsdienst für Google Play herzustellen, müssen Sie Ihren Lizenzschlüssel in die Eigenschaft ApplicationLicenseKey von TInAppPurchase kopieren. Sie erhalten einen Lizenzschlüssel nach dem Konfigurieren Ihren Anwendung für die In-App-Abrechnung in Google Play; zum Beispiel:

InAppPurchase1.ApplicationLicenseKey := 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgEAlGKUp9KCAQjzJdrjDaCC2Z2P0K751w1KAL3cBLhDqRSYDnug+nZKzeg2+R3KOIDVpJU7+PXz8jyf07m/30Y0J1CmOBf6NK/MIsXq3BmWb4/UIUW1aKzlHiiVtpcm26n3hOSmnnfkhasbfQo75puBBTbURvumOFfwUAJ2BM9FzAOPWzsAqT1brYI8iu+NHDT+gGQl7uOTgEN3jbBD/la5qAtevOGbgP1DhfKtsi91+/oyy3+lphWNn2A+RE1KOx4lnHp0wZyOEvDP/CPZneT0YYgqG6MtawM+Mij/75XwhJEdeOSXYya7BN6hg49JX2WJxCRc7JqbgzN9vsRn6hSceQ5MuQIDAQAB';

Herstellen einer Verbindung mit dem In-App-Abrechnungsdienst von Google Play

Rufen Sie zum Herstellen einer Verbindung mit dem In-App-Abrechnungsdienst von Google Play SetupInAppPurchase auf. Diese Prozedur ist asynchron und löst beim Beenden das Ereignis OnSetupComplete aus. Wenn Sie OnSetupComplete einer Ereignisbehandlungsroutine zuweisen möchten, sollten Sie dies vor dem Aufruf von SetupInAppPurchase ausführen:

InAppPurchase1.OnSetupComplete := InAppPurchase1SetupComplete;
InAppPurchase1.SetupInAppPurchase;

OnSetupComplete wird normalerweise einer Ereignisbehandlungsroutine zugewiesen, um die Liste der Produkte anzufordern, sobald die Verbindung mit dem Zieldienst hergestellt ist. Alternativ können Sie IsSetupComplete aufrufen, um zu überprüfen, ob Sie zu einem bestimmten Zeitpunkt den Dienst verwenden können (True) oder nicht (False).

Verwenden des In-App-Abrechnungsdienstes von Google Play

Wenn eine Verbindung mit dem In-App-Abrechnungsdienst von Google Play hergestellt ist, können Sie Folgendes ausführen:

Abrufen von Informationen zu einer Liste mit Produkten

Ihre Anwendung sollte eine Liste mit den IDs der Produkte enthalten, die über Ihre Anwendung gekauft werden können. Speichern Sie diese Liste in der Eigenschaft TInAppPurchase.ProductIDs. Sie können QueryProducts jederzeit aufrufen, um Informationen über die Produkte mit diesen IDs anzufordern, z. B. ob diese Produkte gekauft wurden oder nicht.

Falls ein Fehler auftritt, wird TInAppPurchase.OnError mit ProductsRequest als FailureKind ausgelöst.

Wenn die Anforderung erfolgreich ist, wird stattdessen TInAppPurchase.OnProductsRequestResponse ausgelöst. Dieses Ereignis stellt zwei Produktlisten bereit:

  • Products, ein TList-Objekt der Instanzen von TProduct, das die Liste der gültigen verfügbaren und gekauften Produkte bereitstellt.
  • InvalidProductIDs, ein TStrings-Objekt, das eine Liste mit den IDs von Produkten bereitstellt, die ungültig sind.

Um Produkte, die Ihr Benutzer gekauft hat, von denjenigen zu unterscheiden, die nur zum Kauf verfügbar sind, können Sie IsProductPurchased mit der ID eines Produkts aufrufen:

if InAppPurchase1.IsProductPurchased(ProductID) then { Do something. }
Hinweis: Wenn die Produktliste ein verbrauchbares Produkt enthält, das gekauft wurde, müssen Sie jetzt dieses Produkt verbrauchen.

TProduct stellt viele Eigenschaften bereit, die Informationen über die Produkte enthalten.

Kaufen von Produkten

Bevor Sie Ihrem Benutzer ermöglichen, Produkte zu kaufen, rufen Sie CanMakeInAppPurchases auf, um zu überprüfen, ob es Ihrem Benutzer erlaubt ist, Einkäufe zu tätigen (True) oder nicht (False):

if not InAppPurchase1.CanMakeInAppPurchases then { Disable or hide the in-app payments GUI elements of your application. }

Um den Kauf eines Produkts aus der Liste der verfügbaren Produkte über den In-App-Abrechnungsdienst von Google Play anzufordern, rufen Sie PurchaseProduct mit der Produkt-ID auf:

InAppPurchase1.PurchaseProduct(ProductID);

Falls ein Fehler auftritt, wird TInAppPurchase.OnError mit Purchase als FailureKind ausgelöst.

Wenn der Kauf erfolgreich ist, wird stattdessen TInAppPurchase.OnPurchaseCompleted ausgelöst. Dieses Ereignis stellt die ID des gekauften Produkts bereit, und der Parameter NewTransaction dieses Ereignisses ist True, wenn das Produkt gerade gekauft wurde oder False, wenn es wiederhergestellt wurde. Mit dieser Ereignisbehandlungsroutine können Sie gekaufte Produkte verwalten; beispielsweise, wenn es sich bei dem gekauften Produkt um ein verbrauchbares Produkt handelt, können Sie es verbrauchen.

Verbrauchen von Produkten

Hinweis: TInAppPurchase stellt keine Methode bereit, mit der Sie feststellen können, ob ein Produkt ein Verbrauchsprodukt ist oder nicht ist. Dies muss in Ihrer Anwendung separat erfolgen. Sie können beispielsweise eine Liste mit IDs von verbrauchbaren oder nicht-verbrauchbaren Produkten in Ihrer Anwendung hart codieren.

Verbrauchbare Produkte können mehr als einmal gekauft werden. Wenn Ihr Benutzer ein verbrauchbares Produkt kauft, müssen Sie ConsumeProduct aufrufen, um den In-App-Abrechnungsdienst von Google Play darüber zu informieren, dass dieses Produkt verbraucht wurde:

InAppPurchase1.ConsumeProduct(ProductID);
Hinweis: Alternativ können Sie ConsumeProducts mit einer Liste der Produkt-IDs aufrufen.

Nach dem Aufruf einer der Methoden zum Verbrauchen eines Produkts werden schließlich die folgenden Ereignisse ausgelöst:

  • TInAppPurchase.OnConsumeCompleted, wenn das Produkt erfolgreich verbraucht wurde. Behandeln Sie dieses Ereignis, um diesen Kauf in Ihrer Anwendung zu verarbeiten. Wenn Ihre Anwendung beispielsweise einen Zähler für Cookies führt und Ihr Benutzer ein "5-Cookies"-Produkt erwirbt, können Sie den Zähler für Cookies in Ihrer Anwendung um 5 erhöhen.
  • TInAppPurchase.OnConsumeFailed, wenn ein Fehler auftritt, durch den der Verbrauch des Produkts verhindert wurde. Das Argument ErrorMessage dieses Ereignisses enthält eine detaillierte Beschreibung des Fehlers.

Wiederherstellen von Produkten auf dem aktuellen Gerät, die von einem anderen Gerät aus gekauft wurden

Die nicht verbrauchbaren Produkte eines Benutzers erscheinen immer als auf einem beliebigen Gerät dieses Benutzers gekauft. Sie müssen keine weiteren Operationen durchführen, um diese Käufe wiederherzustellen.

Hinweise:
  • Wenn Ihr Benutzer versucht, ein bereits gekauftes Produkt erneut zu kaufen, verursacht der Kauf keine Kosten für den Benutzer.
  • Beim Wiederherstellen von Käufen wird der Benutzer aufgefordert, seine Anmeldeinformationen für den App Store einzugeben. Sie sollten Käufe nicht automatisch wiederherstellen, sondern die Benutzer sollten die Wiederherstellungsoperation manuell starten, beispielsweise über eine "Wiederherstellen"-Schaltfläche.

Verwendung eines Entwicklernutzdaten-Strings zum Verifizieren von Käufen

Bei Verwendung des In-App-Abrechnungsdienstes von Google Play können Sie der Eigenschaft TInAppPurchase.TransactionPayload einen Wert zuweisen, einen beliebigen Code, der für den Benutzer Ihrer Anwendung eindeutig ist. Wenn Ihr Benutzer ein Produkt aus Ihrer Anwendung kauft, wird dieser Wert an den In-App-Abrechnungsdienst von Google Play gesendet.

Während der Kaufaktion sendet der In-App-Abrechnungsdienst von Google Play einen Entwicklernutzdaten-String an Sie zurück, der mit dem String identisch sein muss, den Sie zuvor in der Eigenschaft TransactionPayload festgelegt haben. Um zu überprüfen, dass beide Strings gleich sind und um auf diese Weise sicherzustellen, dass der Kauf tatsächlich von Ihrem Benutzer getätigt wurde, behandeln Sie das Ereignis OnVerifyPayload:

procedure TForm1.InAppPurchase1VerifyPayload(Sender: TObject; const Payload: string; var PayloadOk: Boolean);
begin
  if Payload.Compare(FPayload) <> 0 then
    PayloadOk := False;
end;

Wenn die Behandlungsroutine für dieses Ereignis PayloadOk auf False setzt, wird der Kauf storniert.

Warnung: Derselbe Benutzer könnte Ihre Anwendung auf verschiedenen Geräten verwenden. Der Entwicklernutzdaten-String muss auf allen Geräten für denselben Benutzer gleich sein. Er darf daher z. B. kein zufällig von Ihrer Anwendung erzeugter String sein, da dieser String nicht auf allen Geräten gleich wäre.

Testen Ihrer In-App-Kaufprodukte

Sie können Ihre In-App-Kaufprodukte testen, ohne dass Kosten entstehen, indem Sie Testbenutzer verwenden. Siehe Testing In-app Billing.

Siehe auch