EN Versiyonu
Echo Echo Support / SRE • • 1.175 kelime • 6 dk okuma

Telefon Kapalıyken Bildirim Nasıl Gelir? Push Mimarisi

Kapalı uygulamalar şarjı tüketmeden size nasıl anında bildirim gönderiyor? Apple APNs ve Google FCM soket mimarisini ve push krizlerini keşfedin.

#push-notifications #mobile-architecture #system-design #reliability
Telefon Kapalıyken Bildirim Nasıl Gelir? Push Mimarisi

Kısa Özet (TL;DR — Doğrudan Yanıt): Telefonunuzda kapalı olan düzinelerce uygulama arka planda çalışıp interneti dinlemez. Bunun yerine işletim sisteminiz (iOS veya Android), Apple veya Google sunucularıyla tek ve son derece hafif bir ortak hat açık tutar. Bir uygulamadan mesaj geldiğinde bu merkezi sunucu telefonunuza minik bir "uyan" sinyali gönderir, telefon da ilgili uygulamayı sadece mesajı ekrana basması için bir saniyeliğine uyandırır.


Apartman Kapıcısı Benzetmesi: Neden 80 Uygulama Aynı Anda Çalışamaz?

Cebinizde muhtemelen en az 80 farklı uygulama yüklü. Eğer bu uygulamaların her biri "Bana yeni mesaj var mı?" diye arka planda kendi sunucusuna sürekli bağlanmaya çalışsaydı, telefonunuz bir saat içinde alev alır ve pili tükenirdi.

Bunu 80 daireli büyük bir apartman gibi düşünün. Her daire kendi kuryesini tutup kapıda nöbet bekletirse bina girişi felç olur. Bunun yerine apartmanın tek bir kapıcısı vardır. Bütün kargolar kapıcıya gelir; kapıcı da paketin üzerindeki daire numarasına bakar ve paketi doğru kapının önüne bırakıp zili çalar.

İşte akıllı telefonlarda da tam olarak bu yöntem kullanılır. Telefon kapalıyken veya siz başka bir işle meşgulken uygulamalarınız derin bir uykudadır; onlar adına kapıda sadece işletim sistemi nöbet tutar.


Kaputun Altı: Tek Bir Soket ve Cihaz Anahtarı (Token)

Telefonunuz internete bağlandığı an, arka planda sessiz sedasız devasa bir altyapıyla tek bir hat (sürekli açık bir TCP soket bağlantısı) kurar. Apple cihazlar doğrudan Apple Bildirim Servisi’ne (APNs - port 5223), Android cihazlar ise Google Firebase Bulut Mesajlaşma sistemine (FCM - port 5228) bağlanır.

Bu süreç üç basit adımla işler:

[Uygulama Sunucusu] 
       │ 
       ▼ (1. Bildirim Metni + Token)
[Apple APNs / Google FCM] 
       │ 
       ▼ (2. Tek Ortak Soket Bağlantısı)
[Telefon İşletim Sistemi (iOS / Android)] 
       │ 
       ▼ (3. Uyandırma ve Ekrana Basma)
[Uygulama Arayüzü / Kilit Ekranı]
  1. Adres Belirleme (Push Token): Uygulamayı ilk yüklediğinizde telefon size özel, rastgele harflerden oluşan bir kimlik (token) üretir ve bunu uygulamanın ana sunucusuna kaydeder.
  2. Merkeze Teslimat: Size bir mesaj geldiğinde uygulamanın sunucusu doğrudan telefonunuza ulaşmaz; mesajı ve token bilgisini Apple veya Google sunucularına teslim eder.
  3. Zili Çalma: Apple ya da Google, telefonunuzla zaten açık olan o tek hattan küçük bir paket gönderir. Telefon işletim sistemi paketi yakalar, kilit ekranında gösterir ve gerekirse ilgili uygulamanın simgesine küçük kırmızı bir sayaç kondurur.

