Menggunakan Library Layanan Penagihan Google Play dengan Unity

Plugin Layanan Penagihan Google Play memperluas layanan dan aset bawaan Unity untuk pembelian dalam aplikasi (IAP), yang disebut Unity IAP, untuk memberi game Anda semua fitur terbaru dari Library Layanan Penagihan Google Play. Panduan ini menjelaskan cara menyiapkan project Anda untuk menggunakan plugin tersebut. Panduan ini juga menjelaskan cara mengimplementasikan fitur Library Penagihan 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 harus 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

Langkah-langkah yang harus diikuti bervariasi sesuai versi Unity yang Anda gunakan:

Untuk Unity 5.6 sampai 2018.3

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

  1. Download rilis terbaru Google Play Plugins for 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.

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

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

Untuk Unity 2018.4 dan yang lebih baru

Untuk versi Unity ini, plugin didistribusikan melalui Game Package Registry for Unity. Untuk mendownload dan menginstal plugin, ikuti langkah berikut:

  1. Download rilis Game Package Registry for Unity terbaru.

  2. Impor file .unitypackage dengan memilih opsi menu Unity IDE Assets > Import package > Custom Package, lalu mengimpor semua item.

  3. Saat diminta, klik Add Selected Registries untuk menyetujui Persyaratan Layanan Google API dan aktifkan Game Package Registry for Unity.

  4. Buka Window > Package Manager untuk melihat daftar paket.

  5. Jika jendela pengelola paket memiliki tombol muat ulang, klik tombol tersebut untuk memuat paket.

  6. Dari daftar paket, pilih paket Google Play Billing dan klik Install.

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 di Unity IAP dihapus dari build. Plugin ini menyediakan cara otomatis untuk menghapus library yang mengalami konflik dari project Anda. Untuk mengatasi 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 masalah 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 sebelumnya 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, Anda harus menambahkan pemeriksaan platform agar Unity tetap menggunakan solusi IAP miliknya untuk platform lain:

var storeModule = StandardPurchasingModule.Instance();
    if (Application.platform == RuntimePlatform.Android)
    {
        storeModule = Google.Play.Billing.GooglePlayStoreModule.Instance();
    }
    var configurationBuilder = ConfigurationBuilder.Instance(storeModule);
    

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

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

Mengimplementasikan fitur Library Layanan Penagihan Google Play dalam game

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

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

Mengaktifkan pembelian yang ditangguhkan

Google Play mendukung pembelian yang ditangguhkan, atau disebut juga transaksi tertunda atau pembelian tertunda, yang memungkinkan pengguna 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 dalam satu akun 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 dalam satu akun di waktu yang singkat. Hal ini mirip dengan meneruskan ID akun pengguna yang di-obfuscate. Dalam kedua kasus ini, ID mewakili satu pengguna, tetapi ID profil memungkinkan Anda mengidentifikasi satu pengguna secara unik di beberapa profil yang dia 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.Configure<Google.Play.Billing.IGooglePlayConfiguration>()
        .SetObfuscatedProfileId(obfuscatedProfileId);
    

Mengonfirmasi perubahan harga untuk langganan

Google Play memungkinkan Anda mengubah harga langganan yang masih aktif. Pengguna game Anda harus mengonfirmasi 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 API Unity

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 situasi ketika 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 wajar dan kontekstual. Untuk 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 implementasi IAP standar Unity untuk app store lainnya, termasuk IStoreControllor. Saat melakukan pembelian, Anda masih dapat menggunakan IStoreControllor dan memanggil metode InitiatePurchase():

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

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

SubscriptionManager tidak didukung

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

UpdateSubscription memiliki sedikit perubahan API

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

Library Penagihan menyediakan API alternatif yang dapat digunakan untuk menggantikan metode ini. Untuk mengupgrade atau mendowngrade langganan, panggil metode UpdateSubscription() menggunakan mode 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 GooglePlayStoreUnsupportedeException terdeteksi.

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