Unity SDK'da Flow & Paywall Builder ile satın almaları etkinleştirme

Bu kılavuz, Adapty Unity SDK v4 (beta) API’lerini kullanmaktadır. v3 kullanıyorsanız, karşılık gelen metot adları için geçiş kılavuzuna bakın.

Uygulama içi satın alımları etkinleştirmek için üç temel kavramı anlamanız gerekir:

  • Ürünler – kullanıcıların satın alabileceği her şey (abonelikler, consumable’lar, süresiz erişim)
  • Flow’lar ve paywall’lar – ürünleri kullanıcılara sunan ekranlar; no-code Flow & Paywall Builder ile oluşturulur. SDK bunları GetFlow aracılığıyla getirir. Kullanıcı arayüzünü kendi kodunuzla oluşturmayı tercih ederseniz bkz. Özel paywall uygulama.
  • Placement’lar – uygulamanızda flow’ları ve paywall’ları nerede ve ne zaman göstereceğiniz (main, onboarding, settings gibi). Bunları kontrol panelinde placement’lara bağlar, ardından kodunuzda placement ID’si ile talep edersiniz. Bu sayede A/B testleri çalıştırmak ve farklı kullanıcılara farklı içerikler göstermek kolaylaşır.

Adapty, uygulamanızda satın almaları etkinleştirmek için üç yöntem sunar. Uygulama gereksinimlerinize göre birini seçin:

UygulamaKarmaşıklıkNe zaman kullanılır
Adapty Flow & Paywall Builder✅ KolayNo-code builder’da eksiksiz, satın almaya hazır bir flow veya paywall oluşturursunuz. Adapty bunu otomatik olarak render eder ve tüm karmaşık satın alma mantığını, makbuz doğrulamasını ve abonelik yönetimini arka planda halleder.
Özel paywalllar🟡 OrtaPaywall arayüzünüzü uygulama kodunuzda kendiniz uygularsınız, ancak ürün tekliflerinde esnekliği korumak için flow nesnesini yine de Adapty’den alırsınız. Rehbere bakın.
Observer modu🔴 ZorKendi satın alma altyapınız zaten mevcuttur ve bunu kullanmaya devam etmek istersiniz. Observer modunun Adapty’de bazı sınırlamaları olduğunu unutmayın. Makaleye bakın.
Important

Aşağıdaki adımlar, Adapty Flow & Paywall Builder’da oluşturulan bir flow veya paywall’ın nasıl uygulanacağını göstermektedir.

Paywall arayüzünü kendiniz oluşturmayı tercih ediyorsanız, Özel paywall uygulama bölümüne bakın.

Adapty Flow & Paywall Builder’da oluşturulan bir flow veya paywall’ı uygulamanızda göstermek için yalnızca şunları yapmanız gerekir:

  1. Flow veya paywall’u alın: Adapty’den alın.
  2. Gösterin, satın almaları Adapty yönetir: View’ı uygulamanızda gösterin.
  3. Buton aksiyonlarını yönetin: Kullanıcı etkileşimlerini uygulamanızın yanıtlarıyla ilişkilendirin. Örneğin, kullanıcılar butonlara tıkladığında bağlantıları açın veya paywall’u kapatın.

Başlamadan önce

Başlamadan önce şu adımları tamamlayın:

  1. Uygulamanızı Adapty Kontrol Paneli’nde App Store ve/veya Google Play’e bağlayın.
  2. Adapty’de ürünlerinizi oluşturun.
  3. Bir flow veya paywall oluşturun ve içine ürün ekleyin.
  4. Bir placement oluşturun ve flow ya da paywall’ınızı buna ekleyin.
  5. Uygulama kodunuza Adapty SDK’yı yükleyip etkinleştirin.
Tip

Bu adımları tamamlamanın en hızlı yolu hızlı başlangıç kılavuzunu takip etmek veya Developer CLI kullanarak flow’lar ve placement’lar oluşturmaktır.

1. Flow veya paywall’ı alın

Flow’larınız ve paywall’larınız, kontrol panelinde yapılandırılan placement’larla ilişkilendirilir. Placement’lar, farklı kitleler için farklı flow’lar veya paywall’lar çalıştırmanıza ya da A/B testleri yapmanıza olanak tanır.

