Korzystanie z Biblioteki płatności w Google Play w Unity

Wtyczka Płatności w Google Play pozwala rozszerzyć wbudowane usługi i zasoby do zakupów w aplikacji Unity (Unity IAP), by zapewnić swojej grze wszystkie najnowsze funkcje Biblioteki płatności w Google Play. Z tego przewodnika dowiesz się, jak skonfigurować projekt, aby korzystać z tej wtyczki. Z tego przewodnika dowiesz się też, jak wdrożyć funkcje Biblioteki płatności w Google Play w grze na Unity.

Konfigurowanie wtyczki Płatności w Google Play

Aby skonfigurować wtyczkę, wykonaj czynności opisane w każdej z tych sekcji:

  1. Włącz warstwę abstrakcji IAP w Unity.
  2. Pobierz i zaimportuj wtyczkę.
  3. Skonfiguruj ustawienia kompilacji wtyczki.
  4. Włącz wtyczkę.

Włącz warstwę abstrakcji IAP w Unity

Wtyczka Płatności w Google Play opiera się na warstwie abstrakcji zawartej w Unity IAP, więc musisz ją włączyć, zanim pobierzesz i zaimportujesz wtyczkę. Aby włączyć warstwę abstrakcji IAP w Unity, wykonaj te czynności:

  1. Wykonaj wszystkie czynności opisane w samouczku na temat Unity: Konfigurowanie projektu pod kątem usług Unity.
  2. Wykonaj wszystkie czynności opisane w tym samouczku na temat Unity: włącz usługę IAP Unity.

Pobierz i zaimportuj wtyczkę

Wtyczka jest wysyłana jako pakiet Unity w formacie .unitypackage. Aby pobrać i zaimportować wtyczkę, wykonaj następujące czynności:

  1. Pobierz najnowszą wersję wtyczek Google Play do Unity ze strony wersji w GitHubie.
  2. Na pasku menu Unity kliknij Assets (Zasoby) > Import Package (Importuj pakiet) > Custom Package (Pakiet niestandardowy).

  3. Znajdź i wybierz miejsce, w którym został pobrany plik .unitypackage.

  4. W oknie Import Unity Package (Importuj pakiet Unity) pozostaw wszystkie zasoby zaznaczone i kliknij Import (Importuj).

Po zaimportowaniu pakietu do zasobów projektu zostanie dodany nowy folder o nazwie GooglePlayPlugins (w katalogu głównym folderu Assets). Ten folder zawiera wszystkie zasoby Biblioteki płatności w Google Play powiązane z wtyczką.

Skonfiguruj ustawienia kompilacji

Wtyczka rozszerza Unity IAP, dlatego napotka konflikty i nie będzie w stanie skompilować pliku APK na Androida, chyba że zostaną z niej usunięte niektóre starsze, nakładające się zależności IAP. Wtyczka zapewnia automatyczny sposób usuwania bibliotek będących w konflikcie z projektu. Aby rozwiązać ten konflikt, wykonaj te czynności:

  1. Na pasku menu Unity wybierz Google > Płatności w Play > Ustawienia kompilacji.

  2. W oknie Ustawienia kompilacji Płatności w Play kliknij Napraw. To rozwiązuje konflikt i przenosi pliki IAP Unity do katalogu kopii zapasowych. Gdy klikniesz Napraw, przycisk zmieni się na Przywróć. Kliknij go, aby przywrócić oryginalne pliki powodujące konflikt.

Włączanie wtyczki

Aby włączyć tę wtyczkę, zastąp implementację Google Play w Unity IAP wtyczką Płatności w Google Play. Na przykład, jeśli używasz skryptu kupującego Unity IAP, możesz zmienić StandardPurchaseModule przekazywany do kreatora zakupów w aplikacji, tak aby używał Google.Play.Billing.GooglePlayStoreModule:

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

Jeśli Twoja gra korzysta z tego samego skryptu kupującego na wielu platformach, dodaj kontrolę platformy, aby mieć pewność, że Unity nadal będzie używać własnego rozwiązania IAP dla innych platform:

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

Jeśli publikujesz grę w innych sklepach z aplikacjami na Androida poza Sklepem Google Play, musisz zastąpić domyślną implementację zakupów w aplikacji Unity (tylko w przypadku Sklepu Google Play):

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

Implementowanie funkcji Biblioteki płatności w Google Play w swojej grze

Wtyczka Płatności w Google Play rozszerza usługi IAP w Unity, dzięki czemu możesz używać tych samych interfejsów API Unity do zarządzania typowymi procesami zakupowymi. Zwróć uwagę na pewne niewielkie zmiany w działaniu interfejsu API wynikające z różnic między Biblioteką płatności w Google Play a standardową implementacją zakupów w aplikacji Unity w przypadku innych sklepów z aplikacjami. Jeśli nie masz doświadczenia z interfejsami API IAP Unity, zapoznaj się z sekcją „Tworzenie skryptu zakupu” w samouczku IAP Unity, by dowiedzieć się, jak wdrożyć podstawowe procesy zakupu.