Sistem tasarımındaki bu incelikleri ve kesintisiz ağ yapılarını canlı senaryolarla görmek isterseniz AI Playground üzerindeki kaynaklara göz atabilirsiniz.


Bildirim Dağıtım Yöntemleri: Hangisi Neden Tercih Edilir?

Mobil dünyada istemci ile sunucuyu haberleştirmenin birkaç yolu vardır; ancak mobil cihazların pil kısıtı çoğu popüler yöntemi eler:

Yöntem Pil Tüketimi Hız / Gecikme Arka Planda Çalışma Durumu
İşletim Sistemi Soketi (APNs/FCM) Çok Düşük (Tek kanal) Anlık (Milisaniyeler) Uygulama tamamen kapalıyken bile çalışır
Aralıklı Sorgulama (Polling) Çok Yüksek (Cihazı sürekli uyandırır) Gecikmeli (Kontrol sıklığına bağlı) Arka plan kısıtlamaları nedeniyle çoğu zaman engellenir
Uygulama Özelinde Açık Hat (WebSocket) Çok Yüksek (Her uygulama için ayrı hat) Ultra Anlık Uygulama alta alındıktan birkaç dakika sonra sistemce kapatılır

Tablodan da görebileceğiniz gibi, işletim sistemi düzeyinde paylaşılan tek bir hat kullanmak hem şarjınızı kurtarır hem de ağın gereksiz yere meşgul edilmesini önler.


Radyo Dalgaları Nasıl Uyur? RRC ve Bildirimin Anatomisi

Telefonunuzun hücresel modemi (4G/5G anteni), pili en çok sömüren donanımlardan biridir. Bu yüzden modem boşta dururken "Radyo Kaynak Kontrolü" (RRC) adı verilen bir mekanizmayla düşük güç moduna geçer.

Anteni tam güç moduna geçirmek ciddi bir elektrik harcar. Apple ve Google'ın bu kadar katı olmasının nedeni budur: Gönderilen bildirim paketi genellikle birkaç yüz baytlık minik bir JSON (veri formatı) metninden ibarettir. İçinde sadece başlık, kısa bir metin, çalacak sesin adı ve tıklanınca açılacak sayfa bilgisi yer alır.

Gereksiz yere şişirilmiş veriler yerine bu tüy kadar hafif paketler sayesinde telefon anteni milisaniyeler içinde uyanır, veriyi alır ve hemen yeniden uyku durumuna geri döner.


Efsaneler ve Kazalar: Uygulamaları Yukarı Kaydırarak Kapatmak

Pek çok kullanıcının alışkanlık haline getirdiği bir refleks vardır: Çoklu görev ekranını açıp bütün uygulamaları yukarı kaydırarak kapatmak.

Gerçek şu: Bu hareket pili kurtarmaz, aksine daha fazla tüketir. Siz bir uygulamayı kapattığınızda bildirim altyapısı zaten kapanmaz; çünkü kapıda bekleyen işletim sistemidir. Ancak siz uygulamayı zorla kapattığınızda, gelen bildirime dokunduğunuz an işletim sistemi uygulamayı sıfırdan belleğe yüklemek için işlemciyi son hızda çalıştırır.

Arka plandaki asıl kabus ise yazılımcıların yaptığı hatalardır. Milyonlarca kullanıcısı olan bir uygulamanın test ortamında yanlışlıkla tüm kullanıcılara "Test bildirimi" gönderildiğini düşünün. İşte bu durum felaketlerin kapısını aralar.


Gerçek Bir Felaket: "Son Dakika" Bildiriminin Sunucuları Eritmesi

Güvenilirlik mühendislerinin en korktuğu kabuslardan biri "Thundering Herd" (Gök Gürültüsü Sürüsü) problemidir.

