IoT Mobil Uygulama Nasıl Build Edilir: Gerçekten Önemli Olan Mimari ve Entegrasyon Kararları

Çoğu IoT mobil uygulama projesi kullanıcıdan değil, cihazdan başlar. Ekip bir mikrodenetleyici seçer, protokol üzerinde anlaşır ve ardından donanım ekibinin belirlediği her şeyin etrafında mobil uygulamayı kurar. Bu sıra işlevsel uygulamalar üretir. Nadiren iyi olanlar çıkar.

Bir IoT mobil uygulamasının sahada gerçekten çalışıp çalışmayacağını belirleyen kararlar donanım kararları değildir. Bunlar mimari kararlardır: uygulamanın cihazla nasıl iletişim kurduğu, gerçek zamanlı veriyi pili boşaltmadan nasıl yönettiği, bağlantı kesildiğinde nasıl davrandığı ve makine tarafından üretilen veriyi makineyi hiç düşünmek istemeyen birine nasıl sunduğu. Bu yazı her kararı sırasıyla ele alır.

IoT Mobil Uygulamasının Arkasındaki Teknoloji Altyapısı

IoT mobil uygulama iki farklı mühendislik dünyasının sınırında durur: kısıtlı, düşük güçlü protokollerle iletişim kuran cihaz katmanı ve kullanıcıların akıcı arayüz ile anlık geri bildirim beklediği uygulama katmanı. Mobil uygulama bu iki dünya arasındaki köprüdür; köprüyü nasıl kurduğunuz, üzerinde mümkün olan her şeyi belirler.

Tipik bir altyapı dört bileşenden oluşur. Cihaz katmanı: veri üreten veya yanıt veren sensörler, mikrodenetleyiciler ya da aktüatörler. Bağlantı katmanı: veriyi cihaz ile telefon veya cihaz ile bulut arasında taşıyan protokol, BLE, MQTT, LoRa veya hücresel. Arka uç katmanı: veriyi depolayan, işleyen ve yönlendiren bulut altyapısı (AWS IoT Core, Azure IoT Hub, Google Cloud IoT). Mobil katman: veriyi okuyan, ekranda sunan ve komutları geri gönderen Flutter veya React Native uygulaması.

Her katman kendi başarısızlık senaryolarını beraberinde getirir. Mobil uygulama bunların tümünü kullanıcıya yansıtmadan yönetmek zorundadır.

Önce Protokol: BLE, MQTT, WebSocket mi, Başka Bir Şey mi?

Protokol kararı, her IoT mobil projesinde ilk ve en belirleyici mimari seçimdir. Pil ömrünü, gecikmeyi, menzili ve güvenilirliği belirler. Ayrıca mobil kod tabanına ne kadar karmaşıklık düştüğünü de belirler.

Protokol

Menzil

Güç

Gecikme

En iyi kullanım

BLE

10-100m

Çok düşük

10-50ms

Giyilebilirler, fitness, akıllı kilitler, medikal

MQTT (Wi-Fi / hücresel)

Sınırsız (bulut)

Orta

50-200ms

Ev otomasyonu, filo izleme, sensör panoları

WebSocket

Sınırsız (bulut)

Orta-yüksek

50ms altı

Çift yönlü kontrol, kullanıcı komutlu canlı panolar

LoRa / NB-IoT

Kilometreler

Çok düşük

Saniyeler

Tarım, endüstriyel, düşük sinyal bölgelerinde GPS

HTTP REST

Sınırsız

Orta

100-500ms

Seyrek güncellemeler, yapılandırma push, zamana duyarsız veri

BLE, cihazın kullanıcıya fiziksel olarak yakın olduğu ve cihazdaki pil ömrünün önemli olduğu durumlarda doğru seçimdir. Giyilebilirler, fitness ekipmanları, akıllı kilitler ve medikal sensörler klasik örneklerdir. Eclipse Foundation'ın 2025 IoT Geliştirici Araştırması'na göre IoT geliştiricilerinin yüzde 83'ü MQTT kullanır; hafif yapısı, güvenilmez ağlarda çalışması ve yapılandırılabilir kalite seviyelerinde garantili teslimat desteği bu tercihin temel nedenidir. AWS IoT Core, yönetilen bir MQTT broker olarak kendi altyapınızı çalıştırmanın operasyonel yükünü ortadan kaldırır.

WebSocket, mobil uygulamanın cihaza veya buluta 100ms altı gidiş-dönüşle komut göndermesi gerektiğinde uygundur. Kullanıcının cihaz ayarlarını gerçek zamanlı değiştirdiği bir kontrol arayüzü WebSocket kullanım durumudur. Salt okunur sensör panosu değildir; bunu SSE veya MQTT çok daha az altyapı karmaşıklığıyla karşılar.

En pahalı protokol hatası, her şey için varsayılan olarak WebSocket'i seçmektir. WebSocket bağlantıları durum bilgilidir, yük dengeleyicilerde yapışkan oturum yapılandırması gerektirir ve hem iOS hem de Android'de mobil işletim sisteminin ağ yönetimi tarafından agresif bir biçimde sonlandırılır. Saniyede birkaç kez güncellenen panolar için SSE veya MQTT, çok daha düşük bir operasyonel karmaşıklıkla birebir aynı kullanıcı deneyimini sunar.

Flutter'da BLE iletişimi flutter_blue_plus gibi paketlerle sağlanır; ancak implementasyon, paketin gösterdiği kadar basit değildir. BLE bağlantıları durum bilgili ve kırılgandır.Tarama, bağlanıyor, bağlı, bağlantı kesiliyor ve hata durumlarını açıkça tanımlayan bir Connection Manager kullanmak bir tercih değil, zorunluluktur. Bu yapı, kopan bağlantılar ve başarısız eşleştirme akışlarından kaynaklanan destek taleplerinin büyük çoğunluğunu önler.

Gerçek Zamanlı Veri: Mobilde "Canlı"nın Gerçek Maliyeti

