Menggunakan Google Play Billing Library dengan Unity

Plugin Layanan Penagihan Google Play memperluas layanan dan aset bawaan Unity untuk pembelian dalam aplikasi, yang disebut Unity IAP, untuk memberi game Anda semua fitur terbaru dari Google Play Billing Library. Panduan ini menjelaskan cara menyiapkan project Anda untuk menggunakan plugin tersebut. Panduan ini juga menjelaskan cara menerapkan fitur Library Layanan Penagihan Google Play dalam game Anda di Unity.

Menyiapkan plugin Layanan Penagihan Google Play

Untuk menyiapkan plugin, selesaikan langkah-langkah di setiap bagian yang telah disertai link berikut:

  1. Mengaktifkan lapisan abstraksi Unity IAP.
  2. Mendownload dan mengimpor plugin.
  3. Mengonfigurasi setelan build plugin.
  4. Mengaktifkan plugin.

Mengaktifkan lapisan abstraksi Unity IAP

Plugin Layanan Penagihan Google Play di-build pada lapisan abstraksi yang disertakan dengan Unity IAP, sehingga Anda perlu mengaktifkan lapisan abstraksi ini sebelum mendownload dan mengimpor plugin. Untuk mengaktifkan lapisan abstraksi Unity IAP, lakukan langkah berikut:

  1. Selesaikan semua langkah dalam tutorial Unity berikut: Menyiapkan project Anda untuk Layanan Unity.
  2. Selesaikan semua langkah dalam tutorial Unity berikut: Mengaktifkan layanan Unity IAP.

Mendownload dan mengimpor plugin

Plugin dikirimkan sebagai paket Unity dalam format .unitypackage. Untuk mendownload dan mengimpor plugin, ikuti langkah berikut:

  1. Download rilis terbaru Plugin Google Play untuk Unity dari halaman rilis repositori di GitHub.
  2. Dari panel menu Unity, klik Assets > Import Package > Custom Package.

  3. Buka lokasi tempat Anda mendownload file .unitypackage, lalu pilih file tersebut.

  4. Dalam dialog Import Unity Package, biarkan semua aset dipilih, lalu klik Import.

Setelah paket diimpor, folder baru bernama GooglePlayPlugins (di root folder Assets) akan ditambahkan ke aset project Anda. Folder ini berisi semua aset Library Layanan Penagihan Google Play untuk plugin.

Mengonfigurasi setelan build

Plugin ini memperluas Unity IAP sehingga Unity akan mengalami konflik dan gagal mem-build APK Android kecuali jika beberapa dependensi tumpang tindih yang lebih lama pada Unity IAP dihapus dari build. Plugin ini menyediakan cara otomatis untuk menghapus library yang mengalami konflik dari project Anda. Untuk menyelesaikan konflik ini, ikuti langkah berikut:

  1. Dari panel menu Unity, pilih Google > Play Billing > Build Settings.

  2. Di jendela Play Billing Build Settings, klik Fix. Tindakan ini akan mengatasi konflik dan memindahkan file Unity IAP yang mengalami konflik ke direktori cadangan. Setelah Anda mengklik Fix, tombol akan berubah menjadi Restore, yang dapat Anda klik untuk memulihkan file asli, yang mengalami konflik.

Mengaktifkan plugin

Untuk mengaktifkan plugin, ganti implementasi Google Play Unity IAP dengan plugin Layanan Penagihan Google Play. Misalnya, jika menggunakan Unity IAP Purchaser Script, ganti StandardPurchaseModule yang diteruskan ke builder IAP menjadi Google.Play.Billing.GooglePlayStoreModule:

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

Jika game Anda menggunakan Purchaser Script yang sama untuk beberapa platform, sebaiknya tambahkan pemeriksaan platform untuk memastikan bahwa Unity akan tetap menggunakan solusi IAP miliknya untuk platform lain:

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

Jika Anda memublikasikan game di app store Android selain Google Play Store, maka Anda sebaiknya mengganti implementasi default Unity IAP hanya saat memilih Google Play Store:

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

Mengimplementasikan fitur Library Layanan Penagihan Google Play dalam game

Plugin Layanan Penagihan Google Play memperluas layanan Unity IAP, sehingga Anda dapat menggunakan Unity API yang sama untuk mengelola alur kerja pembelian umum. Perlu diperhatikan bahwa ada beberapa perubahan kecil pada perilaku API karena adanya perbedaan antara Google Play Billing Library dan implementasi IAP standar Unity untuk app store lainnya. Jika Anda baru menggunakan API Unity IAP, lihat bagian "Membuat Skrip Pembelian" dalam Tutorial Unity IAP untuk menemukan contoh cara mengimplementasikan alur pembelian dasar.

Google Play Billing Library juga menyertakan beberapa fitur unik untuk Google Play Store. Anda dapat mengakses fitur ini melalui antarmuka yang diperluas. Bagian ini selanjutnya menjelaskan cara menerapkan fitur Library Layanan Penagihan Google Play unik ini dalam game Anda.

