iOS SDK'da onboarding olaylarını yönetme
Başlamadan önce şunlara sahip olduğunuzdan emin olun:
- Adapty iOS SDK 3.8.0 veya daha yenisi yüklü olmalıdır.
- 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 tepki verebileceği olaylar üretir. Bu olaylara nasıl tepki vereceğinizi aşağıda öğrenin.
Mobil uygulamanızdaki onboarding ekranında gerçekleşen süreçleri kontrol etmek veya izlemek için AdaptyOnboardingControllerDelegate metodlarını uygulayın.
Özel eylemler
Builder’da bir düğmeye özel bir eylem ekleyip bu eyleme bir ID atayabilirsiniz.
Bu ID’yi kodunuzda kullanarak özel bir eylem olarak işleyebilirsiniz. Örneğin, bir kullanıcı Login veya Allow notifications gibi özel bir düğmeye dokunduğunda, delegate metodu onboardingController, .custom(id:) durumuyla tetiklenir ve actionId parametresi builder’daki Action ID’dir. “allowNotifications” gibi kendi ID’lerinizi oluşturabilirsiniz.
func onboardingController(_ controller: AdaptyOnboardingController, onCustomAction action: AdaptyOnboardingsCustomAction) {
if action.actionId == "allowNotifications" {
// Request notification permissions
}
}
func onboardingController(_ controller: AdaptyOnboardingController, didFailWithError error: AdaptyUIError) {
// Handle errors
}
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
Bir kullanıcı Close eylemi atanmış bir düğmeye dokunduğunda onboarding kapatılmış sayılır.
Kullanıcı onboarding’i kapattığında ne olacağını siz yönetmeniz gerektiğini unutmayın. Örneğin, onboarding’in kendisini görüntülemeyi durdurmanız gerekir.
Örneğin:
func onboardingController(_ controller: AdaptyOnboardingController, onCloseAction action: AdaptyOnboardingsCloseAction) {
controller.dismiss(animated: true)
}
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 paywall açmak istiyorsanız bu olayı işleyin. Paywall’u onboarding kapandıktan sonra açmak istiyorsanız daha kolay bir yol var — AdaptyOnboardingsCloseAction’ı işleyip olay verisine bağlı kalmadan paywall’u açabilirsiniz.
Bir kullanıcı paywall açan bir düğmeye tıkladığında, manuel olarak ayarladığınız düğme eylem ID’sini alırsınız. Onboarding’lerde paywall’larla çalışmanın en sorunsuz yolu, eylem ID’sini bir paywall placement ID’sine eşit yapmaktır. Bu sayede AdaptyOnboardingsOpenPaywallAction sonrasında placement ID’yi kullanarak paywall’u hemen alıp açabilirsiniz.
Ekranda aynı anda yalnızca bir görünümün (paywall veya onboarding) görüntülenebileceğ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’u kapatır ve onboarding görünür kalır. Bunu önlemek için paywall’u sunmadan önce her zaman onboarding görünümünü kapatın.
func onboardingController(_ controller: AdaptyOnboardingController, onPaywallAction action: AdaptyOnboardingsOpenPaywallAction) {
// Dismiss onboarding before presenting paywall
controller.dismiss(animated: true) {
Task {
do {
// Get the paywall using the placement ID from the action
let paywall = try await Adapty.getPaywall(placementId: action.actionId)
// Get the paywall configuration
let paywallConfig = try await AdaptyUI.getPaywallConfiguration(
forPaywall: paywall
)
// Create and present the paywall controller
let paywallController = try AdaptyUI.paywallController(
with: paywallConfig,
delegate: self
)
// Present the paywall from the root view controller
if let rootVC = UIApplication.shared.windows.first?.rootViewController {
rootVC.present(paywallController, animated: true)
}
} catch {
// Handle any errors that occur during paywall loading
print("Failed to present paywall: \(error)")
}
}
}
}
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üklemesini tamamlama
Bir onboarding yüklemeyi tamamladığında bu metod çağrılır:
func onboardingController(_ controller: AdaptyOnboardingController, didFinishLoading action: OnboardingsDidFinishLoadingAction) {
// Handle loading completion
}
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
onAnalyticsEvent metodu, onboarding akışı sırasında çeşitli analitik olaylar gerçekleştiğinde çağrılır.
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ıdan gelen 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 metadata) içerir |
Her olay şu alanları içeren meta bilgisi 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 | Akıştaki mevcut ekranın konumu |
screensTotal | Akıştaki toplam ekran sayısı |
Analitik olayları izleme amacıyla nasıl kullanabileceğinize dair bir örnek:
func onboardingController(_ controller: AdaptyOnboardingController, onAnalyticsEvent event: AdaptyOnboardingsAnalyticsEvent) {
switch event {
case .onboardingStarted(let meta):
// Track onboarding start
trackEvent("onboarding_started", meta: meta)
case .screenPresented(let meta):
// Track screen presentation
trackEvent("screen_presented", meta: meta)
case .screenCompleted(let meta, let elementId, let reply):
// Track screen completion with user response
trackEvent("screen_completed", meta: meta, elementId: elementId, reply: reply)
case .onboardingCompleted(let meta):
// Track successful onboarding completion
trackEvent("onboarding_completed", meta: meta)
case .unknown(let meta, let name):
// Handle unknown events
trackEvent(name, meta: meta)
// Handle other cases as needed
}
}
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
}
}