Gerçek zamanlı kavramı, IoT ürün spesifikasyonlarında en fazla anlam yüklenen terimlerden biridir. Kullanıcı için 'canlı veri', ekrandaki sayının sensörün o anda ölçtüğü değeri yansıtması demektir. Bunun mimarideki karşılığı ise tamamen güncelleme frekansına bağlıdır; maliyeti belirleyen de bu frekanstır.

  • 500ms veya daha hızlı güncellenen sensör verisi: QoS 0 ile WebSocket veya MQTT. Bu frekansta onay mesajlarının (ACK) getirdiği ek yük (overhead), neden olduğu gecikmeye değmez.

  • 1 ila 10 saniyede bir güncelleme: QoS 1 ile MQTT veya buluttan SSE. Güvenilir, hafif, altyapı karmaşıklığı olmadan ölçeklenir.

  • 30 saniye veya daha yavaş güncelleme: HTTP polling. Build etmesi basit, hata ayıklaması kolay, kalıcı bağlantı ek yükü sıfır.

UX sorusu teknik soru kadar belirleyicidir. Sıcaklık sensörü okuyan kullanıcı 500ms güncellemeye ihtiyaç duymaz. Hastanın oksijen satürasyonunu izleyen cerrah duyar. Polling aralığı cihazın kapasitesine değil, kullanıcının gerçek karar hızına göre belirlenir.

Ham sensör değerlerini doğrudan ekrana yansıtmak nadiren doğru tasarımdır. Saniyede 20 kez değişen sayı bilgi değil, gürültüdür. Mobil katman veriyi render etmeden önce yumuşatmalı, toplamalı veya eşiklemelidir. Bu bir performans optimizasyonu değil, ürün kararıdır.

Canlı değerlerin yanında geçmiş verileri de göstermesi gereken uygulamalar için InfluxDB, TimescaleDB veya Amazon Timestream gibi bir zaman serisi arka ucu doğru seçimdir. Sensör olaylarını ilişkisel veritabanında saklamak, kullanıcı yüksek çözünürlükte son 30 günü görüntülemek istediği anda sorgu performans sorunları üretir.

Çevrimdışı Davranış: Çoğu Ekibin Çok Geç Aldığı Karar

Her IoT mobil uygulama, güvenilmez bağlantının olduğu bir ortamda kullanılacaktır. Depolar, inşaat alanları, hastane katları, kırsal bölgeler ve metro istasyonları yaygın dağıtım ortamlarıdır. Soru uygulamanın çevrimdışı senaryoları yönetip yönetmeyeceği değildir. Soru, arka uca ulaşamadığında ne yapacağıdır.

Üç geçerli strateji vardır ve seçim, kullanıcının harekete geçmek için hangi veriye ihtiyaç duyduğuna bağlıdır:

  • Salt okunur önbellek. Uygulama bilinen son cihaz durumunu yerel olarak saklar ve çevrimdışı olduğunda net zaman damgasıyla görüntüler. Yazmalar engellenir ya da kullanıcıya bildirimle kuyruğa alınır. Çoğu tüketici IoT uygulaması için doğru varsayılan budur.

  • Senkronizasyon kuyruğuyla çevrimdışı öncelik. Tüm kullanıcı aksiyonları önce yerel olarak yazılır, senkronizasyon için kuyruğa alınır ve bağlantı döndüğünde arka uca iletilir. Çakışmalar zaman damgasıyla veya kullanıcıya gösterilerek çözülür. Saha servis uygulamaları, medikal cihazlar ve kullanıcının bağlantıdan bağımsız çalışmaya devam etmesi gereken uygulamalar için doğru yapı budur.

  • Bağlantı durumuna duyarlı arayüz. Uygulama bağlantı kaybını tespit eder ve arayüzünü açıkça düşürür: gerçek zamanlı grafikleri ve bulut gidiş-dönüşü gerektiren komutları devre dışı bırakır, kullanıcıyı bilgilendirir ve işlevsel tutar. Bulut bağlantısı olmaksızın BLE üzerinden cihaza erişimin sürdüğü durumlarda uygundur.

Flutter'da çevrimdışı öncelikli yapı bir yerel veritabanı (sqflite veya Drift üzerinden SQLite ya da daha basit şemalar için Hive), bir bağlantı dinleyicisi (connectivity_plus) ve bekleyen yazmaların kuyruğunu işleyen bir senkronizasyon motoru gerektirir. Çakışma çözüm stratejisi implementasyondan önce belirlenmek zorundadır; sonradan eklemek küçük bir özellik ekleme değil, büyük bir yeniden yazımdır. Zaman damgası bazlı son yazan kazanır stratejisi çoğu tüketici uygulaması için yeterlidir. İşbirlikçi veya güvenlik açısından kritik veriler için birleştirme stratejileri ya da kullanıcıya yönelik çakışma arayüzü gerekir.

Çoğu ekibin gözden kaçırdığı ayrıntı: senkronizasyon kuyruğu uygulama yeniden başlatmalarında hayatta kalmalıdır. Bekleyen aksiyonları yalnızca belleğe yazmak çevrimdışı öncelikli değildir. Uygulama kapanınca her şey gider.

UX Katmanı: Cihaz Karmaşıklığının Ekranla Buluştuğu Yer

IoT uygulamalarının çoğu diğer uygulama kategorisinde karşılaşılmayan bir UX sorunu vardır. Cihaz katmanı sürekli veri üretir, kendi programında çalışır ve kullanıcının tanıyamayabileceği biçimlerde bozulur. Mobil arayüz tüm bunları karmaşıklık değil, güven ileten bir yüzeye dönüştürmek zorundadır.

Bir IoT mobil uygulamasının güvenilir hissettirip hissettirmeyeceğini belirleyen dört UX kararı:

Bağlantı durumu görünürlüğü. Kullanıcı her zaman uygulamanın cihaza bağlı mı, buluta bağlı ama cihaza değil mi, yoksa önbellekten mi çalıştığını bilmelidir. Kalıcı bir durum göstergesi modal uyarılardan daha etkilidir. Temiz görünmek için bağlantı durumunu gizlemek, bir şeyler ters gittiğinde kullanıcı kargaşasını garantiler.