Popüler bir haber uygulaması düşünün. Saat 14.00'te beş milyon kullanıcıya aynı anda "Büyük Deprem!" bildirimi atılıyor. Apple ve Google bu bildirimi saniyeler içinde herkese dağıtır. Ardından gelen 3 saniye içinde en az 2 milyon insan bildirime aynı anda tıklar.

Sonuç? İki milyon istek aynı saniyede uygulamanın ana sunucularına çarpar. Sunucular kilitlenir, veritabanları çöker ve uygulama "Bağlantı Hatası" vermeye başlar.

[5 Milyon Push Bildirimi] ──(Tıklama)──▶ [2 Milyon Eşzamanlı İstek] ──▶ [Çöken API Sunucuları]

Bu yüzden deneyimli ekipler bildirimleri asla tek bir saniyede topluca ateşlemez; bildirimi kullanıcılara dalga dalga (staggered) yayarak sunucu yükünü dengeler. Sistem yükü altında bileşenlerin nasıl tepki verdiğini simüle etmek için geliştirilen İnteraktif Simülasyon Araçları gibi yapılar, bu tip izdiham anlarını önceden tahmin etmede hayati rol oynar.


Sıkça Sorulan Sorular (SSS)

Düşük güç modunda bildirimler neden bazen gecikir?

Düşük Güç Modu, pil ömrünü uzatmak amacıyla telefonun hücresel modemiyle APNs veya FCM sunucuları arasındaki senkronizasyon sıklığını azaltır. Telefon, anteni her saniye aktif tutmak yerine belirli aralıklarla gelen paketleri toplu olarak kontrol etmeyi tercih eder. Bu durum kritik olmayan bildirimlerin ekrana birkaç dakika gecikmeli yansımasına sebep olabilir.

Uçtan uca şifreli mesajların içeriğini Apple veya Google okuyabilir mi?

Hayır, okuyamaz. WhatsApp veya Signal gibi uçtan uca şifreleme kullanan uygulamalarda merkezi bildirim sunucusuna giden paket tamamen şifrelenmiş anlamsız verilerden oluşur. Telefon bu şifreli paketi aldığında, kilitli olan uygulamanın şifre çözücü küçük uzantısını arka planda bir anlığına çalıştırır; mesaj cihazın içinde çözülür ve ekrana yansıtılır.

"Sessiz bildirim" (Silent push) nedir ve ne işe yarar?

Sessiz bildirim, ekranda hiçbir ses, titreşim veya görsel uyarı üretmeyen özel bir bildirim türüdür. Amacı kullanıcıyı rahatsız etmek değil, uygulamayı arka planda sessizce uyandırıp küçük bir veriyi güncellemesini sağlamaktır. Örneğin bir e-posta uygulamasının siz henüz uygulamayı açmadan yeni gelen postaları arka planda indirmesi bu mekanizmayla gerçekleşir.

Telefonum kapalıyken veya uçak modundayken atılan bildirimlere ne olur?

Telefonunuz çevrimdışı olduğunda bildirimler kaybolmaz. Apple (APNs) ve Google (FCM) sunucuları bu mesajları belirli bir süre (TTL - Time to Live) boyunca kendi kuyruklarında saklar. Telefonunuz internete tekrar bağlandığı an, merkezi sunucu cihazın aktif olduğunu algılar ve bekleyen tüm bildirim paketlerini tek bir seferde cihaza iletir.

Android ve iOS arasında bildirim mimarisi açısından temel bir fark var mı?

Temel mimari mantığı her iki platformda da aynıdır: Merkezi bir sunucuya bağlı tek bir açık hat. Ancak iOS, arka plan kısıtlamalarında çok daha katıdır ve bildirim geldiğinde uygulamanın arka planda işlem yapmasına nadiren izin verir. Android ise üretici ayarlarına da bağlı olarak uygulamalara bildirim anında biraz daha fazla arka plan özgürlüğü tanır.

İlgili Derin Teknik Makaleler

Tüm Makaleler →