Unity SDK'da Flow 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 – ürünleri kullanıcılara sunan, no-code Flow Builder ile oluşturulan ekran dizileri. SDK bunları
GetFlowaracılığıyla alır. Arayüzü kendi kodunuzla oluşturmayı tercih ediyorsanız bunun yerine paywall kullanın — bkz. Paywall’ları manuel olarak uygulama. - Placement’lar – uygulamanızda flow’ları nerede ve ne zaman göstereceğiniz (
main,onboarding,settingsgibi). Flow’ları kontrol panelinde placement’lara bağlar, ardından kodunuzda placement ID’siyle talep edersiniz. Bu sayede A/B testleri çalıştırmak ve farklı kullanıcılara farklı flow’lar göstermek kolaylaşır.
Adapty, uygulamanızda satın almaları etkinleştirmek için üç yöntem sunar. Uygulama gereksinimlerinize göre birini seçin:
| Uygulama | Karmaşıklık | Ne zaman kullanılır |
|---|---|---|
| Adapty Flow Builder | ✅ Kolay | No-code builder’da eksiksiz, satın almaya hazır bir flow oluşturursunuz. Adapty bunu otomatik olarak render eder; karmaşık satın alma akışını, makbuz doğrulamasını ve abonelik yönetimini arka planda halleder. |
| Manuel olarak oluşturulan paywalllar | 🟡 Orta | Paywall arayüzünü uygulama kodunuzda siz uygularsınız, ancak ürün tekliflerinde esnekliği korumak için flow nesnesini yine de Adapty’den alırsınız. Kılavuza bakın. |
| Observer mode | 🔴 Zor | Kendi satın alma altyapınız zaten mevcuttur ve onu kullanmaya devam etmek istersiniz. Observer mode’un Adapty’de bazı kısıtlamaları olduğunu unutmayın. Makaleye bakın. |
Aşağıdaki adımlar, Adapty Flow Builder’da oluşturulan bir flow’un nasıl uygulanacağını gösterir.
Paywall arayüzünü kendiniz oluşturmayı tercih ediyorsanız, bkz. Paywalleri manuel olarak uygulama.
Adapty Flow Builder’da oluşturulan bir flow’u görüntülemek için uygulama kodunuzda yalnızca şunları yapmanız gerekir:
- Flow’u alın: Adapty’den alın.
- Görüntüleyin ve satın alma işlemlerini Adapty sizin adınıza yönetsin: Görünümü uygulamanızda gösterin.
- Buton eylemlerini yönetin: Kullanıcı etkileşimlerini uygulamanızın bu etkileşimlere verdiği yanıtlarla ilişkilendirin. Örneğin, kullanıcılar butona tıkladığında bağlantıları açın veya flow’u kapatın.
Başlamadan önce
Başlamadan önce şu adımları tamamlayın:
- Uygulamanızı Adapty Kontrol Paneli’nde App Store ve/veya Google Play’e bağlayın.
- Adapty’de ürünlerinizi oluşturun.
- Bir flow oluşturun ve ürünleri ekleyin.
- Bir placement oluşturun ve flow’unuzu ekleyin.
- Uygulama kodunuza Adapty SDK’yı kurun ve etkinleştirin.
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’u alın
Flow’larınız, kontrol panelinde yapılandırılan placement’larla ilişkilidir. Placement’lar, farklı kitleler için farklı flow’lar çalıştırmanıza veya A/B testleri yapmanıza olanak tanır.
Adapty Flow Builder’da oluşturulan bir flow’u almak için şunları yapmanız gerekir:
-
GetFlowmetodunu kullanarak placement ID’sine göreflownesnesini alın. -
CreateFlowViewmetodunu kullanarak flow view’ını oluşturun. View, flow’u görüntülemek için gereken UI öğelerini ve stil bilgilerini içerir. Flow’un yapılandırılmış bir view’ı yoksaCreateFlowViewbir hata döndürür — bunu callback içinde ele alın.
Görünümü almak için Flow Builder’da Show on device geçişini açmanız gerekir. Aksi takdirde, CreateFlowView bir hata döndürür ve flow görüntülenmez.
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
});
});
Bu hızlı başlangıç, bir flow görüntülemek için gereken minimum yapılandırmayı sağlar. Gelişmiş yapılandırma ayrıntıları için flow alma kılavuzumuza bakın.
2. Flow’u görüntüleyin
Artık flow görünümüne sahip olduğunuzda, onu görüntülemek için birkaç satır kod eklemeniz yeterlidir.
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
});
Flow’un nasıl görüntüleneceğine dair daha fazla ayrıntı için kılavuzumuza bakın.
3. Buton eylemlerini işleyin
Kullanıcılar flow içindeki 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 eylemlerin kodunuzda işlenmesi gerekir.
Örneğin, flow’unuzda muhtemelen bir kapat butonu ve açılacak URL’ler (kullanım koşulları ve gizlilik politikası gibi) bulunmaktadır. Bu eylemleri işlemek 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.
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
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 uygulamada gösterilmeye hazır. Bir test satın alma işlemini flow üzerinden tamamlayabildiğinizden emin olmak için satın almalarınızı App Store sandbox ortamında veya Google Play Store üzerinde test edin.
Şimdi, doğru kullanıcılara flow 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();
}
}