Unity SDK'da onboarding olaylarını yönetme
Başlamadan önce şunları kontrol edin:
- Adapty Unity SDK 3.14.0 veya daha yeni bir sürüm kurulu olmalı.
- Bir onboarding oluşturmuş olmalısınız.
- Onboarding’i bir placement’a eklemiş olmalısınız.
Builder ile yapılandırılan onboarding’ler, uygulamanızın yanıt verebileceği olaylar üretir. Bu olaylara nasıl yanıt vereceğinizi aşağıda öğrenebilirsiniz.
Unity uygulamanızda onboarding ekranında gerçekleşen süreçleri kontrol etmek veya izlemek için AdaptyOnboardingsEventsListener arayüzünü uygulayın.
Özel eylemler
Builder’da bir butona custom (özel) eylem ekleyip bir ID atayabilirsiniz.
Bu ID’yi kodunuzda kullanarak özel bir eylem olarak işleyebilirsiniz. Örneğin, kullanıcı Login veya Allow notifications gibi özel bir butona dokunduğunda, OnboardingViewOnCustomAction metodu actionId parametresiyle tetiklenir; bu parametre builder’daki Action ID değerine karşılık gelir. “allowNotifications” gibi kendi ID’lerinizi oluşturabilirsiniz.
Onboarding olaylarını yönetmek için AdaptyOnboardingsEventsListener arayüzünü uygulayın:
public class OnboardingManager : MonoBehaviour, AdaptyOnboardingsEventsListener
{
void Start()
{
Adapty.SetOnboardingsEventsListener(this);
}
public void OnboardingViewOnCustomAction(
AdaptyUIOnboardingView view,
AdaptyUIOnboardingMeta meta,
string actionId
)
{
if (actionId == "allowNotifications") {
// request notification permissions
}
}
public void OnboardingViewDidFailWithError(
AdaptyUIOnboardingView view,
AdaptyError error
)
{
// handle errors
}
// Implement other required interface methods (see examples below)
}
Olay örneği (Genişletmek için tıklayın)
{
"actionId": "allowNotifications",
"meta": {
"onboardingId": "onboarding_123",
"screenClientId": "profile_screen",
"screenIndex": 0,
"screensTotal": 3
}
}Onboarding’i kapatma
Onboarding, kullanıcı Close eylemi atanmış bir butona dokunduğunda kapanmış sayılır.
Kullanıcı onboarding’i kapattığında ne olacağını kendiniz yönetmeniz gerektiğini unutmayın. Örneğin, onboarding’in görüntülenmesini durdurmanız gerekir.
Sınıfınızda OnboardingViewOnCloseAction metodunu uygulayın:
public class OnboardingManager : MonoBehaviour, AdaptyOnboardingsEventsListener
{
public void OnboardingViewOnCloseAction(
AdaptyUIOnboardingView view,
AdaptyUIOnboardingMeta meta,
string actionId
)
{
view.Dismiss((error) => {
if (error != null) {
// handle the error
}
});
}
// ... other interface methods
}
Olay örneği (Genişletmek için tıklayın)
{
"action_id": "close_button",
"meta": {
"onboarding_id": "onboarding_123",
"screen_cid": "final_screen",
"screen_index": 3,
"total_screens": 4
}
}Paywall açma
Onboarding içinde bir paywall açmak istiyorsanız bu olayı işleyin. Onboarding kapandıktan sonra paywall açmak istiyorsanız daha basit bir yol var: OnboardingViewOnCloseAction olayını işleyip olay verilerine bağlı kalmadan doğrudan paywall açabilirsiniz.
Kullanıcı bir paywall açan butona tıkladığında, manuel olarak ayarladığınız buton eylem ID’sini alırsınız. Onboarding’lerde paywall’larla çalışmanın en sorunsuz yolu, eylem ID’sini paywall placement ID’sine eşit yapmaktır. Bu sayede OnboardingViewOnPaywallAction olayının ardından placement ID’yi kullanarak paywall’ı hemen alıp açabilirsiniz.
iOS’ta aynı anda ekranda yalnızca bir görünüm (paywall veya onboarding) gösterilebilir. Onboarding’in üzerine bir paywall sunarsanız, arka plandaki onboarding’i programatik olarak kontrol edemezsiniz. Onboarding’i kapatmaya çalışırsanız bunun yerine paywall kapanır ve onboarding görünür kalır. Bunu önlemek için paywall sunmadan önce her zaman onboarding görünümünü kapatın.
public class OnboardingManager : MonoBehaviour, AdaptyOnboardingsEventsListener
{
public void OnboardingViewOnPaywallAction(
AdaptyUIOnboardingView view,
AdaptyUIOnboardingMeta meta,
string actionId
)
{
// Dismiss onboarding before presenting paywall
view.Dismiss((dismissError) => {
if (dismissError != null) {
// handle the error
return;
}
Adapty.GetPaywall(actionId, (paywall, error) => {
if (error != null) {
// handle the error
return;
}
AdaptyUI.CreatePaywallView(paywall, (paywallView, createError) => {
if (createError != null) {
// handle the error
return;
}
paywallView.Present((presentError) => {
if (presentError != null) {
// handle the error
}
});
});
});
});
}
// ... other interface methods
}
Olay örneği (Genişletmek için tıklayın)
{
"action_id": "premium_offer_1",
"meta": {
"onboarding_id": "onboarding_123",
"screen_cid": "pricing_screen",
"screen_index": 2,
"total_screens": 4
}
}Onboarding yüklemesinin tamamlanması
Onboarding yüklemesi tamamlandığında OnboardingViewDidFinishLoading metodunu uygulayın:
public class OnboardingManager : MonoBehaviour, AdaptyOnboardingsEventsListener
{
public void OnboardingViewDidFinishLoading(
AdaptyUIOnboardingView view,
AdaptyUIOnboardingMeta meta
)
{
// handle loading completion
}
// ... other interface methods
}
Olay örneği (Genişletmek için tıklayın)
{
"meta": {
"onboarding_id": "onboarding_123",
"screen_cid": "welcome_screen",
"screen_index": 0,
"total_screens": 4
}
}Navigasyonu izleme
OnboardingViewOnAnalyticsEvent metodu, onboarding akışı sırasında çeşitli analitik olaylar gerçekleştiğinde çağrılır.
analyticsEvent nesnesi aşağıdaki türlerden biri olabilir:
| Tür | Açıklama |
|---|---|
AdaptyOnboardingsAnalyticsEventOnboardingStarted | Onboarding yüklendiğinde |
AdaptyOnboardingsAnalyticsEventScreenPresented | Herhangi bir ekran gösterildiğinde |
AdaptyOnboardingsAnalyticsEventScreenCompleted | Bir ekran tamamlandığında. İsteğe bağlı ElementId (tamamlanan öğenin tanımlayıcısı) ve isteğe bağlı Reply (kullanıcının yanıtı) içerir. Kullanıcılar ekrandan çıkmak için herhangi bir eylem gerçekleştirdiğinde tetiklenir. |
AdaptyOnboardingsAnalyticsEventSecondScreenPresented | İkinci ekran gösterildiğinde |
AdaptyOnboardingsAnalyticsEventUserEmailCollected | Kullanıcının e-postası giriş alanı aracılığıyla toplandığında tetiklenir |
AdaptyOnboardingsAnalyticsEventOnboardingCompleted | Kullanıcı final ID’li bir ekrana ulaştığında tetiklenir. Bu olaya ihtiyacınız varsa son ekrana final ID’yi atayın. |
AdaptyOnboardingsAnalyticsEventUnknown | Tanınmayan olay türleri için. Name (bilinmeyen olayın adı) ve meta (ek meta veriler) içerir |
Her olay şu alanları içeren meta bilgisini barındırır:
| Alan | Açıklama |
|---|---|
OnboardingId | Onboarding akışının benzersiz tanımlayıcısı |
ScreenClientId | Mevcut ekranın tanımlayıcısı |
ScreenIndex | Mevcut ekranın akıştaki konumu |
ScreensTotal | Akıştaki toplam ekran sayısı |
Analitik olaylarını izleme amacıyla nasıl kullanabileceğinize dair bir örnek:
public class OnboardingManager : MonoBehaviour, AdaptyOnboardingsEventsListener
{
public void OnboardingViewOnAnalyticsEvent(
AdaptyUIOnboardingView view,
AdaptyUIOnboardingMeta meta,
AdaptyOnboardingsAnalyticsEvent analyticsEvent
)
{
switch (analyticsEvent) {
case AdaptyOnboardingsAnalyticsEventOnboardingStarted:
// track onboarding start
TrackEvent("onboarding_started", meta);
break;
case AdaptyOnboardingsAnalyticsEventScreenPresented:
// track screen presentation
TrackEvent("screen_presented", meta);
break;
case AdaptyOnboardingsAnalyticsEventScreenCompleted screenCompleted:
// track screen completion with user response
TrackEvent("screen_completed", meta, screenCompleted.ElementId, screenCompleted.Reply);
break;
case AdaptyOnboardingsAnalyticsEventOnboardingCompleted:
// track successful onboarding completion
TrackEvent("onboarding_completed", meta);
break;
case AdaptyOnboardingsAnalyticsEventUnknown unknownEvent:
// handle unknown events
TrackEvent(unknownEvent.Name, meta);
break;
// handle other cases as needed
}
}
// ... other interface methods
}
TrackEvent metodu, analitik verilerini tercih ettiğiniz analitik servisine göndermek için kendiniz uygulamanız gereken bir yer tutucudur.
Olay örnekleri (Genişletmek için tıklayın)
// onboardingStarted
{
"name": "onboarding_started",
"meta": {
"onboarding_id": "onboarding_123",
"screen_cid": "welcome_screen",
"screen_index": 0,
"total_screens": 4
}
}
// screenPresented
{
"name": "screen_presented",
"meta": {
"onboarding_id": "onboarding_123",
"screen_cid": "interests_screen",
"screen_index": 2,
"total_screens": 4
}
}
// screenCompleted
{
"name": "screen_completed",
"meta": {
"onboarding_id": "onboarding_123",
"screen_cid": "profile_screen",
"screen_index": 1,
"total_screens": 4
},
"params": {
"element_id": "profile_form",
"reply": "success"
}
}
// secondScreenPresented
{
"name": "second_screen_presented",
"meta": {
"onboarding_id": "onboarding_123",
"screen_cid": "profile_screen",
"screen_index": 1,
"total_screens": 4
}
}
// userEmailCollected
{
"name": "user_email_collected",
"meta": {
"onboarding_id": "onboarding_123",
"screen_cid": "profile_screen",
"screen_index": 1,
"total_screens": 4
}
}
// onboardingCompleted
{
"name": "onboarding_completed",
"meta": {
"onboarding_id": "onboarding_123",
"screen_cid": "final_screen",
"screen_index": 3,
"total_screens": 4
}
}