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, die als Unity IAP bezeichnet werden, um Ihrem Spiel alle aktuellen Funktionen der Google Play Billing Library zur Verfügung zu stellen. In dieser Anleitung wird beschrieben, wie Sie Ihr Projekt für die Verwendung des Plug-ins einrichten. In diesem Leitfaden wird auch beschrieben, wie Sie Funktionen der Google Play Billing Library in Ihrem Spiel in Unity implementieren.

Google Play Billing-Plug-in einrichten

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

  1. Unity IAP-Abstraktionsschicht aktivieren
  2. Plug-in herunterladen und importieren
  3. Build-Einstellungen des Plug-ins konfigurieren
  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. Sie müssen diese Abstraktionsebene also aktivieren, bevor Sie das Plug-in herunterladen und importieren. So aktivieren Sie die Unity IAP-Abstraktionsschicht:

  1. Führen Sie alle Schritte im folgenden Unity-Tutorial aus: Projekt für Unity-Dienste einrichten.
  2. Führen Sie alle Schritte im folgenden Unity-Tutorial aus: Enable the Unity IAP service (IAP-Dienst von Unity 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 aktuelle Version der Google Play-Plug-ins für Unity von der Seite „Releases“ auf GitHub herunter.
  2. Klicken Sie in der Unity-Menüleiste auf Assets > Import Package > Custom Package.

  3. Suchen Sie nach der .unitypackage-Datei, die Sie heruntergeladen haben, und wählen Sie sie aus.

  4. Lassen Sie im Dialogfeld Import Unity Package alle Assets ausgewählt und klicken Sie auf Import.

Nach dem Importieren des Pakets wird den Assets Ihres Projekts ein neuer Ordner namens 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, treten in Unity Konflikte auf und es kann keine Android-APK erstellt werden, sofern nicht einige ältere, sich überschneidende Abhängigkeiten in Unity IAP aus dem Build entfernt werden. 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 Settings (Google > Play Billing > Build-Einstellungen) aus.

  2. Klicken Sie im Fenster „Play Billing Build Settings“ (Build-Einstellungen für Play-Abrechnung) auf Fix (Beheben). 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 zu Wiederherstellen. Klicken Sie darauf, um die ursprünglichen, in Konflikt stehenden Dateien wiederherzustellen.

Plug-in aktivieren

Um das Plug-in zu aktivieren, ersetzen Sie die Unity IAP-Implementierung von Google Play durch das Google Play Billing-Plug-in. Wenn Sie beispielsweise das Unity IAP Purchaser-Script verwenden, ändern Sie die StandardPurchaseModule, die an den IAP-Builder übergeben wird, um die Google.Play.Billing.GooglePlayStoreModule zu verwenden:

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

Wenn Ihr Spiel dasselbe Käufer-Script 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 in anderen Android-App-Shops als dem Google Play Store veröffentlichen, sollten Sie die standardmäßige Unity IAP-Implementierung nur 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 Ihr Spiel implementieren

Das Google Play Billing-Plug-in erweitert die Unity IAP-Dienste, sodass Sie dieselben Unity-APIs verwenden können, um gängige Kaufvorgänge zu verwalten. Aufgrund von Unterschieden zwischen der Google Play Billing Library und der standardmäßigen IAP-Implementierung von Unity für andere App-Stores gibt es einige geringfügige Änderungen am API-Verhalten. Wenn Sie die Unity IAP-APIs noch nicht kennen, finden Sie im Unity IAP-Tutorial im Abschnitt „Making a Purchase Script“ (Kaufskript erstellen) 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. Sie können über eine erweiterte Benutzeroberfläche auf diese Funktionen zugreifen. Im Rest dieses Abschnitts wird beschrieben, wie Sie diese einzigartigen Funktionen der Google Play Billing Library in Ihrem Spiel implementieren.

Verzögerte Käufe aktivieren

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

Wenn Sie verzögerte Käufe aktivieren möchten, rufen Sie die Methode EnableDeferredPurchase() auf, um die Konfiguration Ihres Moduls mit dem IAP-Builder zu ändern:

// 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 einen Callback für verzögerte Käufe mit den Play Store-Erweiterungen:

// 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 übergeben

Sie können verdeckte Nutzerkonto-IDs an Google Play übergeben, um die Erkennung von Missbrauch zu erleichtern, z. B. wenn viele Geräte innerhalb kurzer Zeit Käufe über dasselbe Konto 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 übergeben

Sie können eine verschleierte Profil-ID an Google Play übergeben, um die Betrugserkennung zu erleichtern. So lässt sich beispielsweise erkennen, ob viele Geräte in kurzer Zeit Käufe über dasselbe Konto tätigen. Dies ähnelt dem Übergeben einer verschleierten Nutzerkonto-ID. In beiden Fällen steht die ID für einen einzelnen Nutzer. Mit der Profil-ID können Sie einen einzelnen Nutzer jedoch eindeutig über mehrere Profile hinweg identifizieren, die er in einer einzelnen App hat. Nachdem Sie eine verschleierte Profil-ID an Google Play gesendet haben, können Sie diese ID später in einer Kaufbestätigung abrufen.

Wenn Sie eine verschleierte Profil-ID übergeben möchten, verwenden Sie Ihren IAP-Builder, um die Konfiguration Ihres Moduls zu ändern, indem Sie die Methode SetObfuscatedProfileId() aufrufen:

// 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 bei Abos bestätigen

Bei Google Play können Sie den Preis eines aktiven Abos ändern. Die Nutzer Ihres Spiels müssen jeder Preisänderung zustimmen, bevor sie in Kraft treten kann. Wenn Sie Nutzer auffordern möchten, eine Preisänderung für ihr Abo zu bestätigen, rufen Sie 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 Unity-API-Verhalten

Wenn Sie das Google Play-Abrechnungs-Plug-in verwenden, verhalten sich die meisten APIs genauso wie die standardmäßige IAP-Implementierung von Unity für andere App-Stores. Es gibt jedoch einige Fälle, in denen sich die APIs anders verhalten. In diesem Abschnitt werden diese Verhaltensunterschiede beschrieben.

Entwickler-Payload wird nicht unterstützt

Google Play hat die Entwickler-Payload eingestellt und ersetzt sie durch Alternativen, die aussagekräftiger und kontextbezogener sind. Aus diesem Grund wird die Entwickler-Payload nicht unterstützt. Weitere Informationen zu Alternativen finden Sie auf der Seite Entwickler-Payload.

Sie können weiterhin dieselben Schnittstellen verwenden, die durch die standardmäßige IAP-Implementierung von Unity für andere App-Stores definiert sind, einschließlich IStoreController. Wenn Sie einen Kauf initiieren, können Sie weiterhin IStoreController verwenden und die Methode InitiatePurchase() aufrufen:

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

Die von Ihnen übergebene Nutzlast wird jedoch nicht berücksichtigt (sie wird nicht auf dem endgültigen Beleg angezeigt).

SubscriptionManager wird nicht unterstützt

Unity IAP bietet die Klasse SubscriptionManager zum Verwalten von Abos. Da bei der standardmäßigen IAP-Implementierung von Unity für diese Klasse die Entwickler-Payload verwendet wird, wird diese Klasse nicht unterstützt. Sie können diese Klasse weiterhin erstellen, erhalten aber möglicherweise unzuverlässige Daten, wenn Sie eine der Getter-Methoden der Klasse verwenden.

Geringfügige API-Änderungen bei „UpdateSubscription“

Das Google Play Billing-Plug-in unterstützt nicht die Verwendung der Methoden SubscriptionManager.UpdateSubscription() und SubscriptionManager.UpdateSubscriptionInGooglePlayStore() zum Upgraden und Downgraden von Abos. Wenn Ihr Spiel diese Methoden aufruft, wird eine GooglePlayStoreUnsupportedException ausgelöst.

Die Google Play Billing Library bietet eine alternative API, die anstelle dieser Methoden verwendet werden kann. Wenn Sie ein Abo upgraden oder downgraden möchten, rufen Sie die Methode UpdateSubscription() mit dem Abrechnungsmodus 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 anteiligen Abrechnungsmodus finden Sie unter Anteiligen Abrechnungsmodus festlegen.