İçeriğe Atla
Mustafa Erbay
Teknoloji · 8 dk okuma · görüntülenme Read in English

Mobil Uygulama Boyutu Optimizasyonu vs. Push Notification…

Mobil uygulama boyutu ile push notification güvenilirliği arasındaki dengeyi kurmak. Hangi optimizasyonlar gerçekten değer katıyor?

100%

Bir mobil uygulama geliştirdiğimde, akla ilk gelen soru genellikle “Bu uygulama ne kadar yer kaplayacak?” oluyor. Kullanıcıların cihazlarında sınırlı depolama alanı olduğunu biliyoruz ve büyük uygulamalar genellikle ilk indirme engelini oluşturuyor. Ancak, uygulamanın boyutuyla oynamaya başladığınızda, farkında olmadan başka kritik bir metriği, yani push notification güvenilirliğini de etkileyebiliyorsunuz. Bu yazıda, bu iki önemli faktör arasındaki ince dengeyi nasıl kurduğumu, hangi trade-off’ları yaşadığımı ve nihayetinde hangi kararları aldığımı anlatacağım.

Uygulama Boyutu Neden Önemli?

Mobil uygulama boyutu, kullanıcı edinimi ve elde tutma oranları üzerinde doğrudan bir etkiye sahip. Özellikle gelişmekte olan pazarlarda, sınırlı mobil veri paketleri ve depolama alanına sahip kullanıcılar için bu durum daha da kritik hale geliyor. Büyük bir uygulama, indirme sırasında kullanıcıyı caydırabilir veya güncellemeler sırasında veri kullanımını artırarak olumsuz bir deneyim yaratabilir. Geçmişte, bir projede uygulamanın ilk indirme boyutunu belirgin oranda azalttığımızda indirme oranlarında gözle görülür bir artış elde etmiştik. Bu, küçük görünen optimizasyonların bile kullanıcı davranışını ne kadar etkileyebileceğinin somut bir örneğiydi.

Bu optimizasyonları yaparken, genellikle kod küçültme (code shrinking), kaynakları sıkıştırma (resource compression) ve gereksiz kod veya kütüphaneleri kaldırma gibi yöntemlere başvururum. Örneğin, Android’de ProGuard veya R8 kullanarak kodumu küçültüp optimize edebiliyorum. Swift ve Objective-C projelerinde ise LLVM’in optimizasyon seviyelerini dikkatli bir şekilde ayarlayarak benzer sonuçlar elde edebiliyorum. Görseller için WebP gibi daha verimli formatlar kullanmak veya farklı ekran yoğunlukları için optimize edilmiş drawable/mipmap kaynakları sunmak da boyut azaltmada etkili yöntemler arasında.

Push Notification Güvenilirliği Neden Kritik?

Push notification’lar, kullanıcılarla doğrudan iletişim kurmanın, onları uygulamaya geri döndürmenin ve etkileşimi artırmanın en etkili yollarından biri. Bir bildirim zamanında ve doğru şekilde ulaşmadığında, bu bir kullanıcı kaybı, kaçırılmış bir fırsat veya hatta kullanıcı memnuniyetsizliği anlamına gelebilir. Özellikle e-ticaret, haber veya mesajlaşma uygulamalarında, bildirimlerin güvenilirliği uygulamanın temel işlevselliği kadar önemlidir. Bir keresinde, bir üretim ERP’si projesinde operatörlere gönderilen anlık uyarı bildirimlerinin gecikmesi veya hiç ulaşmaması nedeniyle üretimde ciddi aksaklıklar yaşanmıştı. Bu durum, bildirim sisteminin ne kadar kritik olduğunu bana bir kez daha göstermişti.

Push notification’ların güvenilirliğini sağlamak için platform servislerine (Firebase Cloud Messaging - FCM, Apple Push Notification Service - APNS) doğru şekilde entegre olmak, sunucu tarafında bildirimleri hızlı bir şekilde işleyip gönderebilmek ve cihaz tarafında bildirimi doğru şekilde alıp gösterebilmek gerekir. Ayrıca, cihazın durumu (ağ bağlantısı, pil seviyesi vb.) göz önünde bulundurularak bildirim stratejileri belirlenmelidir. Örneğin, kritik uyarılar için farklı kanallar veya mekanizmalar düşünülebilir.