Komut onay örüntüleri. Kullanıcı cihaza vana kapatma, kapı kilitleme veya bir değeri ayarlama gibi bir komut gönderdiğinde, uygulama yalnızca komutun iletildiğini değil,bu komutu yerine getirdiğini de doğrulamalıdır. Bu durum, komut sonrasında cihazdan durum bilgisini tekrar okumayı gerektirir. Bu döngü için gecikme bütçesi genellikle 500 ms ila 2 saniye arasındadır; bu süre aşıldığında kullanıcı bir şeylerin bozulduğunu varsayar.

Uyarı eşik tasarımı. IoT uygulamaları sensör değerleri eşik aştığında bildirim gönderir. Eşik arayüzü bir kalibrasyon arayüzüdür ve çoğu ekip bunu yetersiz tasarlar. Çok fazla uyarı alan kullanıcılar bildirimleri kapatır. Belirsiz uyarılar alan kullanıcılar görmezden gelir. Makul varsayılan değerler, net ölçü birimleri ve belirgin bir erteleme mekanizması, zorunlu özelliklerdir.

Eşleştirme ve onboarding akışı. BLE cihaz eşleştirmesi, kullanıcının uygulama üzerinden cihazla ilk etkileşimidir; çoğu IoT uygulamasının kullanıcıları kalıcı olarak kaybettiği yerdir. Eşleştirme akışı Bluetooth'un kapalı olduğu, konum izninin eksik olduğu (Android'de BLE tarama için zorunludur), cihazın eşleştirme modunda olmadığı ve taramanın sessizce başarısız olduğu durumları yönetmek zorundadır. EventKit ve platform izin API'leri, hem SwiftUI hem de Jetpack Compose tarafında, bir dizi kullanıcı şikayetinden sonra değil, en başından itibaren entegre edilmelidir.

Flutter ile sağlık, fitness veya kurumsal IoT kategorilerinde mobil uygulama geliştiren ekipler için cihaz entegrasyonu, gerçek zamanlı veri katmanı ve çevrimdışı öncelikli mimari, bağlantı hatalarından oluşan bir sprint sonrasında değil, mobil uygulama geliştirme sürecinin ilk adımlarında kurgulanır.

Sıkça Sorulan Sorular

BLE tabanlı bir IoT mobil uygulaması için doğru protokol nedir?

Neon Apps, IoT mobil projelerinde gerçek zamanlı veri mimarisine nasıl yaklaşır?

IoT mobil uygulamasında WebSocket ne zaman MQTT'nin önüne geçer?

Neon Apps, çevrimdışı öncelikli IoT mobil uygulamaları geliştiriyor mu?

IoT mobil uygulama geliştirmede en yaygın UX hataları neler?

İlham Almaya Devam Et

Yeni tasarım içgörüleri, makaleler ve kaynaklar doğrudan gelen kutunuza gelsin.

Neon Apps ekibinden hikayeler, içgörüler ve güncellemeleri doğrudan gelen kutunuza alın.

Son Bloglar

İlham Almaya Devam Et

Neon Apps ekibinden hikayeler, içgörüler ve güncellemeler doğrudan gelen kutunuza gelsin.

Bir projeniz mi var?

Bize Ulaşın

Bir projeniz mi var? Startup'lar ve küresel markalar için dünya standartlarında mobil ve web uygulamaları geliştiriyoruz.

İletişim

Email
support@neonapps.co

Whatsapp
+90 552 733 43 99

Adres

New York Ofis : 31 Hudson Yards, 11th Floor 10065
New York/ United States

İstanbul Ofis : Huzur Mah. Fazıl Kaftanoğlu Caddesi
No:7 Kat:10 Sarıyer/İstanbul

© 2025 Copyright. Tüm Hakları Neon Apps'e Aittir.

Neon Apps, İstanbul ve New York ofislerinde 85 kişilik kendi ekibiyle mobil, web ve SaaS projeleri hayata geçiren bir ürün geliştirme şirketidir. Uzun vadeli bir çözüm ortağı olarak, markalar için ölçeklenebilir dijital ürünler üretiyoruz.

IoT Mobil Uygulama Nasıl Build Edilir: Gerçekten Önemli Olan Mimari ve Entegrasyon Kararları

Çoğu IoT mobil uygulama projesi kullanıcıdan değil, cihazdan başlar. Ekip bir mikrodenetleyici seçer, protokol üzerinde anlaşır ve ardından donanım ekibinin belirlediği her şeyin etrafında mobil uygulamayı kurar. Bu sıra işlevsel uygulamalar üretir. Nadiren iyi olanlar çıkar.

Bir IoT mobil uygulamasının sahada gerçekten çalışıp çalışmayacağını belirleyen kararlar donanım kararları değildir. Bunlar mimari kararlardır: uygulamanın cihazla nasıl iletişim kurduğu, gerçek zamanlı veriyi pili boşaltmadan nasıl yönettiği, bağlantı kesildiğinde nasıl davrandığı ve makine tarafından üretilen veriyi makineyi hiç düşünmek istemeyen birine nasıl sunduğu. Bu yazı her kararı sırasıyla ele alır.

IoT Mobil Uygulamasının Arkasındaki Teknoloji Altyapısı

IoT mobil uygulama iki farklı mühendislik dünyasının sınırında durur: kısıtlı, düşük güçlü protokollerle iletişim kuran cihaz katmanı ve kullanıcıların akıcı arayüz ile anlık geri bildirim beklediği uygulama katmanı. Mobil uygulama bu iki dünya arasındaki köprüdür; köprüyü nasıl kurduğunuz, üzerinde mümkün olan her şeyi belirler.

Tipik bir altyapı dört bileşenden oluşur. Cihaz katmanı: veri üreten veya yanıt veren sensörler, mikrodenetleyiciler ya da aktüatörler. Bağlantı katmanı: veriyi cihaz ile telefon veya cihaz ile bulut arasında taşıyan protokol, BLE, MQTT, LoRa veya hücresel. Arka uç katmanı: veriyi depolayan, işleyen ve yönlendiren bulut altyapısı (AWS IoT Core, Azure IoT Hub, Google Cloud IoT). Mobil katman: veriyi okuyan, ekranda sunan ve komutları geri gönderen Flutter veya React Native uygulaması.

