Google Play Billing Library mit Unity verwenden

Das Google Play Billing-Plug-in erweitert die integrierten Dienste und Assets von Unity für In-App-Käufe, genannt Unity IAP, und stellt Ihrem Spiel alle neuen Funktionen der Google Play Billing Library zur Verfügung. In dieser Anleitung wird erläutert, wie Sie Ihr Projekt für die Verwendung des Plug-ins einrichten. In diesem Leitfaden wird auch beschrieben, wie du die Google Play Billing Library-Funktionen in deinem Spiel in Unity implementierst.

Google Play Billing-Plug-in einrichten

Führen Sie die Schritte in den folgenden verlinkten Abschnitten aus, um das Plug-in einzurichten:

  1. Aktivieren Sie die Unity-IAP-Abstraktionsebene.
  2. Laden Sie das Plug-in herunter und importieren Sie es.
  3. Konfigurieren Sie die Build-Einstellungen des Plug-ins.
  4. Aktivieren Sie das Plug-in.

Unity-IAP-Abstraktionsebene aktivieren

Das Google Play Billing-Plug-in basiert auf einer Abstraktionsebene, die in Unity IAP enthalten ist. Daher müssen Sie diese Abstraktionsebene aktivieren, bevor Sie das Plug-in herunterladen und importieren. So aktivieren Sie die Unity-IAP-Abstraktionsebene:

  1. Führen Sie alle Schritte der folgenden Unity-Anleitung aus: Projekt für Unity-Dienste einrichten.
  2. Führen Sie alle Schritte in der folgenden Unity-Anleitung aus: Unity IAP-Dienst aktivieren.

Plug-in herunterladen und importieren

Das Plug-in wird als Unity-Paket im Format .unitypackage ausgeliefert. So laden Sie das Plug-in herunter und importieren es:

  1. Laden Sie die neueste Version der Google Play-Plug-ins für Unity von der Releaseseite des Repositorys auf GitHub herunter.
  2. Klicken Sie in der Unity-Menüleiste auf Assets > Paket importieren > Benutzerdefiniertes Paket.

  3. Suchen Sie nach dem Speicherort, an dem Sie die Datei .unitypackage heruntergeladen haben, und wählen Sie sie aus.

  4. Lassen Sie im Dialogfeld Import Unity Package (Unity-Paket importieren) alle Assets ausgewählt und klicken Sie auf Import.

Nach dem Import des Pakets wird den Assets Ihres Projekts ein neuer Ordner mit dem Namen GooglePlayPlugins (im Stammverzeichnis des Ordners Assets) hinzugefügt. Dieser Ordner enthält alle Google Play Billing Library-Assets für das Plug-in.

Build-Einstellungen konfigurieren

Da das Plug-in Unity IAP erweitert, stößt Unity auf Konflikte und kann kein Android-APK erstellen, es sei denn, ältere, sich überschneidende Abhängigkeiten in Unity IAP werden aus dem Build entfernt. Das Plug-in bietet eine automatische Möglichkeit, die in Konflikt stehenden Bibliotheken aus Ihrem Projekt zu entfernen. So beheben Sie diese Konflikte:

  1. Wählen Sie in der Unity-Menüleiste Google > Play Billing > Build-Einstellungen aus.

  2. Klicken Sie im Fenster „Play Billing-Build-Einstellungen“ auf Korrigieren. Dadurch wird der Konflikt behoben und die in Konflikt stehenden Unity-IAP-Dateien werden in ein Sicherungsverzeichnis verschoben. Nachdem Sie auf Korrigieren geklickt haben, ändert sich die Schaltfläche in Wiederherstellen. Klicken Sie darauf, um die ursprünglichen, in Konflikt stehenden Dateien wiederherzustellen.

Plug-in aktivieren

Ersetzen Sie zum Aktivieren des Plug-ins die Google Play-Implementierung von Unity IAP durch das Google Play Billing-Plug-in. Wenn Sie beispielsweise das Unity IAP-Käuferskript verwenden, ändern Sie den StandardPurchaseModule, der an den IAP-Builder übergeben wird, so, dass er Google.Play.Billing.GooglePlayStoreModule verwendet:

// Create a builder using the GooglePlayStoreModule.
var configurationBuilder =
    ConfigurationBuilder.Instance(Google.Play.Billing.GooglePlayStoreModule.Instance());