Optimizasyon Yöntemleri ve Etkileri

Uygulama boyutunu küçültmek için kullandığım bazı yöntemler, bildirim sistemlerini dolaylı olarak etkileyebilir. Örneğin, bazı kütüphaneleri uygulamadan çıkarmak veya kod tabanını basitleştirmek, bildirim gönderme veya alma mantığını içeren modüllerin de kaldırılmasına veya değiştirilmesine neden olabilir. Bir örnek vermek gerekirse, bir projede büyük bir analytics kütüphanesini kaldırdıktan sonra, arka planda çalışan bildirim servislerinin de bu kütüphaneye bağımlı olması nedeniyle yeniden yapılandırılması gerekmişti. Bu durum, karmaşık bağımlılıkları olan projelerde daha sık rastlanan bir senaryo.

# Kod küçültme ve optimizasyon için Android'de kullanılan R8 konfigürasyon örneği
# Bu, gereksiz kodları kaldırır ve kodu daha verimli hale getirir.
# Ancak yanlış yapılandırılırsa kritik servisleri de etkileyebilir.

-keepattributes *Annotation*,EnclosingMethod,Signature,Exceptions,InnerClasses
-keep class com.example.myapp.** { *; }
-keep class com.google.firebase.messaging.** { *; } # FCM ile ilgili sınıfları koru

# Bazı kütüphanelerin reflection ile erişilen kısımlarını korumak gerekebilir
-keepclassmembers class * {
    @android.webkit.JavascriptInterface <methods>;
}

Bu tür optimizasyonlar yapılırken, “tree shaking” (kullanılmayan kodun atılması) gibi teknikler, uygulamanın toplam boyutunu azaltırken, eğer yanlış kullanılırsa, bildirim servisiyle ilgili gerekli kod parçacıklarının da atılmasına yol açabilir. Bu nedenle, bildirimlerle ilgili sınıfların ve metotların keep kurallarıyla R8 veya ProGuard konfigürasyonlarında korunması hayati önem taşır. Aksi takdirde, uygulamanız küçülür ama bildirimleriniz çalışmaz hale gelir.

Push Notification Servislerinin Detayları

Push notification servisleri (FCM, APNS) genellikle bir istemci (uygulama) ve bir sunucu arasındaki iletişimi yönetir. Uygulama boyutu optimizasyonu sırasında bu servislerle etkileşimde bulunan kodları gözden kaçırmak, ciddi sorunlara yol açabilir. Örneğin, bir uygulamada kullandığım yerel bir bildirim yönetimi kütüphanesini, daha hafif bir alternatifle değiştirdiğimde, eski kütüphanenin sağladığı bazı gelişmiş özelliklerin (örneğin, belirli durumlarda bildirimleri otomatik olarak gruplama) kaybolduğunu gördüm. Bu, uygulamanın boyutunu küçültse de kullanıcı deneyimini olumsuz etkileyebilecek bir trade-off idi.

Bu servisler genellikle cihazın arka plan çalışma süreleri ve ağ bağlantısı üzerinden çalışır. Uygulama boyutu optimizasyonunda, arka plan servislerinin çalışmasını kısıtlayan veya gereksiz yere kaynak tüketen kodları temizlemeye çalışırız. Ancak, push notification servislerinin de arka planda belirli bir düzeyde çalışmaya devam etmesi gerekir. Eğer uygulamanın genel “agresif” pil optimizasyonu, bu servislerin çalışmasını engellerse, bildirimler gecikebilir veya hiç gelmeyebilir. Bu dengeyi kurmak, gerçekten tecrübe gerektiren bir durum.

Gerçek Senaryolar ve Trade-off’lar

Bir e-ticaret uygulaması üzerinde çalışırken, indirme boyutunu 10 MB civarında tutmak hedefleniyordu. Bu amaçla, başlangıçta dahil edilen birçok özelliği ve kütüphaneyi kaldırdık. Ancak, bu optimizasyonlar sırasında, uygulamanın arka planında çalışan ve kullanıcıya özel kampanyalar hakkında anlık bildirimler gönderen servisin de etkilenmemesi gerekiyordu. İlk denemelerde, bazı bildirimlerin kullanıcılara ulaşmadığını veya çok geç ulaştığını fark ettik.