Mengaktifkan pembelian yang ditangguhkan

Google Play mendukung pembelian yang ditangguhkan, atau yang disebut juga transaksi tertunda atau pembelian tertunda, yakni saat pengguna dapat melakukan pembelian dan menyelesaikannya nanti menggunakan uang tunai di toko.

Untuk mengaktifkan pembelian yang ditangguhkan, gunakan builder IAP Anda untuk mengubah konfigurasi modul dengan memanggil metode 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();

Berikutnya, implementasikan callback pembelian yang ditangguhkan menggunakan ekstensi Play Store:

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

Meneruskan ID akun yang di-obfuscate ke Google Play

Anda dapat meneruskan ID akun pengguna yang di-obfuscate ke Google Play untuk memfasilitasi deteksi penyalahgunaan, seperti mendeteksi apakah ada banyak perangkat yang melakukan pembelian pada akun yang sama di waktu yang singkat.

Untuk meneruskan ID akun yang di-obfuscate, panggil metode SetObfuscatedAccountId() dari API ekstensi:

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

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

Meneruskan ID profil yang di-obfuscate ke Google Play

Anda dapat meneruskan ID profil yang di-obfuscate ke Google Play untuk memfasilitasi deteksi penipuan, seperti mendeteksi apakah ada banyak perangkat yang melakukan pembelian pada akun yang sama di waktu yang singkat. Hal ini serupa dengan meneruskan ID akun pengguna yang di-obfuscate. Pada kedua kasus ini, ID merepresentasikan satu pengguna, tetapi ID profil memungkinkan Anda mengidentifikasi satu pengguna secara unik di beberapa profil yang mereka miliki dalam satu aplikasi. Setelah mengirimkan ID profil yang di-obfuscate ke Google Play, Anda dapat mengambil ID tersebut nanti dalam tanda terima pembelian.

Untuk meneruskan ID profil yang di-obfuscate, gunakan builder IAP Anda untuk mengubah konfigurasi modul dengan memanggil metode 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);

Mengonfirmasi perubahan harga untuk langganan

Google Play memungkinkan Anda mengubah harga langganan aktif. Pengguna game Anda harus mengonfirmasi setiap perubahan harga sebelum perubahan ini diberlakukan. Untuk meminta pengguna mengonfirmasi perubahan harga bagi langganan mereka, panggil metode 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.
    });

Perubahan pada perilaku Unity API

Saat Anda menggunakan plugin Layanan Penagihan Google Play, sebagian besar API berperilaku sama seperti implementasi IAP standar Unity untuk app store lainnya. Namun, ada beberapa kasus di mana API ini akan berperilaku lain. Bagian ini menjelaskan perbedaan perilaku tersebut.

Payload developer tidak didukung

Google Play telah menghentikan payload developer dan akan menggantinya dengan alternatif yang lebih relevan dan kontekstual. Karena alasan ini, payload developer kini tidak didukung. Untuk informasi selengkapnya tentang alternatif, lihat halaman tentang Payload developer.

Anda dapat terus menggunakan antarmuka yang sama yang ditentukan oleh penerapan IAP standar Unity untuk app store lainnya, termasuk IStoreController. Saat memulai pembelian, Anda masih dapat menggunakan IStoreController dan memanggil metode InitiatePurchase():

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

Namun, payload yang Anda teruskan tidak akan berlaku (tidak akan muncul dalam tanda terima akhir).

SubscriptionManager tidak didukung

Unity IAP menyediakan class SubscriptionManager untuk mengelola langganan. Karena implementasi IAP standar Unity pada class ini menggunakan payload developer, class ini tidak didukung. Anda tetap dapat membuat class ini, tetapi mungkin akan menerima data yang tidak konsisten saat menggunakan salah satu metode pengambil class ini.

UpdateSubscription memiliki sedikit perubahan API

Plugin Layanan Penagihan Google Play tidak mendukung penggunaan metode SubscriptionManager.UpdateSubscription() dan SubscriptionManager.UpdateSubscriptionInGooglePlayStore() untuk mengupgrade dan mendowngrade langganan Anda. Jika game Anda memanggil metode ini, GooglePlayStoreUnsupportedException akan muncul.

Library Layanan Penagihan Google Play menyediakan API alternatif yang dapat digunakan untuk menggantikan metode ini. Untuk mengupgrade atau mendowngrade langganan, panggil metode UpdateSubscription() menggunakan mode penghitungan prorata:

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

Anda dapat menggabungkan panggilan metode ini dengan pemeriksaan platform atau dalam blok catch saat GooglePlayStoreUnsupportedException terdeteksi.

Untuk informasi selengkapnya dan contoh cara menggunakan mode penghitungan prorata, lihat Menetapkan mode penghitungan prorata.