Wtyczka Płatności w Google Play rozszerza wbudowane usługi i zasoby Unity dotyczące zakupów w aplikacji, czyli Unity IAP, aby zapewnić Twojej grze dostęp do wszystkich najnowszych funkcji biblioteki Płatności w Google Play. Z tego przewodnika dowiesz się, jak skonfigurować projekt, aby korzystać z wtyczki. Opisujemy w nim 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:
- Włącz warstwę abstrakcji Unity IAP.
- Pobierz i zaimportuj wtyczkę.
- Skonfiguruj ustawienia kompilacji wtyczki.
- Włącz wtyczkę.
Włączanie warstwy abstrakcji Unity IAP
Wtyczka Płatności w Google Play jest oparta na warstwie abstrakcji dołączonej do Unity IAP, dlatego przed pobraniem i zaimportowaniem wtyczki musisz włączyć tę warstwę. Aby włączyć warstwę abstrakcji Unity IAP:
- Wykonaj wszystkie czynności opisane w tym samouczku Unity: Konfigurowanie projektu pod kątem usług Unity.
- Wykonaj wszystkie czynności opisane w tym samouczku Unity: Włączanie usługi Unity IAP service.
Pobieranie i importowanie wtyczki
Wtyczka jest dostarczana jako pakiet Unity w formacie .unitypackage. Aby pobrać i zaimportować wtyczkę:
- Pobierz najnowszą wersję wtyczek Google Play do silnika Unity ze strony wydań w repozytorium na GitHubie .
Na pasku menu Unity kliknij Assets > Import Package > Custom Package (Zasoby > Importuj pakiet > Własny pakiet).

Znajdź miejsce, w którym został pobrany plik
.unitypackage, i wybierz go.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 Unity IAP, Unity napotka konflikty i nie będzie w stanie skompilować pliku APK na Androida, chyba że z kompilacji zostaną usunięte starsze, nakładające się zależności w Unity IAP. Wtyczka umożliwia automatyczne usuwanie z projektu bibliotek powodujących konflikty. Aby rozwiązać te konflikty:
Na pasku menu Unity wybierz Google > Płatności w Play > Build Settings (Google > Płatności w Play > Ustawienia kompilacji).

W oknie Play Billing Build Settings (Ustawienia kompilacji Płatności w Play) kliknij Fix (Napraw). Spowoduje to rozwiązanie konfliktu i przeniesienie plików Unity IAP powodujących konflikt do katalogu kopii zapasowych. Po kliknięciu Fix (Napraw) przycisk zmieni się na Restore (Przywróć). Kliknij go, aby przywrócić oryginalne pliki powodujące konflikt.

Włączanie wtyczki
Aby włączyć wtyczkę, zastąp implementację Google Play w Unity IAP wtyczką Płatności w Google Play. Na przykład, jeśli używasz skryptu zakupu Unity IAP
,
musisz zmienić StandardPurchaseModule przekazywany do narzędzia do tworzenia IAP,
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 używa tego samego skryptu zakupu na wielu platformach, dodaj sprawdzenie platformy, aby mieć pewność, że Unity będzie nadal używać 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 oprócz Sklepu Google Play, zastąp domyślną implementację Unity IAP 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 Płatności w Google Play 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ą IAP w Unity w przypadku innych sklepów z aplikacjami występują drobne zmiany w działaniu interfejsu API. Jeśli dopiero zaczynasz korzystać z interfejsów API Unity IAP, zapoznaj się z sekcją „Tworzenie skryptu zakupu” w samouczku Unity IAP aby zobaczyć przykład implementacji podstawowych procesów zakupu.
Biblioteka Płatności w Google Play zawiera też funkcje dostępne tylko w Sklepie Google Play. Możesz uzyskać do nich dostęp za pomocą rozszerzonego interfejsu. W pozostałej części tej sekcji opisujemy, jak zaimplementować w grze te unikalne funkcje biblioteki Płatności w Google Play.
Włączanie odroczonych zakupów
Google Play obsługuje odroczone zakupy (nazywane też transakcjami oczekującymi lub zakupami oczekującymi), w przypadku których użytkownicy mogą utworzyć zakup i dokończyć go później, płacąc gotówką w sklepach.
Aby włączyć odroczone zakupy, użyj narzędzia do tworzenia 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 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. sprawdzić, czy w krótkim czasie na tym samym koncie nie dokonano wielu zakupów.
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 zaciemnionych identyfikatorów profili
Możesz przekazywać do Google Play zaciemniony identyfikator profilu, aby ułatwić wykrywanie oszustw, np. sprawdzić, czy w krótkim czasie na tym samym koncie nie dokonano wielu zakupów. 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 jednej aplikacji. Po wysłaniu do Google Play zaciemnionego identyfikatora profilu możesz go później pobrać w potwierdzeniu zakupu.
Aby przekazać zaciemniony identyfikator profilu, użyj narzędzia do tworzenia IAP, 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 API Unity
Gdy używasz wtyczki Płatności 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. W niektórych przypadkach interfejsy API będą jednak działać inaczej. W tej sekcji opisujemy te różnice w działaniu.
Ładunek dewelopera nie jest obsługiwany
Google Play wycofał ładunek dewelopera i zastępuje go alternatywami, które są bardziej znaczące i kontekstowe. Z tego powodu ładunek dewelopera nie jest obsługiwany. Więcej informacji o alternatywach znajdziesz na stronie o Ładunek dewelopera.
Możesz nadal używać tych samych interfejsów zdefiniowanych przez standardową implementację IAP w Unity w przypadku innych sklepów z aplikacjami, w tym IStoreController. Gdy inicjujesz zakup, możesz nadal używać IStoreController i wywoływać metodę InitiatePurchase():
public void InitiatePurchase(Purchasing.Product product, string payload);
Jednak żaden przekazany ładunek nie będzie działać (nie pojawi się w ostatecznym potwierdzeniu).
SubscriptionManager nie jest obsługiwany
Unity IAP udostępnia klasę SubscriptionManager
do zarządzania subskrypcjami. Ponieważ standardowa implementacja IAP w Unity tej klasy używa ładunku dewelopera, ta klasa nie jest obsługiwana. Możesz nadal tworzyć tę klasę, ale podczas korzystania z dowolnej metody pobierania klasy możesz otrzymywać nierzetelne dane.
UpdateSubscription ma drobne zmiany w interfejsie API
Wtyczka Płatności w Google Play nie obsługuje metod SubscriptionManager.UpdateSubscription() i SubscriptionManager.UpdateSubscriptionInGooglePlayStore() do uaktualniania i obniżania wersji subskrypcji. Jeśli Twoja gra wywołuje te metody, zgłaszany jest wyjątek GooglePlayStoreUnsupportedException.
Biblioteka Płatności w Google Play udostępnia alternatywny interfejs API, którego można używać zamiast tych metod. Aby uaktualnić lub obniżyć wersję subskrypcji, wywołaj metodę UpdateSubscription() w trybie proporcjonalnym:
void UpdateSubscription(Product oldProduct, Product newProduct,
GooglePlayStoreProrationMode prorationMode = GooglePlayStoreProrationMode.Unknown);
Możesz opakować to wywołanie metody za pomocą sprawdzenia platformy lub w bloku catch, gdy zostanie przechwycony wyjątek GooglePlayStoreUnsupportedException.
Więcej informacji i przykładów użycia trybu proporcjonalnego znajdziesz w artykule Ustawianie trybu proporcjonalnego.