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

Google Play Faturalandırma eklentisi, Unity'nin uygulama içi satın alma işlemleri için yerleşik hizmetlerini ve varlıklarını (Unity IAP olarak adlandırılır) genişleterek oyununuza Google Play Faturalandırma Kitaplığı'nın en yeni özelliklerini sunar. Bu kılavuzda, projenizi eklentiyi kullanacak şekilde nasıl ayarlayacağınız açıklanmaktadır. Bu kılavuzda, Google Play Faturalandırma Kitaplığı özelliklerini Unity'de oyununuza nasıl uygulayacağınız da açıklanmaktadır.

Google Play Faturalandırma eklentisini ayarlama

Eklentiyi kurmak için bağlantısı verilen bu bölümlerin her birindeki adımları tamamlayın:

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

Unity IAP soyutlama katmanını etkinleştirme

Google Play Faturalandırma eklentisi, Unity IAP'ye dahil edilen 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. Set up your project for Unity Services (Unity Hizmetleri için projenizi ayarlama) başlıklı Unity eğitimindeki tüm adımları tamamlayın.
  2. Aşağıdaki Unity eğitimindeki tüm adımları tamamlayın: Enable the Unity IAP service (Unity uygulama içi satın alma hizmetini etkinleştirme).

Eklentiyi indirip içe aktarma

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

  1. Unity'ye özel Google Play eklentilerinin en yeni sürümünü, deponun GitHub'daki sürümler sayfasından indirin.
  2. Unity menü çubuğunda Assets > Import Package > Custom Package'ı (Öğeler > Paket İçe Aktar > Özel Paket) tıklayın.

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

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

Paketler içe aktarıldıktan sonra projenizin öğelerine GooglePlayPlugins adlı yeni bir klasör (Assets klasörünün kök dizininde) eklenir. Bu klasör, eklentiye ait tüm Google Play Faturalandırma Kitaplığı öğelerini içerir.

Derleme ayarlarını yapılandırma

Eklenti, Unity IAP'yi genişlettiğinden Unity'de çakışmalar oluşur ve Unity IAP'deki eski, çakışan bağımlılıklar derlemeden kaldırılmadığı sürece Unity, Android APK'sı oluşturamaz. Eklenti, çakışan kitaplıkları projenizden otomatik olarak kaldırmanın bir yolunu sunar. Bu çakışmaları gidermek için aşağıdaki adımları uygulayın:

  1. Unity menü çubuğunda Google > Play Billing > Build Settings'i (Google > Play Faturalandırma > Derleme Ayarları) seçin.

  2. Play Faturalandırma Derleme Ayarları penceresinde Düzelt'i tıklayın. Bu işlem, çakışmayı giderir ve çakışan Unity IAP dosyalarını bir 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 ve çakışan dosyaları geri yükleyebilirsiniz.

Eklentiyi etkinleştirin.

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 Script'i kullanırken StandardPurchaseModule yerine Google.Play.Billing.GooglePlayStoreModule kullanmak için IAP oluşturucuya iletilen StandardPurchaseModule değerini değiştirirsiniz:

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

Oyununuz birden fazla platform için aynı satın alan komut dosyasını kullanıyorsa Unity'nin diğer platformlar için kendi uygulama içi satın alma çözümünü kullanmaya devam edeceğinden emin olmak üzere 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ışında başka Android uygulama mağazalarında da yayınlıyorsanız varsayılan Unity IAP uygulamasını yalnızca Google Play Store'u seçtiğinizde 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 uygulama

Google Play Faturalandırma eklentisi, Unity IAP hizmetlerini genişletir. Böylece, yaygın satın alma iş akışlarını yönetmek için aynı Unity API'lerini kullanabilirsiniz. Google Play Faturalandırma Kitaplığı ile diğer uygulama mağazaları için Unity'nin standart uygulama içi satın alma uygulaması arasındaki farklılıklar nedeniyle API davranışında bazı küçük değişiklikler olduğunu 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ğitimindeki "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üz üzerinden 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.

Ertelenmiş satın alımları etkinleştirme

Google Play, bekleyen işlemler veya bekleyen satın alma işlemleri olarak da adlandırılan ertelenmiş satın alma işlemlerini destekler. Bu işlemler sayesinde kullanıcılar satın alma işlemi oluşturabilir ve daha sonra mağazalarda nakit kullanarak tamamlayabilir.

Ertelenmiş 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 uygulama içi satın alma 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 geri çağırması 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.
    });

Google Play'e karartılmış hesap kimlikleri iletme

Kötüye kullanımı tespit etmeyi kolaylaştırmak için karartılmış kullanıcı hesabı kimliklerini Google Play'e iletebilirsiniz. Örneğin, kısa süre içinde aynı hesaptan birçok cihazda satın alma işlemi yapılıp yapılmadığını tespit edebilirsiniz.

Karartılmış bir hesap kimliği iletmek için uzantılar API'sinden 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);

Kod karartılmış profil kimliklerini Google Play'e iletme

Dolandırıcılık tespitini kolaylaştırmak için Google Play'e karartılmış bir profil kimliği iletebilirsiniz. Örneğin, kısa bir süre içinde aynı hesaptan birçok cihazın satın alma işlemi yapıp yapmadığını tespit edebilirsiniz. Bu, karmaşıklaştırı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 uygulama içinde sahip olduğu birden fazla profilde tek bir kullanıcıyı benzersiz şekilde tanımlamanıza olanak tanır. Google Play'e karartılmış bir profil kimliği gönderdikten sonra bu kimliği daha sonra satın alma makbuzunda 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);

Abonelik fiyatlarındaki değişiklikleri onaylama

Google Play, etkin bir aboneliğin fiyatını değiştirmenize olanak tanır. Oyununuzun kullanıcıları, fiyat değişikliğinin geçerli olabilmesi için bu değişikliği onaylamalıdır. 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, diğer uygulama mağazaları için Unity'nin standart uygulama içi satın alma uygulamasında olduğu gibi çalışır. Ancak, API'lerin farklı şekilde davranacağı bazı durumlar 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ırdı ve daha anlamlı ve bağlamsal olan alternatiflerle değiştiriyor. Bu nedenle, geliştirici yükü desteklenmez. Alternatifler hakkında daha fazla bilgi için Geliştirici yükü sayfasını inceleyin.

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

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

Ancak ilettiğiniz tüm yükler geçerli olmaz (nihai makbuzda görünmez).

SubscriptionManager desteklenmiyor

Unity IAP, abonelikleri yönetmek için SubscriptionManager sınıfını sağlar. Bu sınıfın Unity'deki standart uygulama içi satın alma uygulaması geliştirici yükünü kullandığı 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 ve düşürmek için SubscriptionManager.UpdateSubscription() ve SubscriptionManager.UpdateSubscriptionInGooglePlayStore() yöntemlerinin kullanılmasını desteklemez. Oyununuz bu yöntemleri çağırırsa GooglePlayStoreUnsupportedException istisnası oluşturulur.

Google Play Faturalandırma Kitaplığı, bu yöntemlerin yerine kullanabileceğiniz alternatif bir API sağlar. Bir aboneliği yükseltmek veya alt sürüme geçirmek için UpdateSubscription() yöntemini orantılı ödeme modunu kullanarak çağırın:

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

Bu yöntem çağrısını, bir platform kontrolüyle veya GooglePlayStoreUnsupportedException yakalandığında bir catch bloğuyla sarmalayabilirsiniz.

Orantılı dağıtım modunu kullanma hakkında daha fazla bilgi ve örnek için Orantılı dağıtım modunu ayarlama başlıklı makaleyi inceleyin.