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

Wtyczka Google Play Billing rozszerza wbudowane usługi i zasoby Unity do zakupów w aplikacji (tzw. 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ć w nim tego wtyczki. W tym przewodniku znajdziesz też informacje o tym, jak wdrażać funkcje Biblioteki płatności w Google Play w grze w Unity.

Konfigurowanie wtyczki Płatności w Google Play

Aby skonfigurować wtyczkę, wykonaj czynności opisane w tych połączonych sekcjach:

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

Włączanie warstwy abstrakcji IAP w Unity

Wtyczka Płatności w Google Play została stworzona na podstawie warstwy abstrakcji zawartej w Unity IAP, dlatego przed pobraniem i importowaniem wtyczki musisz włączyć tę warstwę abstrakcji. Aby włączyć warstwę abstrakcji IAP w Unity, wykonaj te czynności:

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

Pobieranie i importowanie wtyczki

Wtyczka jest dostarczana jako pakiet Unity w formacie .unitypackage. Aby pobrać i importować wtyczkę:

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

  3. Znajdź i otwórz pobrany plik .unitypackage.

  4. W oknie Importuj pakiet Unity pozostaw zaznaczone wszystkie zasoby i kliknij Importuj.

Po zaimportowaniu pakietu do zasobów projektu zostanie dodany nowy folder o nazwie GooglePlayPlugins (w katalogu głównym folderu Zasoby). Ten folder zawiera wszystkie zasoby Biblioteki płatności w Google Play używane przez wtyczkę.

Konfigurowanie ustawień kompilacji

Ponieważ wtyczka rozszerza Unity IAP, Unity napotka konflikty i nie skompiluje pliku APK na Androida, chyba że z kompilacji zostaną usunięte niektóre starsze, nakładające się na siebie zależności w Unity IAP. Wtyczka umożliwia automatyczne usuwanie bibliotek, które powodują konflikty, z Twojego projektu. Aby rozwiązać te konflikty, wykonaj te czynności:

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

  2. W oknie Ustawienia kompilacji płatności w Google Play kliknij Napraw. Rozwiąże to konflikt i przeniesie pliki IAP Unity, które się z nim pokrywają, do katalogu kopii zapasowej. Gdy klikniesz Napraw, przycisk zmieni się na Przywróć. Możesz go kliknąć, aby przywrócić pierwotne pliki, które powodują konflikt.

Włącz wtyczkę

Aby włączyć wtyczkę, zastąp implementację Google Play w Unity IAP wtyczką Rozliczenia w Google Play. Jeśli na przykład używasz skryptu Unity IAP Purchaser, możesz zmienić wartość parametru StandardPurchaseModule przekazywanego do kreatora IAP, aby użyć parametru Google.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 Purchaser na różnych platformach, dodaj kontrolę platformy, aby Unity nadal używało własnego rozwiązania IAP 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, zastąp domyślne wdrożenie IAP w Unity tylko wtedy, gdy wybierzesz 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 funkcji Biblioteki płatności w Google Play w grze

Wtyczka Google Play Billing rozszerza usługi IAP Unity, dzięki czemu możesz używać tych samych interfejsów API Unity do zarządzania typowymi ścieżkami zakupów. Pamiętaj, że ze względu na różnice między Biblioteką płatności w Google Play a standardową implementacją IAP w Unity na potrzeby innych sklepów z aplikacjami wprowadzono niektóre drobne zmiany w zachowaniu interfejsu API. Jeśli nie znasz interfejsów API Unity IAP, zapoznaj się z sekcją „Tworzenie skryptu zakupu” w samouczku Unity IAP, aby zobaczyć przykłady implementacji podstawowych procesów zakupu.

Biblioteka płatności Google Play zawiera też funkcje dostępne tylko w tym sklepie. Do tych funkcji możesz uzyskać dostęp w rozszerzonym interfejsie. Z reszty tej sekcji dowiesz się, jak zaimplementować te wyjątkowe funkcje Biblioteki płatności w Google Play w swojej grze.

Włączanie opóźnionych zakupów

Google Play obsługuje zakupy odroczone (nazywane też oczekującymi transakcjami lub oczekującymi zakupami), które użytkownicy mogą utworzyć i dokończyć później, płacąc gotówką w sklepach.

Aby włączyć opóźnione 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 opóźnionych 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 zamaskowanych identyfikatorów kont do Google Play

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

Aby przekazać zaszyfrowany 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 zniekształconych identyfikatorów profilu do Google Play

Aby ułatwić wykrywanie oszustw, możesz przekazać zamaskowany identyfikator profilu do Google Play. Dzięki temu możesz np. wykryć, 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 pojedynczego użytkownika, ale identyfikator profilu umożliwia jednoznaczne zidentyfikowanie pojedynczego użytkownika na podstawie wielu profili, które ma w jednej aplikacji. Po wysłaniu zaciemnionego identyfikatora profilu do Google Play możesz później pobrać ten identyfikator z rachunku za zakup.

Aby przekazać zaszyfrowany identyfikator profilu, użyj kreatora interfejsu API, 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 gry muszą zatwierdzić każdą zmianę ceny, zanim zacznie ona 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 zachowaniu interfejsu Unity API

Jeśli używasz wtyczki Rozliczenia w Google Play, większość interfejsów API działa tak samo jak standardowa implementacja IAP w Unity w przypadku innych sklepów z aplikacjami. Istnieją jednak przypadki, w których interfejsy API zachowują się inaczej. W tej sekcji opisujemy te różnice w zachowaniu.

Dane dewelopera nie są obsługiwane

Google Play wycofuje ładunek dewelopera i zastępuje go alternatywami, które są bardziej przydatne i sytuacyjne. Z tego powodu nie obsługujemy danych dewelopera. Więcej informacji o alternatywnych sposobach przesyłania danych znajdziesz na stronie Dane programisty.

Nadal możesz używać tych samych interfejsów zdefiniowanych przez standardową implementację IAP w Unity w innych sklepach z aplikacjami, w tym w IStoreController. Podczas dokonywania zakupu możesz nadal używać IStoreController i wywoływać metodę InitiatePurchase():

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

Jednak żadne dane, które przekażesz, nie zostaną zastosowane (nie pojawią się na ostatecznym rachunku).

Interfejs SubscriptionManager nie jest obsługiwany

Unity IAP udostępnia klasę SubscriptionManager do zarządzania subskrypcjami. Standardowa implementacja IAP w Unity korzysta z danych dla dewelopera, dlatego ta klasa nie jest obsługiwana. Nadal możesz utworzyć tę klasę, ale podczas korzystania z jakiejkolwiek metody gettera możesz otrzymać niewiarygodne dane.

W UpdateSubscription wprowadzono drobne zmiany w interfejsie API

Wtyczka Google Play Billing nie obsługuje metod SubscriptionManager.UpdateSubscription()SubscriptionManager.UpdateSubscriptionInGooglePlayStore() do podwyższania i obniżania poziomu subskrypcji. Jeśli Twoja gra wywołuje te metody, zostanie wyrzucony błądGooglePlayStoreUnsupportedException.

Biblioteka Google Play Billing udostępnia interfejs API alternatywny, który można wykorzystać zamiast tych metod. Aby przejść na wyższą lub niższą wersję subskrypcji, wywołaj metodę UpdateSubscription() w trybie proporcjonalnego rozliczenia:

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

Możesz owinąć ten wywołanie metody za pomocą sprawdzania platformy lub bloku catch, gdy zostanie złapany błąd GooglePlayStoreUnsupportedException.

Więcej informacji i przykłady korzystania z tego trybu znajdziesz w artykule Konfigurowanie trybu podziału.