Unity ile Google Play Faturalandırma Kitaplığı'nı kullanma

Google Play Faturalandırma eklentisi, oyununuza Google Play Faturalandırma Kitaplığı'nın en yeni özelliklerini sunmak için Unity'nin uygulama içi satın alma işlemlerine yönelik Unity UİSA adı verilen yerleşik hizmetlerini ve öğelerini genişletir. Bu kılavuzda, eklentiyi kullanmak için projenizi nasıl ayarlayacağınız açıklanmaktadır. Bu kılavuzda, Unity'deki oyununuzda Google Play Faturalandırma Kitaplığı özelliklerini nasıl uygulayacağınız da açıklanmaktadır.

Google Play Faturalandırma eklentisini ayarlama

Eklentiyi kurmak için aşağıdaki bağlantılı bölümlerin her birindeki adımları tamamlayın:

  1. Unity IAP soyutlama katmanını etkinleştirin.
  2. Eklentiyi indirin ve içe aktarın.
  3. Eklentinin derleme ayarlarını yapılandırın.
  4. Eklentiyi etkinleştirin.

Unity IAP soyutlama katmanını etkinleştir

Google Play Faturalandırma eklentisi, Unity IAP'de bulunan bir soyutlama katmanı üzerine kuruludur. Bu nedenle, eklentiyi indirip içe aktarmadan önce bu soyutlama katmanını etkinleştirmeniz gerekir. Unity IAP soyutlama katmanını etkinleştirmek için aşağıdakileri yapın:

  1. Şu Unity eğiticisindeki tüm adımları tamamlayın: Unity Hizmetleri için projenizi ayarlama.
  2. Şu Unity eğiticisindeki tüm adımları tamamlayın: Unity IAP hizmetini etkinleştirme.

Eklentiyi indirin ve içe aktarın

Eklenti, .unitypackage biçiminde bir Unity paketi olarak gönderilir. Eklentiyi indirmek ve içe aktarmak için aşağıdaki adımları izleyin:

  1. Unity için Google Play Eklentilerinin en yeni sürümünü, deponun GitHub'daki sürümler sayfasından indirin.
  2. Unity menü çubuğunda Öğeler > Paketi İçe Aktar > Özel Paket'i tıklayın.

  3. .unitypackage dosyasını indirdiğiniz yeri bulun ve seçin.

  4. Import Unity Package (Unity Paketini İçe Aktar) iletişim kutusunda tüm öğeleri seçili olarak bırakın ve Import'u (İçe Aktar) tıklayın.

Paket içe aktarıldıktan sonra, projenizin öğelerine GooglePlayEklentiler adlı yeni bir klasör (Öğeler klasörünün kökünde) eklenir. Bu klasörde, eklentinin tüm Google Play Faturalandırma Kitaplığı öğeleri yer alır.

Derleme ayarlarını yapılandırma

Eklenti Unity IAP'yi genişlettiğinden, Unity IAP'de çakışan bazı eski bağımlılıklar derlemeden kaldırılmadığı sürece Unity çakışmalarla karşılaşacak ve bir Android APK oluşturamayacaktır. Eklenti, çakışan kitaplıkları projenizden kaldırmak için otomatik bir yol sağlar. Bu çatışmaları çözmek için aşağıdaki adımları uygulayın:

  1. Unity menü çubuğundan Google > Play Faturalandırma > Derleme Ayarları'nı seçin.

  2. Play Faturalandırma Oluşturma Ayarları penceresinde Düzelt'i tıklayın. Bu işlem çakışmayı çözer ve çakışan Unity IAP dosyalarını yedek dizine taşır. Düzelt'i tıkladıktan sonra düğme Geri Yükle olarak değişir. Orijinal, çakışan dosyaları geri yüklemek için bu düğmeyi tıklayabilirsiniz.

Eklentiyi etkinleştirme

Eklentiyi etkinleştirmek için Unity IAP'nin Google Play uygulamasını Google Play Faturalandırma eklentisiyle değiştirin. Örneğin, Unity IAP Purchaser Komut Dosyası'nı kullanırken IAP oluşturucuya aktarılan StandardPurchaseModule değerini, Google.Play.Billing.GooglePlayStoreModule kullanacak şekilde değiştirirsiniz:

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

Oyununuz birden fazla platformda aynı Satın Alma Komut Dosyası'nı kullanıyorsa Unity'nin diğer platformlarda kendi UİSA çözümünü kullanmaya devam edeceğinden emin olmak için bir platform kontrolü eklemeniz gerekir:

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

Oyununuzu Google Play Store'un yanı sıra başka Android uygulama mağazalarında da yayınlarsanız varsayılan Unity IAP uygulamasını yalnızca Google Play Store'u seçerken değiştirmeniz gerekir:

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

Google Play Faturalandırma Kitaplığı özelliklerini oyununuza uygulayın

Google Play Faturalandırma eklentisi, Unity IAP hizmetlerinin kapsamını genişletir. Böylece ortak satın alma iş akışlarını yönetmek için aynı Unity API'lerini kullanabilirsiniz. Google Play Faturalandırma Kitaplığı ve Unity'nin diğer uygulama mağazaları için standart IAP uygulaması arasındaki farklılıklardan dolayı API davranışında bazı küçük değişiklikler yapıldığını unutmayın. Unity IAP API'lerini yeni kullanmaya başladıysanız temel satın alma akışlarının nasıl uygulanacağına dair bir örnek için Unity IAP eğiticisindeki "Satın Alma Komut Dosyası Oluşturma" bölümüne bakın.

Google Play Faturalandırma Kitaplığı, Google Play Store'a özgü bazı özellikler de içerir. Bu özelliklere, genişletilmiş bir arayüzden erişebilirsiniz. Bu bölümün geri kalanında, bu benzersiz Google Play Faturalandırma Kitaplığı özelliklerini oyununuza nasıl uygulayacağınız açıklanmaktadır.

