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

Google Play Faturalandırma eklentisi, oyununuzda Google Play Faturalandırma Kitaplığı'nın tüm özelliklerini sağlamak için Unity'nin uygulama içi satın alma işlemleri için Unity IAP 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, Google Play Faturalandırma Kitaplığı özelliklerini Unity'deki oyununuza nasıl uygulayacağınız da açıklanmaktadır.

Google Play Faturalandırma eklentisini ayarlama

Eklentiyi kurmak için bu 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 kurulmuştur. 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. Aşağıdaki Unity eğiticisindeki tüm adımları tamamlayın: Unity Hizmetleri için projenizi ayarlama.
  2. Aşağıdaki Unity eğiticisindeki tüm adımları tamamlayın: Unity IAP hizmetini etkinleştirin.

Eklentiyi indirin ve içe aktarın

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

  1. Unity için Google Play Eklentilerinin son sürümünü, deponun GitHub'daki sürümler sayfasından indirin.
  2. Unity menü çubuğundan Öğ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'deki eski ve çakışan bağımlılıklar derlemeden kaldırılmadığı sürece Unity çakışmalarla karşılaşacak ve bir Android APK'sı 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ğunda 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. Bu düğmeyi tıklayarak orijinal, çakışan dosyaları geri yükleyebilirsiniz.

Eklentiyi etkinleştir

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 geçirilen 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ı Purchaser Script'i kullanıyorsa Unity'nin diğer platformlar için 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 dışındaki 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());
}

Oyununuza Google Play Faturalandırma Kitaplığı özelliklerini 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ığı ile Unity'nin diğer uygulama mağazaları için standart UİSA 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 kullanmaya yeni 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ığı'nda da Google Play Store'a özgü bazı özellikler bulunur. 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çıklanmıştır.

Ertelenen satın alma işlemlerini etkinleştir

Google Play, ertelenmiş satın alma işlemlerini (beklemede olan işlemler veya bekleyen satın alma işlemleri olarak da bilinir) destekler. Kullanıcılar, bu satın alma işlemlerini mağazalarda nakit kullanarak daha sonra tamamlayabilir.

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ğırmasını 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 bir süre içinde aynı hesaptan satın alma işlemi yapıp yapmadığını algılama) 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, çok sayıda cihazın kısa sürede aynı hesaptan satın alma işlemi yapıp yapmadığını tespit etmek) için Google Play'e kodu karartılmış 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 fazla profilde 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şikliğini onaylaması gerekir. Kullanıcılardan aboneliklerindeki bir 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ışındaki 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 çalışır. Ancak API'lerin farklı davranacağı bazı durumlar da vardır. Bu bölümde, söz konusu davranış farklılıkları açıklanmaktadır.

Geliştirici yükü desteklenmiyor

Google Play geliştirici yükünü kullanımdan kaldırdı ve bunların 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ında 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 geçirdiğiniz herhangi bir yük geçerli olmaz (nihai 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öntemlerinin kullanılmasını desteklemez. Oyununuz bu yöntemleri çağırırsa bir GooglePlayStoreUnsupportedException atılır.

Google Play Faturalandırma Kitaplığı, bu yöntemlerin yerine kullanılabilen 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 yakalama bloğunda sarmalayabilirsiniz.

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