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

Wtyczka Google Play Billing rozszerza wbudowane usługi i zasoby Unity do obsługi zakupów w aplikacji, czyli Unity IAP, aby zapewnić Twojej grze wszystkie najnowsze funkcje Biblioteki płatności w Google Play. Z tego przewodnika dowiesz się, jak skonfigurować projekt, aby używać wtyczki. Z tego przewodnika dowiesz się też, jak zaimplementować w grze w Unity funkcje Biblioteki płatności w Google Play.

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 Unity.
  2. Pobierz i zaimportuj wtyczkę.
  3. Skonfiguruj ustawienia kompilacji wtyczki.
  4. Włącz wtyczkę.

Włącz warstwę abstrakcji IAP Unity

Wtyczka Płatności w Google Play jest oparta na warstwie abstrakcji dołączonej do Unity IAP, więc przed pobraniem i zaimportowaniem wtyczki musisz włączyć tę warstwę abstrakcji. Aby włączyć warstwę abstrakcji IAP Unity, wykonaj te czynności:

  1. Wykonaj wszystkie czynności opisane w tym samouczku Unity: Konfigurowanie projektu pod kątem usług Unity.
  2. Wykonaj wszystkie czynności opisane w tym samouczku Unity: Włączanie usługi Unity IAP.

Pobieranie i importowanie wtyczki

Wtyczka jest dostarczana jako pakiet Unity w formacie .unitypackage. Aby pobrać i zaimportować wtyczkę, wykonaj te czynności:

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

  3. Znajdź pobrany plik .unitypackage i go wybierz.

  4. W oknie Import Unity Package (Importowanie pakietu dla Unity) pozostaw zaznaczone wszystkie zasoby 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 dla wtyczki.

Konfigurowanie ustawień kompilacji

Ponieważ wtyczka rozszerza funkcję płatności w aplikacji Unity, Unity napotka konflikty i nie będzie w stanie utworzyć pliku APK na Androida, chyba że ze skompilowanej wersji zostaną usunięte starsze, nakładające się zależności w funkcji płatności w aplikacji Unity. Wtyczka umożliwia automatyczne usuwanie z projektu bibliotek powodujących konflikty. Aby rozwiązać te konflikty, wykonaj te czynności:

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

  2. W oknie Ustawienia kompilacji płatności w Google Play kliknij Napraw. Spowoduje to rozwiązanie konfliktu i przeniesienie plików Unity IAP, które powodują konflikt, do katalogu kopii zapasowych. Gdy klikniesz Napraw, przycisk zmieni się na Przywróć. Kliknij go, aby przywrócić oryginalne, powodujące konflikt pliki.

Włącz wtyczkę

Aby włączyć wtyczkę, zastąp implementację Google Play w usłudze IAP Unity wtyczką Rozliczenia w Google Play. Na przykład podczas korzystania ze skryptu Unity IAP Purchaser zmienisz StandardPurchaseModule przekazywany do narzędzia do tworzenia płatności w aplikacjiGoogle.Play.Billing.GooglePlayStoreModule:

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

Jeśli Twoja gra używa tego samego skryptu kupującego na wielu platformach, dodaj sprawdzanie platformy, aby mieć pewność, że Unity będzie nadal używać własnego rozwiązania do płatności w aplikacji na innych platformach:

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 niż Sklep Google Play, domyślną implementację Unity IAP należy zastąpić tylko wtedy, gdy wybierasz Sklep 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 w grze funkcji Biblioteki płatności w Google Play

Wtyczka Google Play Billing rozszerza usługi Unity IAP, dzięki czemu możesz używać tych samych interfejsów API Unity do zarządzania typowymi procesami zakupu. Pamiętaj, że ze względu na różnice między Biblioteką płatności w Google Play a standardową implementacją zakupów w aplikacji w Unity w przypadku innych sklepów z aplikacjami występują pewne drobne zmiany w działaniu interfejsu API. Jeśli dopiero zaczynasz korzystać z interfejsów API Unity IAP, zapoznaj się z sekcją „Making a Purchase Script” w samouczku Unity IAP, w której znajdziesz przykład implementacji podstawowych przepływów zakupu.

Biblioteka rozliczeniowa Google Play zawiera też funkcje, które są dostępne tylko w Sklepie Google Play. Dostęp do tych funkcji uzyskasz w rozszerzonym interfejsie. W pozostałej części tej sekcji opisujemy, jak wdrożyć w grze te unikalne funkcje Biblioteki płatności w Google Play.