Ertelenen satın alma işlemlerini etkinleştir

Google Play, kullanıcıların bir satın alma işlemi oluşturup daha sonra mağazalarda nakit kullanarak tamamlayabildiği ertelenmiş satın alma işlemlerini (bekleyen işlemler veya bekleyen satın alma işlemleri olarak da adlandırılır) destekler.

Ertelenen satın alma işlemlerini etkinleştirmek için EnableDeferredPurchase() yöntemini çağırarak modülünüzün yapılandırmasını değiştirmek üzere IAP oluşturucunuzu kullanın:

// 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();

Ardından, Play Store uzantılarını kullanarak ertelenmiş satın alma işlemleri geri çağırma işlemini uygulayın:

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

Karartılmış hesap kimliklerini Google Play'e iletme

Karartılmış kullanıcı hesabı kimliklerini Google Play'e göndererek kötüye kullanım tespitini (örneğin, çok sayıda cihazın kısa süre içinde aynı hesaptan satın alma işlemi yapıp yapmadığının tespit edilmesini) kolaylaştırabilirsiniz.

Karartılmış bir hesap kimliği iletmek için Extensions API'den SetObfuscatedAccountId() yöntemini çağırın:

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

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

Karartılmış profil kimliklerini Google Play'e iletme

Sahtekarlık tespitini kolaylaştırmak (örneğin, kısa süre içinde aynı hesaptan çok sayıda cihazın satın alma işlemi yapıp yapmadığını tespit etmek) için Google Play'e gizlenmiş bir profil kimliği aktarabilirsiniz. Bu, karartılmış bir kullanıcı hesabı kimliği iletmeye benzer. Her iki durumda da kimlik, tek bir kullanıcıyı temsil eder ancak profil kimliği, tek bir kullanıcıyı, tek bir uygulamada bulunan birden çok profili genelinde benzersiz bir şekilde tanımlamanıza olanak tanır. Google Play'e karartılmış bir profil kimliği gönderdikten sonra, bu kimliği daha sonra bir satın alma makbuzundan alabilirsiniz.

Karartılmış bir profil kimliği iletmek için SetObfuscatedProfileId() yöntemini çağırarak modülünüzün yapılandırmasını değiştirmek üzere IAP oluşturucunuzu kullanın:

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

// Pass an obfuscated profile ID.
_playStoreExtensions.SetObfuscatedProfileId(obfuscatedProfileId);

Abonelikler için fiyat değişikliklerini onaylayın

Google Play, etkin bir aboneliğin fiyatını değiştirmenize izin verir. Değişikliklerin geçerli olabilmesi için önce oyununuzun kullanıcılarının fiyat değişikliklerini onaylaması gerekir. Kullanıcılardan aboneliklerinin fiyat değişikliğini onaylamalarını istemek için ConfirmSubscriptionPriceChange() yöntemini çağırın:

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

Unity API davranışında yapılan değişiklikler

Google Play Faturalandırma eklentisini kullanırken API'lerin çoğu, Unity'nin diğer uygulama mağazaları için standart IAP uygulamasıyla aynı şekilde davranır. Bununla birlikte, API'lerin farklı davrandığı bazı durumlar da vardır. Bu bölümde bu davranış farklılıkları açıklanmaktadır.

Geliştirici yükü desteklenmiyor

Google Play geliştirici yükünü kullanımdan kaldırıyor ve bunun yerine daha anlamlı ve bağlamsal alternatifler getiriyor. Bu nedenle, geliştirici yükü desteklenmez. Alternatifler hakkında daha fazla bilgi için Geliştirici yükü hakkındaki sayfaya bakın.

IStoreController dahil olmak üzere diğer uygulama mağazaları için Unity'nin standart IAP uygulaması tarafından tanımlanan arayüzleri kullanmaya devam edebilirsiniz. Bir satın alma işlemi başlattığınızda IStoreController kullanmaya devam edebilir ve InitiatePurchase() yöntemini çağırabilirsiniz:

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

Ancak gönderdiğiniz hiçbir yük geçerli olmaz (son makbuzda görünmez).

SubscriptionManager desteklenmiyor

Unity IAP, abonelikleri yönetmek için SubscriptionManager sınıfını sunar. Unity'nin bu sınıfın standart IAP uygulamasında geliştirici yükü kullanıldığı için bu sınıf desteklenmez. Bu sınıfı yine de oluşturabilirsiniz, ancak sınıfın alıcı yöntemlerinden herhangi birini kullanırken güvenilir olmayan veriler alabilirsiniz.

UpdateSubscription'da küçük API değişiklikleri var

Google Play Faturalandırma eklentisi, aboneliklerinizi yükseltmek veya düşürmek için SubscriptionManager.UpdateSubscription() ve SubscriptionManager.UpdateSubscriptionInGooglePlayStore() yöntemlerini kullanmayı desteklemez. Oyununuz bu yöntemleri çağırırsa bir GooglePlayStoreUnsupportedException atılır.

Google Play Faturalandırma Kitaplığı, bu yöntemlerin yerine kullanılabilecek alternatif bir API sağlar. Bir aboneliği yükseltmek veya düşürmek için bölüştürme modunu kullanarak UpdateSubscription() yöntemini çağırın:

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

GooglePlayStoreUnsupportedException yakalandığında, bu yöntem çağrısını bir platform kontrolüyle veya bir reCAPTCHA bloğunda sarmalayabilirsiniz.

Bölüştürme modunun nasıl kullanılacağı hakkında daha fazla bilgi ve örnek için Orantılı paylaşım modunu ayarlama bölümüne bakın.