Sorunun kaynağını araştırdığımda, boyutu küçültmek adına uygulamanın arka plan işlem süresini kısıtlayan ve gereksiz görünen bazı servisleri devre dışı bırakan bir optimizasyonun, aslında bildirim servisi için de kritik olan bazı zamanlayıcıları (timers) etkilediğini gördüm. Bu, tam anlamıyla bir trade-off idi: Uygulama boyutunu küçültürken, bildirim güvenilirliğinden ödün veriyorduk.

Bu durumu çözmek için, bildirim servisiyle ilgili kodları ve bağımlılıklarını özel olarak işaretleyerek R8’in onları kaldırmasını engelledim. Ayrıca, arka plan işlem sürelerini kısıtlarken, bildirim servislerinin çalışma önceliğini artıracak bazı platforma özgü ayarlamalar yaptım. Bu, uygulamanın boyutunu hedeflediğimiz seviyenin biraz üzerine çıkarsa da, bildirim güvenilirliğini istediğimiz yüksek seviyeye geri çekmeyi başardık. Nihayetinde, kullanıcıların kritik bilgilere zamanında ulaşabilmesi, birkaç MB’lık bir boyut farkından daha önemliydi.

Hangi Dengeyi Kurmalı?

Peki, sonuç olarak hangisi daha önemli? Mobil uygulama boyutu mu, yoksa push notification güvenilirliği mi? Bu sorunun cevabı, uygulamanın türüne ve hedef kitlesine göre değişir. Ancak benim deneyimimde, çoğu durumda push notification güvenilirliği, uygulama boyutundan daha kritik bir faktördür. Bir uygulamanın boyutu birkaç MB daha fazla olabilir, ancak kullanıcıların önemli bilgilere ulaşmasını engellemesi kabul edilemez.

Bu nedenle, optimizasyon yaparken her zaman şu adımları izlerim:

  1. Önceliklendirme: Uygulamanın en kritik özelliklerini ve kullanıcı deneyimi bileşenlerini belirleyin. Push notification’lar bu listede üst sıralarda olmalı.
  2. Kapsamlı Analiz: Boyut optimizasyonu yapmadan önce, uygulamanın hangi kısımlarının en çok yer kapladığını analiz edin.
  3. Dikkatli Optimizasyon: Kod küçültme, kaynak sıkıştırma gibi yöntemleri kullanırken, kritik servislerin (bildirimler, arka plan senkronizasyonu vb.) etkilenebileceği potansiyel alanları belirleyin.
  4. Test ve Doğrulama: Optimizasyon sonrası, uygulamanın hem boyutunu hem de tüm kritik fonksiyonlarının (özellikle bildirimlerin) çalıştığından emin olmak için kapsamlı testler yapın.
  5. Trade-off Yönetimi: Eğer boyut azaltma, güvenilirlikten ödün vermeyi gerektiriyorsa, bu trade-off’u bilinçli yapın ve kullanıcı deneyimi üzerindeki etkisini minimize etmeye çalışın.

Unutmamak gerekir ki, kullanıcılar akıllı cihazlarında sadece bir uygulama çalıştırmıyorlar; sizin uygulamanızla bir deneyim yaşıyorlar. Bu deneyimin her aşaması, en küçük optimizasyon adımı bile, bu bütünün bir parçasıdır.

Paylaş:

Bu yazı faydalı oldu mu?

Yükleniyor...

Bu yazı nasıldı?

Sıkça Sorulanlar

Bu makale ile ilgili okurların sorduğu yaygın sorular.