Her katman kendi başarısızlık senaryolarını beraberinde getirir. Mobil uygulama bunların tümünü kullanıcıya yansıtmadan yönetmek zorundadır.

Önce Protokol: BLE, MQTT, WebSocket mi, Başka Bir Şey mi?

Protokol kararı, her IoT mobil projesinde ilk ve en belirleyici mimari seçimdir. Pil ömrünü, gecikmeyi, menzili ve güvenilirliği belirler. Ayrıca mobil kod tabanına ne kadar karmaşıklık düştüğünü de belirler.

Protokol

Menzil

Güç

Gecikme

En iyi kullanım

BLE

10-100m

Çok düşük

10-50ms

Giyilebilirler, fitness, akıllı kilitler, medikal

MQTT (Wi-Fi / hücresel)

Sınırsız (bulut)

Orta

50-200ms

Ev otomasyonu, filo izleme, sensör panoları

WebSocket

Sınırsız (bulut)

Orta-yüksek

50ms altı

Çift yönlü kontrol, kullanıcı komutlu canlı panolar

LoRa / NB-IoT

Kilometreler

Çok düşük

Saniyeler

Tarım, endüstriyel, düşük sinyal bölgelerinde GPS

HTTP REST

Sınırsız

Orta

100-500ms

Seyrek güncellemeler, yapılandırma push, zamana duyarsız veri

BLE, cihazın kullanıcıya fiziksel olarak yakın olduğu ve cihazdaki pil ömrünün önemli olduğu durumlarda doğru seçimdir. Giyilebilirler, fitness ekipmanları, akıllı kilitler ve medikal sensörler klasik örneklerdir. Eclipse Foundation'ın 2025 IoT Geliştirici Araştırması'na göre IoT geliştiricilerinin yüzde 83'ü MQTT kullanır; hafif yapısı, güvenilmez ağlarda çalışması ve yapılandırılabilir kalite seviyelerinde garantili teslimat desteği bu tercihin temel nedenidir. AWS IoT Core, yönetilen bir MQTT broker olarak kendi altyapınızı çalıştırmanın operasyonel yükünü ortadan kaldırır.

WebSocket, mobil uygulamanın cihaza veya buluta 100ms altı gidiş-dönüşle komut göndermesi gerektiğinde uygundur. Kullanıcının cihaz ayarlarını gerçek zamanlı değiştirdiği bir kontrol arayüzü WebSocket kullanım durumudur. Salt okunur sensör panosu değildir; bunu SSE veya MQTT çok daha az altyapı karmaşıklığıyla karşılar.

En pahalı protokol hatası, her şey için varsayılan olarak WebSocket'i seçmektir. WebSocket bağlantıları durum bilgilidir, yük dengeleyicilerde yapışkan oturum yapılandırması gerektirir ve hem iOS hem de Android'de mobil işletim sisteminin ağ yönetimi tarafından agresif bir biçimde sonlandırılır. Saniyede birkaç kez güncellenen panolar için SSE veya MQTT, çok daha düşük bir operasyonel karmaşıklıkla birebir aynı kullanıcı deneyimini sunar.

Flutter'da BLE iletişimi flutter_blue_plus gibi paketlerle sağlanır; ancak implementasyon, paketin gösterdiği kadar basit değildir. BLE bağlantıları durum bilgili ve kırılgandır.Tarama, bağlanıyor, bağlı, bağlantı kesiliyor ve hata durumlarını açıkça tanımlayan bir Connection Manager kullanmak bir tercih değil, zorunluluktur. Bu yapı, kopan bağlantılar ve başarısız eşleştirme akışlarından kaynaklanan destek taleplerinin büyük çoğunluğunu önler.

Gerçek Zamanlı Veri: Mobilde "Canlı"nın Gerçek Maliyeti

Gerçek zamanlı kavramı, IoT ürün spesifikasyonlarında en fazla anlam yüklenen terimlerden biridir. Kullanıcı için 'canlı veri', ekrandaki sayının sensörün o anda ölçtüğü değeri yansıtması demektir. Bunun mimarideki karşılığı ise tamamen güncelleme frekansına bağlıdır; maliyeti belirleyen de bu frekanstır.

  • 500ms veya daha hızlı güncellenen sensör verisi: QoS 0 ile WebSocket veya MQTT. Bu frekansta onay mesajlarının (ACK) getirdiği ek yük (overhead), neden olduğu gecikmeye değmez.

  • 1 ila 10 saniyede bir güncelleme: QoS 1 ile MQTT veya buluttan SSE. Güvenilir, hafif, altyapı karmaşıklığı olmadan ölçeklenir.

  • 30 saniye veya daha yavaş güncelleme: HTTP polling. Build etmesi basit, hata ayıklaması kolay, kalıcı bağlantı ek yükü sıfır.

UX sorusu teknik soru kadar belirleyicidir. Sıcaklık sensörü okuyan kullanıcı 500ms güncellemeye ihtiyaç duymaz. Hastanın oksijen satürasyonunu izleyen cerrah duyar. Polling aralığı cihazın kapasitesine değil, kullanıcının gerçek karar hızına göre belirlenir.

Ham sensör değerlerini doğrudan ekrana yansıtmak nadiren doğru tasarımdır. Saniyede 20 kez değişen sayı bilgi değil, gürültüdür. Mobil katman veriyi render etmeden önce yumuşatmalı, toplamalı veya eşiklemelidir. Bu bir performans optimizasyonu değil, ürün kararıdır.

Canlı değerlerin yanında geçmiş verileri de göstermesi gereken uygulamalar için InfluxDB, TimescaleDB veya Amazon Timestream gibi bir zaman serisi arka ucu doğru seçimdir. Sensör olaylarını ilişkisel veritabanında saklamak, kullanıcı yüksek çözünürlükte son 30 günü görüntülemek istediği anda sorgu performans sorunları üretir.

Çevrimdışı Davranış: Çoğu Ekibin Çok Geç Aldığı Karar