Wenn Ihr Spiel dasselbe Kaufskript für mehrere Plattformen verwendet, sollten Sie eine Plattformprüfung hinzufügen, damit Unity weiterhin seine eigene IAP-Lösung für andere Plattformen verwendet:

ConfigurationBuilder builder;
if (Application.platform == RuntimePlatform.Android)
{
  builder = ConfigurationBuilder.Instance(
      Google.Play.Billing.GooglePlayStoreModule.Instance());
}
else
{
  builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
}

Wenn Sie Ihr Spiel nicht nur im Google Play Store, sondern auch in anderen Android-App-Shops veröffentlichen, sollten Sie die Standardimplementierung von Unity IAP nur dann ersetzen, wenn Sie den Google Play Store auswählen:

ConfigurationBuilder builder;
if (Application.platform == RuntimePlatform.Android
       && SelectedAndoidAppStore == AppStore.GooglePlay)
{
  builder = ConfigurationBuilder.Instance(
      Google.Play.Billing.GooglePlayStoreModule.Instance());
}
else
{
  builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
}

Google Play Billing Library-Funktionen in dein Spiel implementieren

Das Google Play Billing-Plug-in erweitert die IAP-Dienste von Unity, sodass Sie dieselben Unity APIs zur Verwaltung gängiger Kaufworkflows verwenden können. Beachten Sie, dass einige geringfügige Änderungen am API-Verhalten vorgenommen wurden. Grund dafür sind Unterschiede zwischen der Google Play Billing Library und der IAP-Standardimplementierung von Unity für andere App-Shops. Wenn Sie die Unity IAP APIs noch nicht kennen, finden Sie im Abschnitt "Ein Kaufskript erstellen" in der Unity IAP-Anleitung ein Beispiel für die Implementierung grundlegender Kaufabläufe.

Die Google Play Billing Library enthält auch einige Funktionen, die nur im Google Play Store verfügbar sind. Der Zugriff auf diese Funktionen erfolgt über eine erweiterte Oberfläche. Der Rest dieses Abschnitts beschreibt, wie du diese einzigartigen Google Play Billing Library-Funktionen in deinem Spiel implementieren kannst.

Verzögerte Käufe aktivieren

Google Play unterstützt verzögerte Käufe – auch als ausstehende Transaktionen oder ausstehende Käufe bezeichnet –, bei denen Nutzer einen Kauf erstellen und ihn später mit Bargeld in Geschäften abschließen können.

Verwenden Sie den IAP-Builder, um die Konfiguration Ihres Moduls durch Aufrufen der Methode EnableDeferredPurchase() zu ändern, um verzögerte Käufe zu aktivieren:

// Create a builder using a GooglePlayStoreModule.
var configurationBuilder =
    ConfigurationBuilder.Instance(Google.Play.Billing.GooglePlayStoreModule.Instance());
// Enable deferred purchases
configurationBuilder.Configure<Google.Play.Billing.IGooglePlayConfiguration>()
    .EnableDeferredPurchase();

Implementieren Sie als Nächstes mithilfe der Play Store-Erweiterungen einen Callback für verzögerte Käufe:

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

// Set the deferred purchases callback.
_playStoreExtensions.SetDeferredPurchaseListener(
    delegate(Product product)
    {
        // Do not grant the item here. Instead, record the purchase and remind
        // the user to complete the transaction in the Play Store.
    });

Verschleierte Konto-IDs an Google Play weitergeben

Sie können verschleierte Nutzerkonto-IDs an Google Play senden, um Missbrauch zu erkennen, z. B. um festzustellen, ob viele Geräte innerhalb kurzer Zeit über dasselbe Konto Käufe tätigen.

Wenn Sie eine verschleierte Konto-ID übergeben möchten, rufen Sie die Methode SetObfuscatedAccountId() aus der Extensions API auf:

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

// Pass an obfuscated account ID.
_playStoreExtensions.SetObfuscatedAccountId(obfuscatedAccountId);

Verschleierte Profil-IDs an Google Play weitergeben