Adapty Flow & Paywall Builder’da oluşturulmuş bir flow veya paywall almak için şunları yapmanız gerekir:

  1. GetFlow metodunu kullanarak placement ID’sine göre flow nesnesini alın.

  2. Flow görünümünü CreateFlowView metoduyla oluşturun. Görünüm, akışı görüntülemek için gereken UI öğelerini ve stillerini içerir. Akışa ait herhangi bir görünüm yapılandırılmamışsa CreateFlowView hata döndürür — bunu callback içinde ele alın.

Important

Görünümü almak için flow veya paywall’ı yayınlayın. Yayınlanmamış değişiklikler içeren bir flow veya paywall Dirty statüsüne sahip olur ve placement’ı son yayınlanan versiyonu sunmaya devam eder.

Adapty.GetFlow("YOUR_PLACEMENT_ID", (flow, error) => {
    if (error != null) {
        // handle the error
        return;
    }

    // Create the flow view
    AdaptyUI.CreateFlowView(flow, (view, error) => {
        if (error != null) {
            // the flow has no view configured, or view creation failed
            return;
        }

        // view - the flow view ready to be presented
    });
});
Info

Bu hızlı başlangıç kılavuzu, bir flow veya paywall görüntülemek için gereken minimum yapılandırmayı sağlar. Gelişmiş yapılandırma ayrıntıları için flow ve paywall alma kılavuzumuza bakın.

2. Flow veya paywall’ı görüntüleyin

Artık flow view’ına sahip olduğunuzda, onu görüntülemek için birkaç satır kod eklemeniz yeterli.

Flow’u görüntülemek için CreateFlowView metoduyla oluşturulan view üzerinde view.Present() metodunu kullanın. Her view yalnızca bir kez kullanılabilir: kapattıktan sonra, flow’u bir kez daha görüntülemek için CreateFlowView’ı tekrar çağırın.

view.Present((error) => {
    // handle the error
});
Info

Bir flow veya paywall’ı nasıl görüntüleyeceğinize dair daha fazla ayrıntı için rehberimize bakın.

3. Buton eylemlerini yönetin

Kullanıcılar flow veya paywall’daki butonlara tıkladığında, Unity SDK satın alma ve geri yükleme işlemlerini otomatik olarak gerçekleştirir. Ancak diğer butonların özel veya önceden tanımlanmış ID’leri vardır ve bu nedenle eylemler kodunuzda ele alınmalıdır.

Örneğin, paywall’ınızda büyük ihtimalle bir kapatma butonu ve açılacak URL’ler (örneğin kullanım koşulları ve gizlilik politikası) bulunur. Bu eylemleri yönetmek için sınıfınızın IAdaptyFlowsEventsListener arayüzünü uygulaması ve bir dinleyici olarak kaydedilmesi gerekir.

Flow, başarılı bir satın alma işleminin ardından açık kalmaya devam eder. Satın alma tamamlandığında kapatmak istiyorsanız, FlowViewDidFinishPurchase callback’inde görünümü kapatın.

Tip

Buton aksiyonlarını ve olayları nasıl yöneteceğinize dair rehberlerimizi okuyun.

public class YourClass : MonoBehaviour, IAdaptyFlowsEventsListener
{
    void Start()
    {
        // Register this class as the flows events listener
        Adapty.SetFlowsEventsListener(this);
    }

    // IAdaptyFlowsEventsListener method - handles button actions
    public void FlowViewDidPerformAction(
        AdaptyUIFlowView view,
        AdaptyUIUserAction action
    ) {
        switch (action.Type) {
            case AdaptyUIUserActionType.Close:
                view.Dismiss(null);
                break;
            case AdaptyUIUserActionType.OpenUrl:
                AdaptyUI.OpenUrl(action.Value, AdaptyWebPresentation.ExternalBrowser, null);
                break;
            default:
                break;
        }
    }

    // IAdaptyFlowsEventsListener method - dismiss the flow after a purchase
    public void FlowViewDidFinishPurchase(
        AdaptyUIFlowView view,
        AdaptyPaywallProduct product,
        AdaptyPurchaseResult purchasedResult
    ) {
        if (purchasedResult.Type != AdaptyPurchaseResultType.UserCancelled) {
            view.Dismiss(null);
        }
    }
}

Sonraki adımlar

Tip