Her IoT mobil uygulama, güvenilmez bağlantının olduğu bir ortamda kullanılacaktır. Depolar, inşaat alanları, hastane katları, kırsal bölgeler ve metro istasyonları yaygın dağıtım ortamlarıdır. Soru uygulamanın çevrimdışı senaryoları yönetip yönetmeyeceği değildir. Soru, arka uca ulaşamadığında ne yapacağıdır.

Üç geçerli strateji vardır ve seçim, kullanıcının harekete geçmek için hangi veriye ihtiyaç duyduğuna bağlıdır:

  • Salt okunur önbellek. Uygulama bilinen son cihaz durumunu yerel olarak saklar ve çevrimdışı olduğunda net zaman damgasıyla görüntüler. Yazmalar engellenir ya da kullanıcıya bildirimle kuyruğa alınır. Çoğu tüketici IoT uygulaması için doğru varsayılan budur.

  • Senkronizasyon kuyruğuyla çevrimdışı öncelik. Tüm kullanıcı aksiyonları önce yerel olarak yazılır, senkronizasyon için kuyruğa alınır ve bağlantı döndüğünde arka uca iletilir. Çakışmalar zaman damgasıyla veya kullanıcıya gösterilerek çözülür. Saha servis uygulamaları, medikal cihazlar ve kullanıcının bağlantıdan bağımsız çalışmaya devam etmesi gereken uygulamalar için doğru yapı budur.

  • Bağlantı durumuna duyarlı arayüz. Uygulama bağlantı kaybını tespit eder ve arayüzünü açıkça düşürür: gerçek zamanlı grafikleri ve bulut gidiş-dönüşü gerektiren komutları devre dışı bırakır, kullanıcıyı bilgilendirir ve işlevsel tutar. Bulut bağlantısı olmaksızın BLE üzerinden cihaza erişimin sürdüğü durumlarda uygundur.

Flutter'da çevrimdışı öncelikli yapı bir yerel veritabanı (sqflite veya Drift üzerinden SQLite ya da daha basit şemalar için Hive), bir bağlantı dinleyicisi (connectivity_plus) ve bekleyen yazmaların kuyruğunu işleyen bir senkronizasyon motoru gerektirir. Çakışma çözüm stratejisi implementasyondan önce belirlenmek zorundadır; sonradan eklemek küçük bir özellik ekleme değil, büyük bir yeniden yazımdır. Zaman damgası bazlı son yazan kazanır stratejisi çoğu tüketici uygulaması için yeterlidir. İşbirlikçi veya güvenlik açısından kritik veriler için birleştirme stratejileri ya da kullanıcıya yönelik çakışma arayüzü gerekir.

Çoğu ekibin gözden kaçırdığı ayrıntı: senkronizasyon kuyruğu uygulama yeniden başlatmalarında hayatta kalmalıdır. Bekleyen aksiyonları yalnızca belleğe yazmak çevrimdışı öncelikli değildir. Uygulama kapanınca her şey gider.

UX Katmanı: Cihaz Karmaşıklığının Ekranla Buluştuğu Yer

IoT uygulamalarının çoğu diğer uygulama kategorisinde karşılaşılmayan bir UX sorunu vardır. Cihaz katmanı sürekli veri üretir, kendi programında çalışır ve kullanıcının tanıyamayabileceği biçimlerde bozulur. Mobil arayüz tüm bunları karmaşıklık değil, güven ileten bir yüzeye dönüştürmek zorundadır.

Bir IoT mobil uygulamasının güvenilir hissettirip hissettirmeyeceğini belirleyen dört UX kararı:

Bağlantı durumu görünürlüğü. Kullanıcı her zaman uygulamanın cihaza bağlı mı, buluta bağlı ama cihaza değil mi, yoksa önbellekten mi çalıştığını bilmelidir. Kalıcı bir durum göstergesi modal uyarılardan daha etkilidir. Temiz görünmek için bağlantı durumunu gizlemek, bir şeyler ters gittiğinde kullanıcı kargaşasını garantiler.

Komut onay örüntüleri. Kullanıcı cihaza vana kapatma, kapı kilitleme veya bir değeri ayarlama gibi bir komut gönderdiğinde, uygulama yalnızca komutun iletildiğini değil,bu komutu yerine getirdiğini de doğrulamalıdır. Bu durum, komut sonrasında cihazdan durum bilgisini tekrar okumayı gerektirir. Bu döngü için gecikme bütçesi genellikle 500 ms ila 2 saniye arasındadır; bu süre aşıldığında kullanıcı bir şeylerin bozulduğunu varsayar.

Uyarı eşik tasarımı. IoT uygulamaları sensör değerleri eşik aştığında bildirim gönderir. Eşik arayüzü bir kalibrasyon arayüzüdür ve çoğu ekip bunu yetersiz tasarlar. Çok fazla uyarı alan kullanıcılar bildirimleri kapatır. Belirsiz uyarılar alan kullanıcılar görmezden gelir. Makul varsayılan değerler, net ölçü birimleri ve belirgin bir erteleme mekanizması, zorunlu özelliklerdir.

Eşleştirme ve onboarding akışı. BLE cihaz eşleştirmesi, kullanıcının uygulama üzerinden cihazla ilk etkileşimidir; çoğu IoT uygulamasının kullanıcıları kalıcı olarak kaybettiği yerdir. Eşleştirme akışı Bluetooth'un kapalı olduğu, konum izninin eksik olduğu (Android'de BLE tarama için zorunludur), cihazın eşleştirme modunda olmadığı ve taramanın sessizce başarısız olduğu durumları yönetmek zorundadır. EventKit ve platform izin API'leri, hem SwiftUI hem de Jetpack Compose tarafında, bir dizi kullanıcı şikayetinden sonra değil, en başından itibaren entegre edilmelidir.

Flutter ile sağlık, fitness veya kurumsal IoT kategorilerinde mobil uygulama geliştiren ekipler için cihaz entegrasyonu, gerçek zamanlı veri katmanı ve çevrimdışı öncelikli mimari, bağlantı hatalarından oluşan bir sprint sonrasında değil, mobil uygulama geliştirme sürecinin ilk adımlarında kurgulanır.

