App Store yorumları geri bildirim olarak yetmiyor. Kullanıcı aktif geri bildirim vermiyor. Sorun yaşayınca sessizce uninstall ediyor. 12 iOS uygulamamda bu pattern’i kırdığım yolları paylaşacağım.
In-app feedback toplama için 3 farklı yaklaşım uygulamışım. Her biri farklı moment’te, farklı kullanıcıyı yakalıyor.
Yaklaşım 1: Passive feedback button
Ayarlar sayfasında “Geri Bildirim Gönder” butonu. Kullanıcı proaktif olarak tıklıyor.
Implementation:
– Settings view’da button
– Tıklama → sheet açılıyor
– Form: mesaj textfield + screenshot opsiyonu + submit
– Backend’e gidiyor, email’e forward oluyor
Pros:
– Rahatsız etmiyor
– Gerçekten sorun yaşayan kullanıcı buluyor
– Quality feedback (kullanıcı zaman ayırıp yazıyor)
Cons:
– %0.5 kullanıcı tıklıyor
– Hidden, görmeyen kullanıcı var
– Sadece en motive olanı yakalıyor
Bu yaklaşımı her app’te başlangıç default’u olarak koyuyorum. Minimum effort, baseline feedback channel.
Yaklaşım 2: Event-triggered inline prompts
Kullanıcı belirli bir action yaptıktan sonra kısa bir prompt. “Bu işlem nasıl gitti?”
Örnek scenario:
– Kullanıcı 3. defa brushing session’ı tamamladı
– Dentii’de subtle bir banner çıkıyor: “Dentii’yi nasıl buluyorsun?”
– Thumbs up / thumbs down butonu
– Thumbs down’a basarsa detaylı form açılıyor
– Thumbs up’a basarsa App Store rating prompt çıkıyor
Implementation:
if user.completed_brushing_count == 3 && !user.has_been_prompted {
showFeedbackPrompt()
user.has_been_prompted = true
}Pros:
– Yüksek response rate (%20-30)
– Positive user’ları App Store’a yönlendirme fırsatı
– Negative user’ları detaylı form’a çağırma
Cons:
– Yanlış moment’te rahatsız edebilir
– Çok sık kullanılırsa fatigue
– Implementation complexity
En iyi uygulama: onboarding sonrası ve major milestone’dan sonra. Günde 1 prompt’u geçmesin.
Yaklaşım 3: Shake-to-report
iPhone’u sallayınca feedback form açılıyor. Power user’lar için.
Implementation:
override func motionEnded(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
if motion == .motionShake {
presentFeedbackForm()
}
}Pros:
– Invisible ama güçlü
– Developer gibi davranan power user’lar kullanıyor
– Her ekrandan çağrılabiliyor
Cons:
– Çoğu kullanıcı bilmiyor
– Onboarding’de öğretmek lazım (“Feedback için sallayın”)
– Accidental shake (araba, metro)
Sadece beta test’te değerli. Public release’de çok kullanılmıyor.
Feedback form tasarımı
Form UX’i kritik. Uzun form = %10 completion. Kısa form = %60.
Benim form şeması:
- Rating (opsiyonel): 1-5 star veya thumbs up/down
- Category seçimi: Bug report / Feature request / General comment
- Mesaj textfield: Zorunlu ama placeholder’la “örneğin, şu ekranda şu hatayı aldım” ile yol göster
- Screenshot attach: Opsiyonel ama default olarak şu anki ekran attach oluyor
- Email (opsiyonel): Cevap istiyorsan
- Submit button
Oto-eklenen context (kullanıcıya görünmeyen):
– User ID (anonymized)
– App version, build number
– iOS version, device model
– Last 10 user action’ları (ne yaptı, hangi ekran)
– Crash log’ları (son 7 gün)
– Network status, storage left
Bu context olmadan feedback debug’ı imkansız.
Backend side
Feedback’i nereye göndereceksin?
Option A: Email. Basit başlangıç. Custom destination email. Form submit → your@email.com.
Option B: Custom dashboard. Feedback’leri kendi backend’inde topla, admin panel’de yönet. Kategorize, status (new/in-progress/done), prioritize.
Option C: Third-party. Instabug, Shake.io, Firebase Feedback gibi SaaS’lar ready-made çözümler.
Benim preferans: başlangıçta Option A (email). 50+ feedback/ay olunca Option B’ye geçiyorum (custom dashboard).
Screenshot’u kim annotate edecek?
Kullanıcı feedback form’unda screenshot ekleyebilir. Ama feedback’in değeri daha yüksek eğer kullanıcı screenshot’ta annotation (ok, daire, yazı) yapabilirse.
Built-in annotation için:
– PencilKit framework (iOS 13+)
– UI overlay with draw gestures
– Export annotated image
5 dakikalık implementation. Feedback quality’yi 2x artırıyor.
Response loop
Kullanıcı feedback gönderiyor, karşılığında ne oluyor?
Kötü: Hiçbir şey. Kullanıcı tekrar feedback vermiyor.
Orta: Otomatik “Teşekkürler” email. Kullanıcı en azından mesajın gittiğini biliyor.
İyi: Developer email cevap veriyor. “Bu bug’ı inceliyoruz, bir sonraki update’te düzelteceğiz.”
En iyi: Issue çözüldüğünde takip email. “Hatırlarsan 3 hafta önce şu bug’ı rapor etmiştin, bu update’te fix oldu.”
Bu loop feedback-motivated user’ları brand advocate yapıyor.
Spam filtering
Public feedback button’u spam çekiyor. Rate limit + basic validation:
- Aynı user ID 10 dakikada max 3 feedback
- 10 karakterden kısa feedback reddediliyor
- Known spam pattern’ları filter (link’ler, promosyon)
- User ID spam history’si takibi
Bu filter’lar %95 spam’i elimine ediyor.
A/B test ile optimize
Production’da feedback completion rate’i ölç:
- Form showing: kaç kez açıldı
- Form completion: kaç kez submit edildi
- Completion rate: submit / showing
Different variants test et:
– Short form vs long form
– Required email vs optional
– 1-5 stars vs thumbs up/down
– Screenshot default on vs off
3-4 hafta A/B test sonrası optimal form’u bul.
In-app vs App Store Review
Kullanıcı feedback verirken iki yol var: in-app feedback veya App Store review. Ayırt ediyor.
In-app feedback: Private, sen görüyorsun. Sorun varsa debug edip fix ediyorsun.
App Store review: Public, herkes görüyor. Rating’i de etkiliyor.
Strategy: kullanıcıdan önce in-app feedback iste. Thumbs up ise App Store’a yönlendir (review iste). Thumbs down ise in-app form’a çek (public’ten uzakta).
Bu pattern App Store rating’i koruyor, negative feedback’i private channel’da tutuyor.
Pratik benchmark’ler
Benim uygulamalarımda:
- Feedback button (passive): %0.3-0.5 user/month
- Event-triggered prompt: %15-25 response rate
- Shake gesture: %2-4 user/month (çoğu beta tester)
Anlamlı feedback volume için event-triggered şart. Passive tek başına yetmiyor.
Sonuç
In-app feedback collection iOS app kalitesinin critical bir parçası. App Store review yetmiyor, sessiz uninstall’leri yakalamak için in-app channel lazım.
3 yaklaşımı birlikte kullan: passive button (baseline), event-triggered prompt (volume), shake gesture (power users). Form’u kısa tut, context’i otomatik ekle, response loop’u kapat.
Discipline: tüm feedback’leri weekly review et. Her birini categorize, top 10’unu product backlog’a ekle. Feedback boşa gitmesin.