Sorularınız mı var ya da sorunlarla mı karşılaşıyorsunuz? Sık sorulan soruların yanıtlarını bulabileceğiniz veya kendi sorularınızı sorabileceğiniz destek forumumuza göz atın. Ekibimiz ve topluluğumuz yardımcı olmak için burada!

Flow’unuz veya paywallınız uygulamada görüntülenmeye hazır. Akıştan bir test satın alımını tamamlayabildiğinizden emin olmak için satın alımlarınızı App Store sandbox ortamında veya Google Play Store’da test edin.

Şimdi, doğru kullanıcılara paywall gösterdiğinizden veya ücretli özelliklere erişim verdiğinizden emin olmak için kullanıcıların access level’ını kontrol etmeniz gerekiyor.

Tam örnek

Tüm bu adımların uygulamanızda birlikte nasıl entegre edilebileceğini aşağıda görebilirsiniz.

using System;
using System.Collections.Generic;
using UnityEngine;
using AdaptySDK;

public class FlowManager : MonoBehaviour, IAdaptyFlowsEventsListener
{
    [SerializeField] private string placementId = "YOUR_PLACEMENT_ID";

    void Start()
    {
        // Register for flow events
        Adapty.SetFlowsEventsListener(this);
        GetAndDisplayFlow();
    }

    private void GetAndDisplayFlow()
    {
        Adapty.GetFlow(placementId, (flow, error) => {
            if (error != null) {
                Debug.LogError("Error getting flow: " + error.Message);
                return;
            }

            CreateAndPresentFlowView(flow);
        });
    }

    private void CreateAndPresentFlowView(AdaptyFlow flow)
    {
        AdaptyUI.CreateFlowView(flow, (view, error) => {
            if (error != null) {
                // the flow has no view configured — use custom logic
                Debug.LogError("Error creating flow view: " + error.Message);
                return;
            }

            view.Present((presentError) => {
                if (presentError != null) {
                    Debug.LogError("Error presenting flow: " + presentError.Message);
                    return;
                }

                Debug.Log("Flow presented successfully");
            });
        });
    }

    // IAdaptyFlowsEventsListener implementation
    public void FlowViewDidPerformAction(
        AdaptyUIFlowView view,
        AdaptyUIUserAction action
    ) {
        switch (action.Type) {
            case AdaptyUIUserActionType.Close:
                Debug.Log("Close button pressed");
                view.Dismiss(null);
                break;
            case AdaptyUIUserActionType.OpenUrl:
                AdaptyUI.OpenUrl(action.Value, AdaptyWebPresentation.ExternalBrowser, null);
                break;
            default:
                break;
        }
    }

    public void FlowViewDidFinishPurchase(
        AdaptyUIFlowView view,
        AdaptyPaywallProduct product,
        AdaptyPurchaseResult purchasedResult
    ) {
        if (purchasedResult.Type != AdaptyPurchaseResultType.UserCancelled) {
            view.Dismiss(null);
        }
    }

    // Required interface methods (implement as needed)
    public void FlowViewDidAppear(AdaptyUIFlowView view) { }
    public void FlowViewDidDisappear(AdaptyUIFlowView view) { }
    public void FlowViewDidSelectProduct(AdaptyUIFlowView view, string productId) { }
    public void FlowViewDidStartPurchase(AdaptyUIFlowView view, AdaptyPaywallProduct product) { }
    public void FlowViewDidFailPurchase(AdaptyUIFlowView view, AdaptyPaywallProduct product, AdaptyError error) { }
    public void FlowViewDidStartRestore(AdaptyUIFlowView view) { }
    public void FlowViewDidFinishRestore(AdaptyUIFlowView view, AdaptyProfile profile) { }
    public void FlowViewDidFailRestore(AdaptyUIFlowView view, AdaptyError error) { }
    public void FlowViewDidReceiveError(AdaptyUIFlowView view, AdaptyError error) { }
    public void FlowViewDidFailLoadingProducts(AdaptyUIFlowView view, AdaptyError error) { }
    public void FlowViewDidFinishWebPaymentNavigation(AdaptyUIFlowView view, AdaptyPaywallProduct product, AdaptyError error) { }
    public void FlowViewDidReceiveAnalyticEvent(AdaptyUIFlowView view, string name, IDictionary<string, object> @params) { }

    public void ShowFlow()
    {
        GetAndDisplayFlow();
    }
}