Sıkça Sorulan Sorular

BLE tabanlı bir IoT mobil uygulaması için doğru protokol nedir?

Neon Apps, IoT mobil projelerinde gerçek zamanlı veri mimarisine nasıl yaklaşır?

IoT mobil uygulamasında WebSocket ne zaman MQTT'nin önüne geçer?

Neon Apps, çevrimdışı öncelikli IoT mobil uygulamaları geliştiriyor mu?

IoT mobil uygulama geliştirmede en yaygın UX hataları neler?

İlham Almaya Devam Et

Yeni tasarım içgörüleri, makaleler ve kaynaklar doğrudan gelen kutunuza gelsin.

Neon Apps ekibinden hikayeler, içgörüler ve güncellemeleri doğrudan gelen kutunuza alın.

Son Bloglar

İlham Almaya Devam Et

Neon Apps ekibinden hikayeler, içgörüler ve güncellemeler doğrudan gelen kutunuza gelsin.

Bir projeniz mi var?

Bize Ulaşın

Bir projeniz mi var? Startup'lar ve küresel markalar için dünya standartlarında mobil ve web uygulamaları geliştiriyoruz.

İletişim

Email
support@neonapps.co

Whatsapp
+90 552 733 43 99

Adres

New York Ofis : 31 Hudson Yards, 11th Floor 10065
New York/ United States

İstanbul Ofis : Huzur Mah. Fazıl Kaftanoğlu Caddesi
No:7 Kat:10 Sarıyer/İstanbul

© 2025 Copyright. Tüm Hakları Neon Apps'e Aittir.

Neon Apps, İstanbul ve New York ofislerinde 85 kişilik kendi ekibiyle mobil, web ve SaaS projeleri hayata geçiren bir ürün geliştirme şirketidir. Uzun vadeli bir çözüm ortağı olarak, markalar için ölçeklenebilir dijital ürünler üretiyoruz.

IoT Mobil Uygulama Nasıl Build Edilir: Gerçekten Önemli Olan Mimari ve Entegrasyon Kararları

Çoğu IoT mobil uygulama projesi kullanıcıdan değil, cihazdan başlar. Ekip bir mikrodenetleyici seçer, protokol üzerinde anlaşır ve ardından donanım ekibinin belirlediği her şeyin etrafında mobil uygulamayı kurar. Bu sıra işlevsel uygulamalar üretir. Nadiren iyi olanlar çıkar.

Bir IoT mobil uygulamasının sahada gerçekten çalışıp çalışmayacağını belirleyen kararlar donanım kararları değildir. Bunlar mimari kararlardır: uygulamanın cihazla nasıl iletişim kurduğu, gerçek zamanlı veriyi pili boşaltmadan nasıl yönettiği, bağlantı kesildiğinde nasıl davrandığı ve makine tarafından üretilen veriyi makineyi hiç düşünmek istemeyen birine nasıl sunduğu. Bu yazı her kararı sırasıyla ele alır.

IoT Mobil Uygulamasının Arkasındaki Teknoloji Altyapısı

IoT mobil uygulama iki farklı mühendislik dünyasının sınırında durur: kısıtlı, düşük güçlü protokollerle iletişim kuran cihaz katmanı ve kullanıcıların akıcı arayüz ile anlık geri bildirim beklediği uygulama katmanı. Mobil uygulama bu iki dünya arasındaki köprüdür; köprüyü nasıl kurduğunuz, üzerinde mümkün olan her şeyi belirler.

Tipik bir altyapı dört bileşenden oluşur. Cihaz katmanı: veri üreten veya yanıt veren sensörler, mikrodenetleyiciler ya da aktüatörler. Bağlantı katmanı: veriyi cihaz ile telefon veya cihaz ile bulut arasında taşıyan protokol, BLE, MQTT, LoRa veya hücresel. Arka uç katmanı: veriyi depolayan, işleyen ve yönlendiren bulut altyapısı (AWS IoT Core, Azure IoT Hub, Google Cloud IoT). Mobil katman: veriyi okuyan, ekranda sunan ve komutları geri gönderen Flutter veya React Native uygulaması.

Her katman kendi başarısızlık senaryolarını beraberinde getirir. Mobil uygulama bunların tümünü kullanıcıya yansıtmadan yönetmek zorundadır.

Önce Protokol: BLE, MQTT, WebSocket mi, Başka Bir Şey mi?

Protokol kararı, her IoT mobil projesinde ilk ve en belirleyici mimari seçimdir. Pil ömrünü, gecikmeyi, menzili ve güvenilirliği belirler. Ayrıca mobil kod tabanına ne kadar karmaşıklık düştüğünü de belirler.

Protokol

Menzil

Güç

Gecikme

En iyi kullanım

BLE

10-100m

Çok düşük

10-50ms

Giyilebilirler, fitness, akıllı kilitler, medikal

MQTT (Wi-Fi / hücresel)

Sınırsız (bulut)

Orta

50-200ms

Ev otomasyonu, filo izleme, sensör panoları

WebSocket

Sınırsız (bulut)

Orta-yüksek

50ms altı

Çift yönlü kontrol, kullanıcı komutlu canlı panolar

LoRa / NB-IoT

Kilometreler

Çok düşük

Saniyeler

Tarım, endüstriyel, düşük sinyal bölgelerinde GPS

HTTP REST

Sınırsız

Orta

100-500ms

Seyrek güncellemeler, yapılandırma push, zamana duyarsız veri

BLE, cihazın kullanıcıya fiziksel olarak yakın olduğu ve cihazdaki pil ömrünün önemli olduğu durumlarda doğru seçimdir. Giyilebilirler, fitness ekipmanları, akıllı kilitler ve medikal sensörler klasik örneklerdir. Eclipse Foundation'ın 2025 IoT Geliştirici Araştırması'na göre IoT geliştiricilerinin yüzde 83'ü MQTT kullanır; hafif yapısı, güvenilmez ağlarda çalışması ve yapılandırılabilir kalite seviyelerinde garantili teslimat desteği bu tercihin temel nedenidir. AWS IoT Core, yönetilen bir MQTT broker olarak kendi altyapınızı çalıştırmanın operasyonel yükünü ortadan kaldırır.