Sie können eine verschleierte Profil-ID an Google Play übergeben, um die Betrugserkennung zu erleichtern, z. B. um festzustellen, ob viele Geräte innerhalb kurzer Zeit über dasselbe Konto Käufe tätigen. Dies ähnelt der Übergabe einer verschleierten Nutzerkonto-ID. In beiden Fällen stellt die ID einen einzelnen Nutzer dar, aber mit der Profil-ID können Sie einen einzelnen Nutzer über mehrere Profile innerhalb einer App hinweg eindeutig identifizieren. Nachdem Sie eine verschleierte Profil-ID an Google Play gesendet haben, können Sie diese später auf dem Kaufbeleg abrufen.

Zum Übergeben einer verschleierten Profil-ID verwenden Sie den IAP-Builder, um die Konfiguration des Moduls durch Aufrufen der Methode SetObfuscatedProfileId() zu ändern:

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

// Pass an obfuscated profile ID.
_playStoreExtensions.SetObfuscatedProfileId(obfuscatedProfileId);

Preisänderungen für Abos bestätigen

Bei Google Play können Sie den Preis eines aktiven Abos ändern. Die Nutzer Ihres Spiels müssen Preisänderungen bestätigen, bevor diese wirksam werden können. Wenn du Nutzer auffordern möchtest, eine Preisänderung für ihr Abo zu bestätigen, rufe die Methode ConfirmSubscriptionPriceChange() auf:

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

_playStoreExtensions.ConfirmSubscriptionPriceChange(productId,
    delegate (bool success)
    {
        // Returns whether the user has accepted the new price or not.
    });

Änderungen am Verhalten der Unity API

Wenn Sie das Google Play Billing-Plug-in verwenden, verhalten sich die meisten APIs genauso wie die Standard-IAP-Implementierung von Unity für andere App-Shops. Es gibt jedoch einige Fälle, in denen sich die APIs anders verhalten. In diesem Abschnitt werden diese Unterschiede im Verhalten beschrieben.

Entwicklernutzlast wird nicht unterstützt

Google Play hat die Entwicklernutzlast eingestellt und ersetzt sie durch aussagekräftigere und kontextbezogenere Alternativen. Aus diesem Grund wird die Entwicklernutzlast nicht unterstützt. Weitere Informationen zu Alternativen finden Sie auf der Seite zur Entwicklernutzlast.

Sie können für andere Anwendungsspeicher, einschließlich IStoreController, weiterhin dieselben Schnittstellen verwenden, die in der IAP-Standardimplementierung von Unity definiert sind. Wenn Sie einen Kauf initiieren, können Sie weiterhin IStoreController verwenden und die Methode InitiatePurchase() aufrufen:

public void InitiatePurchase(Purchasing.Product product, string payload);

Übergegebene Nutzlasten werden jedoch nicht wirksam und erscheinen nicht auf dem endgültigen Beleg.

SubscriptionManager wird nicht unterstützt

Unity IAP bietet die Klasse SubscriptionManager zum Verwalten von Abos. Da die Standard-IAP-Implementierung dieser Klasse von Unity Entwicklernutzlast verwendet, wird diese Klasse nicht unterstützt. Sie können diese Klasse trotzdem erstellen, erhalten jedoch möglicherweise unzuverlässige Daten, wenn Sie eine der Getter-Methoden der Klasse verwenden.

UpdateSubscription enthält kleine API-Änderungen

Das Google Play Billing-Plug-in unterstützt die Methoden SubscriptionManager.UpdateSubscription() und SubscriptionManager.UpdateSubscriptionInGooglePlayStore() für Upgrades und Downgrades von Abos nicht. Wenn Ihr Spiel diese Methoden aufruft, wird ein GooglePlayStoreUnsupportedException ausgegeben.

Die Google Play Billing Library bietet eine alternative API, die du anstelle dieser Methoden verwenden kannst. Wenn Sie ein Abo upgraden oder downgraden möchten, rufen Sie die Methode UpdateSubscription() im Zuteilungsmodus auf:

void UpdateSubscription(Product oldProduct, Product newProduct,
           GooglePlayStoreProrationMode prorationMode = GooglePlayStoreProrationMode.Unknown);

Sie können diesen Methodenaufruf entweder mit einer Plattformprüfung oder in einem Catch-Block umschließen, wenn GooglePlayStoreUnsupportedException abgefangen wird.

Weitere Informationen und Beispiele zur Verwendung des Zuteilungsmodus finden Sie unter Zuteilungsmodus festlegen.