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ı
GetFlowaracı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,settingsgibi). 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:
| Uygulama | Karmaşıklık | Ne zaman kullanılır |
|---|---|---|
| Adapty Flow & Paywall Builder | ✅ Kolay | No-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 | 🟡 Orta | Paywall 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 | 🔴 Zor | Kendi 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. |
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:
- Flow veya paywall’u alın: Adapty’den alın.
- Gösterin, satın almaları Adapty yönetir: View’ı uygulamanızda gösterin.
- 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:
- Uygulamanızı Adapty Kontrol Paneli’nde App Store ve/veya Google Play’e bağlayın.
- Adapty’de ürünlerinizi oluşturun.
- Bir flow veya paywall oluşturun ve içine ürün ekleyin.
- Bir placement oluşturun ve flow ya da paywall’ınızı buna ekleyin.
- Uygulama kodunuza Adapty SDK’yı yükleyip 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 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:
-
GetFlowmetodunu kullanarak placement ID’sine göreflownesnesini alın. -
Flow görünümünü
CreateFlowViewmetoduyla 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ışsaCreateFlowViewhata döndürür — bunu callback içinde ele alın.
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
});
});
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
});
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.
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 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();
}
}