Capacitor SDK'da onboarding olaylarını yönetme
Builder ile yapılandırılan onboarding’ler, uygulamanızın yanıt verebileceği olaylar üretir. Bağımsız ekran sunumu için bu olayları yönetmek amacıyla setEventHandlers metodunu kullanın.
Başlamadan önce şunların yapıldığından emin olun:
- Bir onboarding oluşturdunuz.
- Onboarding’i bir placement’a eklediniz.
Olay işleyicilerini ayarlama
Onboarding olaylarını yönetmek için view.setEventHandlers metodunu kullanın:
try {
const view = await createOnboardingView(onboarding);
view.setEventHandlers({
onAnalytics(event, meta) {
console.log('Analytics event:', event);
},
onClose(actionId, meta) {
console.log('Onboarding closed:', actionId);
return true; // Allow the onboarding to close
},
onCustom(actionId, meta) {
console.log('Custom action:', actionId);
return false; // Don't close the onboarding
},
onPaywall(actionId, meta) {
console.log('Paywall action:', actionId);
view.dismiss().then(() => {
openPaywall(actionId);
});
},
onStateUpdated(action, meta) {
console.log('State updated:', action);
},
onFinishedLoading(meta) {
console.log('Onboarding finished loading');
},
onError(error) {
console.error('Onboarding error:', error);
},
});
await view.present();
} catch (error) {
console.error('Failed to present onboarding:', error);
}
Olay türleri
Aşağıdaki bölümler, yönetebileceğiniz farklı olay türlerini açıklamaktadır.
Özel eylemleri yönetme
Builder’da bir butona custom eylem ekleyip bu eyleme bir ID atayabilirsiniz.
Ardından bu ID’yi kodunuzda kullanarak özel eylem olarak yönetebilirsiniz. Örneğin, bir kullanıcı Login veya Allow notifications gibi özel bir butona dokunduğunda, olay işleyicisi builder’daki Action ID ile eşleşen actionId parametresiyle tetiklenir. “allowNotifications” gibi kendi ID’lerinizi oluşturabilirsiniz.
view.setEventHandlers({
onCustom(actionId, meta) {
switch (actionId) {
case 'login':
console.log('Login action triggered');
break;
case 'allow_notifications':
console.log('Allow notifications action triggered');
break;
}
return false; // Don't close the onboarding
},
});
Olay örneği (Genişletmek için tıklayın)
{
"actionId": "allow_notifications",
"meta": {
"onboardingId": "onboarding_123",
"screenClientId": "profile_screen",
"screenIndex": 0,
"screensTotal": 3
}
}Onboarding yüklemesini tamamlama
Bir onboarding yüklemesi tamamlandığında bu olay tetiklenir:
view.setEventHandlers({
onFinishedLoading(meta) {
console.log('Onboarding loaded:', meta.onboardingId);
},
});
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
}
}Onboarding’i kapatma
Bir kullanıcı Close eylemi atanmış bir butona dokunduğunda onboarding kapatılmış sayılır.
Kullanıcı onboarding’i kapattığında ne olacağını kendiniz yönetmeniz gerektiğini unutmayın. Örneğin, onboarding’in kendisini görüntülemeyi durdurmanız gerekir.
view.setEventHandlers({
onClose(actionId, meta) {
console.log('Onboarding closed:', actionId);
return true; // Allow the onboarding to close
},
});
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ı yönetin. Paywall’ı onboarding kapandıktan sonra açmak istiyorsanız daha basit bir yol var: kapat eylemini yönetin ve olay verisine dayanmadan bir paywall açın.
Bir kullanıcı paywall açan bir butona tıkladığında, manuel olarak ayarladığınız buton eylem ID’sini alırsınız. Onboarding’lerdeki paywalllarla çalışmanın en sorunsuz yolu, eylem ID’sini paywall placement ID’siyle eşit yapmaktır.
iOS’ta aynı anda yalnızca bir görünüm (paywall veya onboarding) ekranda gösterilebileceğini unutmayın. Bir onboarding’in üzerine paywall sunarsanız, arka plandaki onboarding’i programatik olarak kontrol edemezsiniz. Onboarding’i kapatmaya çalışmak bunun yerine paywall’ı kapatı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.
view.setEventHandlers({
onPaywall(actionId, meta) {
// Dismiss onboarding before presenting paywall
view.dismiss().then(() => {
openPaywall(actionId);
});
},
});
async function openPaywall(placementId: string) {
// Implement your paywall opening logic here
}
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
}
}Navigasyonu takip etme
Onboarding akışı sırasında çeşitli navigasyon olayları gerçekleştiğinde bir analytics olayı alırsınız:
view.setEventHandlers({
onAnalytics(event, meta) {
console.log('Analytics event:', event.type, meta.onboardingId);
},
});
event nesnesi aşağıdaki türlerden biri olabilir:
| Tür | Açıklama |
|---|---|
onboardingStarted | Onboarding yüklendiğinde |
screenPresented | Herhangi bir ekran gösterildiğinde |
screenCompleted | 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. |
secondScreenPresented | İkinci ekran gösterildiğinde |
userEmailCollected | Kullanıcının e-postası giriş alanı üzerinden toplandığında tetiklenir |
onboardingCompleted | Kullanıcı final ID’sine sahip bir ekrana ulaştığında tetiklenir. Bu olaya ihtiyacınız varsa, son ekrana final ID’sini atayın. |
unknown | Tanınmayan herhangi bir olay türü için. name (bilinmeyen olayın adı) ve meta (ek meta veri) içerir |
Her olay şu bilgileri içeren meta verisi sağlar:
| 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ı |
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
}
}