WebSocket, mobil uygulamanın cihaza veya buluta 100ms altı gidiş-dönüşle komut göndermesi gerektiğinde uygundur. Kullanıcının cihaz ayarlarını gerçek zamanlı değiştirdiği bir kontrol arayüzü WebSocket kullanım durumudur. Salt okunur sensör panosu değildir; bunu SSE veya MQTT çok daha az altyapı karmaşıklığıyla karşılar.

En pahalı protokol hatası, her şey için varsayılan olarak WebSocket'i seçmektir. WebSocket bağlantıları durum bilgilidir, yük dengeleyicilerde yapışkan oturum yapılandırması gerektirir ve hem iOS hem de Android'de mobil işletim sisteminin ağ yönetimi tarafından agresif bir biçimde sonlandırılır. Saniyede birkaç kez güncellenen panolar için SSE veya MQTT, çok daha düşük bir operasyonel karmaşıklıkla birebir aynı kullanıcı deneyimini sunar.

Flutter'da BLE iletişimi flutter_blue_plus gibi paketlerle sağlanır; ancak implementasyon, paketin gösterdiği kadar basit değildir. BLE bağlantıları durum bilgili ve kırılgandır.Tarama, bağlanıyor, bağlı, bağlantı kesiliyor ve hata durumlarını açıkça tanımlayan bir Connection Manager kullanmak bir tercih değil, zorunluluktur. Bu yapı, kopan bağlantılar ve başarısız eşleştirme akışlarından kaynaklanan destek taleplerinin büyük çoğunluğunu önler.

Gerçek Zamanlı Veri: Mobilde "Canlı"nın Gerçek Maliyeti

Gerçek zamanlı kavramı, IoT ürün spesifikasyonlarında en fazla anlam yüklenen terimlerden biridir. Kullanıcı için 'canlı veri', ekrandaki sayının sensörün o anda ölçtüğü değeri yansıtması demektir. Bunun mimarideki karşılığı ise tamamen güncelleme frekansına bağlıdır; maliyeti belirleyen de bu frekanstır.

  • 500ms veya daha hızlı güncellenen sensör verisi: QoS 0 ile WebSocket veya MQTT. Bu frekansta onay mesajlarının (ACK) getirdiği ek yük (overhead), neden olduğu gecikmeye değmez.

  • 1 ila 10 saniyede bir güncelleme: QoS 1 ile MQTT veya buluttan SSE. Güvenilir, hafif, altyapı karmaşıklığı olmadan ölçeklenir.

  • 30 saniye veya daha yavaş güncelleme: HTTP polling. Build etmesi basit, hata ayıklaması kolay, kalıcı bağlantı ek yükü sıfır.

UX sorusu teknik soru kadar belirleyicidir. Sıcaklık sensörü okuyan kullanıcı 500ms güncellemeye ihtiyaç duymaz. Hastanın oksijen satürasyonunu izleyen cerrah duyar. Polling aralığı cihazın kapasitesine değil, kullanıcının gerçek karar hızına göre belirlenir.

Ham sensör değerlerini doğrudan ekrana yansıtmak nadiren doğru tasarımdır. Saniyede 20 kez değişen sayı bilgi değil, gürültüdür. Mobil katman veriyi render etmeden önce yumuşatmalı, toplamalı veya eşiklemelidir. Bu bir performans optimizasyonu değil, ürün kararıdır.

Canlı değerlerin yanında geçmiş verileri de göstermesi gereken uygulamalar için InfluxDB, TimescaleDB veya Amazon Timestream gibi bir zaman serisi arka ucu doğru seçimdir. Sensör olaylarını ilişkisel veritabanında saklamak, kullanıcı yüksek çözünürlükte son 30 günü görüntülemek istediği anda sorgu performans sorunları üretir.

Çevrimdışı Davranış: Çoğu Ekibin Çok Geç Aldığı Karar

Her IoT mobil uygulama, güvenilmez bağlantının olduğu bir ortamda kullanılacaktır. Depolar, inşaat alanları, hastane katları, kırsal bölgeler ve metro istasyonları yaygın dağıtım ortamlarıdır. Soru uygulamanın çevrimdışı senaryoları yönetip yönetmeyeceği değildir. Soru, arka uca ulaşamadığında ne yapacağıdır.

Üç geçerli strateji vardır ve seçim, kullanıcının harekete geçmek için hangi veriye ihtiyaç duyduğuna bağlıdır:

  • Salt okunur önbellek. Uygulama bilinen son cihaz durumunu yerel olarak saklar ve çevrimdışı olduğunda net zaman damgasıyla görüntüler. Yazmalar engellenir ya da kullanıcıya bildirimle kuyruğa alınır. Çoğu tüketici IoT uygulaması için doğru varsayılan budur.

  • Senkronizasyon kuyruğuyla çevrimdışı öncelik. Tüm kullanıcı aksiyonları önce yerel olarak yazılır, senkronizasyon için kuyruğa alınır ve bağlantı döndüğünde arka uca iletilir. Çakışmalar zaman damgasıyla veya kullanıcıya gösterilerek çözülür. Saha servis uygulamaları, medikal cihazlar ve kullanıcının bağlantıdan bağımsız çalışmaya devam etmesi gereken uygulamalar için doğru yapı budur.

  • Bağlantı durumuna duyarlı arayüz. Uygulama bağlantı kaybını tespit eder ve arayüzünü açıkça düşürür: gerçek zamanlı grafikleri ve bulut gidiş-dönüşü gerektiren komutları devre dışı bırakır, kullanıcıyı bilgilendirir ve işlevsel tutar. Bulut bağlantısı olmaksızın BLE üzerinden cihaza erişimin sürdüğü durumlarda uygundur.