Biblioteka płatności w Google Play zawiera też pewne funkcje, które są dostępne tylko w Sklepie Google Play. Możesz uzyskać dostęp do tych funkcji za pomocą rozszerzonego interfejsu. W pozostałej części tej sekcji opisujemy, jak wdrożyć te unikalne funkcje Biblioteki płatności w Google Play w swojej grze.

Włącz odroczone zakupy

Google Play obsługuje zakupy odroczone – nazywane też oczekującymi transakcjami lub oczekującymi zakupami – w ramach której użytkownicy mogą utworzyć zakup i sfinalizować go później, płacąc gotówką w sklepach.

Aby włączyć odroczone zakupy, użyj kreatora IAP, aby zmodyfikować konfigurację modułu, wywołując metodę EnableDeferredPurchase():

// 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();

Następnie zaimplementuj wywołanie zwrotne dotyczące odroczonych zakupów, używając rozszerzeń Sklepu Play:

// 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.
    });

Przekazywanie zaciemnionych identyfikatorów kont do Google Play

Zaciemnione identyfikatory kont użytkowników możesz przekazywać do Google Play, aby ułatwić wykrywanie nadużyć, np. wykrywanie, czy w krótkim czasie wiele urządzeń dokonuje zakupów za pomocą tego samego konta.

Aby przekazać zaciemniony identyfikator konta, wywołaj metodę SetObfuscatedAccountId() z interfejsu API rozszerzeń:

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

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

Przekazywanie zaciemnionych identyfikatorów profili do Google Play

Możesz przekazać do Google Play zaciemniony identyfikator profilu, aby ułatwić wykrywanie oszustw, np. wykrywanie, czy w krótkim czasie wiele urządzeń dokonuje zakupów przy użyciu tego samego konta. Działa to podobnie do przekazywania zaciemnionego identyfikatora konta użytkownika. W obu przypadkach identyfikator reprezentuje jednego użytkownika, ale umożliwia jednoznaczną identyfikację tego samego użytkownika w kilku profilach powiązanych z jedną aplikacją. Po wysłaniu do Google Play zaciemnionego identyfikatora profilu możesz go później pobrać z potwierdzenia zakupu.

Aby przekazać zaciemniony identyfikator profilu, użyj narzędzia do tworzenia IAP i zmodyfikuj konfigurację modułu, wywołując metodę SetObfuscatedProfileId():

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

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

Potwierdź zmiany cen subskrypcji

Google Play pozwala zmienić cenę aktywnej subskrypcji. Użytkownicy gry muszą potwierdzić każdą zmianę ceny, zanim zmiana zacznie obowiązywać. Aby poprosić użytkowników o potwierdzenie zmiany ceny subskrypcji, wywołaj metodę ConfirmSubscriptionPriceChange():

// 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.
    });

Zmiany w działaniu interfejsu Unity API

Gdy używasz wtyczki Płatności w Google Play, większość interfejsów API działa tak samo jak standardowa implementacja IAP w innych sklepach z aplikacjami. Jednak w niektórych przypadkach interfejsy API mogą działać inaczej. W tej sekcji opisujemy te różnice.

Ładunek programisty nie jest obsługiwany

Wycofany ładunek dla deweloperów w Google Play został zastąpiony alternatywami, które mają większe znaczenie i mają szerszy kontekst. Z tego powodu ładunek dewelopera nie jest obsługiwany. Więcej informacji o alternatywnych rozwiązaniach znajdziesz na stronie o ładunku programisty.

Możesz nadal korzystać z interfejsów zdefiniowanych przez standardową implementację zakupów w aplikacji Unity dla innych sklepów z aplikacjami, w tym IStoreController. Gdy inicjujesz zakup, nadal możesz używać IStoreController i wywoływać metodę InitiatePurchase():

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

Jednak wszelkie przekazane ładunki nie zaczną obowiązywać (nie pojawią się w ostatecznym potwierdzeniu płatności).

Usługa SubscriptionManager nie jest obsługiwana

IAP w Unity udostępnia klasę SubscriptionManager służącą do zarządzania subskrypcjami. Standardowa implementacja IAP tej klasy w Unity korzysta z ładunku programisty, dlatego ta klasa nie jest obsługiwana. Nadal możesz utworzyć tę klasę, ale podczas korzystania z jej metod pobierania możesz otrzymywać nierzetelne dane.

W interfejsie UpdateSubscription wprowadzono niewielkie zmiany w interfejsie API

Wtyczka Płatności w Google Play nie pozwala na przejście na wyższą lub niższą wersję subskrypcji za pomocą metody SubscriptionManager.UpdateSubscription() i SubscriptionManager.UpdateSubscriptionInGooglePlayStore(). Jeśli gra wywołuje te metody, zwracany jest kod GooglePlayStoreUnsupportedException.

Biblioteka płatności w Google Play to alternatywny interfejs API, którego można używać zamiast tych metod. Aby przejść na wyższą lub niższą wersję subskrypcji, wywołaj metodę UpdateSubscription() w trybie proporcjonalnym:

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

Możesz dodać to wywołanie metody do sprawdzenia platformy lub w bloku catch, gdy GooglePlayStoreUnsupportedException zostanie przechwycony.

Więcej informacji i przykładów korzystania z trybu proporcjonalnego znajdziesz w artykule Ustawianie trybu proporcjonalnego.