Włączanie odroczonych zakupów

Google Play obsługuje zakupy odroczone, zwane też transakcjami oczekującymi lub zakupami oczekującymi. Użytkownicy mogą utworzyć zakup i dokończyć go później, płacąc gotówką w sklepach.

Aby włączyć zakupy odroczone, użyj narzędzia do tworzenia zakupów w aplikacji, 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 odroczonych zakupów za pomocą 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 do Google Play zaciemnionych identyfikatorów kont

Możesz przekazywać do Google Play zaciemnione identyfikatory kont użytkowników, aby ułatwić wykrywanie nadużyć, np. sprawdzanie, czy wiele urządzeń dokonuje zakupów na tym samym koncie w krótkim czasie.

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 do Google Play zniekształconych identyfikatorów profili

Możesz przekazywać do Google Play zaciemniony identyfikator profilu, aby ułatwić wykrywanie oszustw, np. sprawdzanie, czy wiele urządzeń dokonuje zakupów na tym samym koncie w krótkim czasie. Jest to podobne do przekazywania zaciemnionego identyfikatora konta użytkownika. W obu przypadkach identyfikator reprezentuje jednego użytkownika, ale identyfikator profilu umożliwia jednoznaczną identyfikację jednego użytkownika w wielu profilach, które ma w ramach jednej aplikacji. Po wysłaniu do Google Play zaciemnionego identyfikatora profilu możesz później pobrać ten identyfikator z dowodu zakupu.

Aby przekazać zaciemniony identyfikator profilu, użyj narzędzia do tworzenia płatności w aplikacji, aby zmodyfikować 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);

Potwierdzanie zmian cen subskrypcji

Google Play umożliwia zmianę ceny aktywnej subskrypcji. Użytkownicy Twojej gry muszą potwierdzić każdą zmianę ceny, zanim zacznie ona obowiązywać. Aby wyświetlić użytkownikom prośbę 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 do rozliczeń w Google Play, większość interfejsów API działa tak samo jak standardowa implementacja zakupów w aplikacji w Unity w przypadku innych sklepów z aplikacjami. W niektórych przypadkach interfejsy API będą jednak działać inaczej. W tej sekcji opisujemy te różnice w działaniu.

Dane dodatkowe programisty nie są obsługiwane

Google Play wycofuje ładunek dewelopera i zastępuje go bardziej przydatnymi i kontekstowymi alternatywami. Z tego powodu ładunek dewelopera nie jest obsługiwany. Więcej informacji o alternatywnych rozwiązaniach znajdziesz na stronie Dane dodatkowe dla deweloperów.

W przypadku innych sklepów z aplikacjami, w tym IStoreController, możesz nadal używać tych samych interfejsów, które są zdefiniowane przez standardową implementację IAP Unity. Gdy zainicjujesz zakup, nadal możesz używać IStoreController i wywoływać metodę InitiatePurchase():

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

Jednak żaden przekazany przez Ciebie ładunek nie będzie miał wpływu na ostateczny rachunek.

SubscriptionManager nie jest obsługiwany

Unity IAP udostępnia klasę SubscriptionManager do zarządzania subskrypcjami. Standardowa implementacja zakupu w aplikacji w Unity w tej klasie korzysta z ładunku dewelopera, dlatego ta klasa nie jest obsługiwana. Możesz utworzyć tę klasę, ale podczas korzystania z dowolnej metody pobierania klasy możesz otrzymywać niewiarygodne dane.

W przypadku UpdateSubscription wprowadziliśmy niewielkie zmiany w interfejsie API

Wtyczka Płatności w Google Play nie obsługuje metod SubscriptionManager.UpdateSubscription()SubscriptionManager.UpdateSubscriptionInGooglePlayStore() do uaktualniania i obniżania wersji subskrypcji. Jeśli gra wywołuje te metody, zgłaszany jest wyjątek GooglePlayStoreUnsupportedException.

Biblioteka rozliczeniowa Google Play udostępnia 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 umieścić to wywołanie metody w bloku sprawdzania platformy lub w bloku catch, gdy zostanie przechwycony błąd GooglePlayStoreUnsupportedException.

Więcej informacji i przykłady użycia trybu proporcjonalnego znajdziesz w artykule Ustawianie trybu proporcjonalnego.