Uygulama boyutunu azaltmaya başlarken hangi adımları izlemeliyim?
Ben önce proje içinde en büyük dosyaları tespit etmek için bir "bundle analyzer" çalıştırırım; bu, hangi assetlerin ve kütüphanelerin en çok yer kapladığını net gösterir. Sonra, gereksiz third‑party paketleri çıkartır, aynı işlevi gören daha hafif alternatifleri araştırırım. Görselleri WebP ya da AVIF formatına dönüştürür, çözünürlüklerini cihaz tipine göre dinamik olarak ölçeklendiririm. Kod tarafında, tree‑shaking ve lazy‑loading tekniklerini kullanarak sadece ihtiyaç duyulan modüllerin paketlenmesini sağlarım. Son adımda, native modülleri mümkün olduğunca platform‑spesifik tutup, ortak kodu paylaşarak APK/IPA boyutunu belirgin oranda düşürmeyi hedeflerim.
Asset sıkıştırması ile kütüphane kaldırma arasında tercih yaparken neyi göz önünde bulundurmalıyım?
Ben karar verirken iki faktöre odaklanırım: kullanıcı deneyimi ve geliştirme maliyeti. Asset sıkıştırması (örneğin, resimleri WebP’ye dönüştürmek) hemen her cihazda fayda sağlar ve performansı artırır; ancak bu işlem sonrası kalite kaybı kontrol edilmezse UI bozulabilir. Kütüphane kaldırma ise paket boyutunu büyük oranda azaltır, fakat fonksiyonellik kaybına yol açabilir ve yeni bir çözüm geliştirmek zaman alır. Projemde, öncelikle kritik UI assetlerini sıkıştırıp, ardından yalnızca nadiren kullanılan büyük kütüphaneleri daha hafif alternatiflerle değiştirerek dengeli bir trade‑off sağladım.
Push notification güvenilirliğini bozduğumda sorunu nasıl tespit edip çözerim?
Ben ilk olarak Firebase/OneSignal gibi servislerin sağladığı delivery raporlarını incelerim; %delivery düşüşü belirli bir cihaz grubu ya da OS versiyonunda mı gerçekleşiyor bakarım. Ardından, uygulama içinde notification kanallarının doğru tanımlandığını ve izinlerin (permission) alındığını loglayarak test ederim. Sorun asset boyutundan kaynaklanıyorsa, payload’u 4 KB altında tutmak gerekir; bu sınırı aştığımda mesajlar sessizce düşer. Eğer kodda bir hata varsa, background handler’ın çöküp çökmediğini Crashlytics ile izlerim. Çözüm genellikle payload küçültmek, kanal ayarlarını güncellemek ve gerekli izinleri yeniden istemek olur.
Uygulama boyutu küçültülürken push notification teslimat oranı düşer diye bir mit var; bu doğru mu?
Ben bu miti testlerle çürüttüm. Uygulama boyutunu belirgin oranda azalttığım bir projede, push notification payload’u aynı kalıyordu ve delivery oranı neredeyse hiç değişmedi; aradaki fark istatistiksel olarak önemsizdi. Gerçek etkileyen faktör, notification mesajının kendisi (payload büyüklüğü, format) ve cihaz izinleridir, uygulama paketi büyüklüğü değil. Ancak, aşırı asset sıkıştırmasıyla uygulama içinde gerekli native modüller eksik kalırsa, background service’lar çalışmayabilir ve bu dolaylı yoldan teslimatı etkileyebilir. Yani, boyut küçültmek doğrudan risk oluşturmaz; dikkat edilmesi gereken nokta fonksiyonel bütünlüğü korumak.
ME

Mustafa Erbay

Sistem Mimarisi · Network Uzmanı · Altyapı, Güvenlik ve Yazılım

2006'dan bu yana sistem mimarisi, network, sunucu altyapıları, büyük yapıların kurulumu, yazılım ve sistem güvenliği ekseninde çalışıyorum. Bu blogda sahada karşılığı olan teknik deneyimlerimi paylaşıyorum.

Kişisel Notlar

Bu notlar sadece sizde saklanır. Tarayıcınızda yerel olarak tutulur.

Hazır 0 karakter

Yorumlar

Sunucu Taraflı AI Moderasyon

Yorumlar sunucuda yapay zeka ile denetlenir ve kalıcı olarak saklanır.

?
0/2000

Sunucu taraflı AI denetim

✉️ Ücretsiz · Spam yok · İstediğin an çık

Yeni yazılardan haberdar olun

Yeni içerikler ve teknik notlar e-postanıza gelsin.

  • 📌
    Haftanın en iyisi Sadece okumaya değer tek yazı
  • 🔧
    Alet çantası Bu hafta kullandığım araçlar
  • 🧠
    Perde arkası Blog'a girmeyen notlar

Spam yapmıyoruz. İstediğiniz zaman ayrılabilirsiniz. · Sadece Umami (self-hosted, Google yok) ile takip.

Okuma İstatistikleriniz

0

Yazı Okundu

0dk

Okuma Süresi

0

Gün Serisi

-

Favori Kategori

İlgili Yazılar