Flutter'da çevrimdışı öncelikli yapı bir yerel veritabanı (sqflite veya Drift üzerinden SQLite ya da daha basit şemalar için Hive), bir bağlantı dinleyicisi (connectivity_plus) ve bekleyen yazmaların kuyruğunu işleyen bir senkronizasyon motoru gerektirir. Çakışma çözüm stratejisi implementasyondan önce belirlenmek zorundadır; sonradan eklemek küçük bir özellik ekleme değil, büyük bir yeniden yazımdır. Zaman damgası bazlı son yazan kazanır stratejisi çoğu tüketici uygulaması için yeterlidir. İşbirlikçi veya güvenlik açısından kritik veriler için birleştirme stratejileri ya da kullanıcıya yönelik çakışma arayüzü gerekir.

Çoğu ekibin gözden kaçırdığı ayrıntı: senkronizasyon kuyruğu uygulama yeniden başlatmalarında hayatta kalmalıdır. Bekleyen aksiyonları yalnızca belleğe yazmak çevrimdışı öncelikli değildir. Uygulama kapanınca her şey gider.

UX Katmanı: Cihaz Karmaşıklığının Ekranla Buluştuğu Yer

IoT uygulamalarının çoğu diğer uygulama kategorisinde karşılaşılmayan bir UX sorunu vardır. Cihaz katmanı sürekli veri üretir, kendi programında çalışır ve kullanıcının tanıyamayabileceği biçimlerde bozulur. Mobil arayüz tüm bunları karmaşıklık değil, güven ileten bir yüzeye dönüştürmek zorundadır.

Bir IoT mobil uygulamasının güvenilir hissettirip hissettirmeyeceğini belirleyen dört UX kararı:

Bağlantı durumu görünürlüğü. Kullanıcı her zaman uygulamanın cihaza bağlı mı, buluta bağlı ama cihaza değil mi, yoksa önbellekten mi çalıştığını bilmelidir. Kalıcı bir durum göstergesi modal uyarılardan daha etkilidir. Temiz görünmek için bağlantı durumunu gizlemek, bir şeyler ters gittiğinde kullanıcı kargaşasını garantiler.

Komut onay örüntüleri. Kullanıcı cihaza vana kapatma, kapı kilitleme veya bir değeri ayarlama gibi bir komut gönderdiğinde, uygulama yalnızca komutun iletildiğini değil,bu komutu yerine getirdiğini de doğrulamalıdır. Bu durum, komut sonrasında cihazdan durum bilgisini tekrar okumayı gerektirir. Bu döngü için gecikme bütçesi genellikle 500 ms ila 2 saniye arasındadır; bu süre aşıldığında kullanıcı bir şeylerin bozulduğunu varsayar.

Uyarı eşik tasarımı. IoT uygulamaları sensör değerleri eşik aştığında bildirim gönderir. Eşik arayüzü bir kalibrasyon arayüzüdür ve çoğu ekip bunu yetersiz tasarlar. Çok fazla uyarı alan kullanıcılar bildirimleri kapatır. Belirsiz uyarılar alan kullanıcılar görmezden gelir. Makul varsayılan değerler, net ölçü birimleri ve belirgin bir erteleme mekanizması, zorunlu özelliklerdir.

Eşleştirme ve onboarding akışı. BLE cihaz eşleştirmesi, kullanıcının uygulama üzerinden cihazla ilk etkileşimidir; çoğu IoT uygulamasının kullanıcıları kalıcı olarak kaybettiği yerdir. Eşleştirme akışı Bluetooth'un kapalı olduğu, konum izninin eksik olduğu (Android'de BLE tarama için zorunludur), cihazın eşleştirme modunda olmadığı ve taramanın sessizce başarısız olduğu durumları yönetmek zorundadır. EventKit ve platform izin API'leri, hem SwiftUI hem de Jetpack Compose tarafında, bir dizi kullanıcı şikayetinden sonra değil, en başından itibaren entegre edilmelidir.

Flutter ile sağlık, fitness veya kurumsal IoT kategorilerinde mobil uygulama geliştiren ekipler için cihaz entegrasyonu, gerçek zamanlı veri katmanı ve çevrimdışı öncelikli mimari, bağlantı hatalarından oluşan bir sprint sonrasında değil, mobil uygulama geliştirme sürecinin ilk adımlarında kurgulanır.

Sıkça Sorulan Sorular

BLE tabanlı bir IoT mobil uygulaması için doğru protokol nedir?

Neon Apps, IoT mobil projelerinde gerçek zamanlı veri mimarisine nasıl yaklaşır?

IoT mobil uygulamasında WebSocket ne zaman MQTT'nin önüne geçer?

Neon Apps, çevrimdışı öncelikli IoT mobil uygulamaları geliştiriyor mu?

IoT mobil uygulama geliştirmede en yaygın UX hataları neler?

İlham Almaya Devam Et

Yeni tasarım içgörüleri, makaleler ve kaynaklar doğrudan gelen kutunuza gelsin.

Neon Apps ekibinden hikayeler, içgörüler ve güncellemeleri doğrudan gelen kutunuza alın.

Son Bloglar

İlham Almaya Devam Et

Neon Apps ekibinden hikayeler, içgörüler ve güncellemeler doğrudan gelen kutunuza gelsin.

Bir projeniz mi var?

Bize Ulaşın

Bir projeniz mi var? Startup'lar ve küresel markalar için dünya standartlarında mobil ve web uygulamaları geliştiriyoruz.

İletişim

Email
support@neonapps.co

Whatsapp
+90 552 733 43 99

Adres

New York Ofis : 31 Hudson Yards, 11th Floor 10065
New York/ United States

İstanbul Ofis : Huzur Mah. Fazıl Kaftanoğlu Caddesi
No:7 Kat:10 Sarıyer/İstanbul

© 2025 Copyright. Tüm Hakları Neon Apps'e Aittir.

Neon Apps, İstanbul ve New York ofislerinde 85 kişilik kendi ekibiyle mobil, web ve SaaS projeleri hayata geçiren bir ürün geliştirme şirketidir. Uzun vadeli bir çözüm ortağı olarak, markalar için ölçeklenebilir dijital ürünler üretiyoruz.