{"id":31123,"date":"2025-10-06T02:01:34","date_gmt":"2025-10-05T23:01:34","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/kotlin-multiplatform-ile-iot-uygulamasi-gelistirme-rehberi\/"},"modified":"2025-10-06T02:01:34","modified_gmt":"2025-10-05T23:01:34","slug":"kotlin-multiplatform-ile-iot-uygulamasi-gelistirme-rehberi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/kotlin-multiplatform-ile-iot-uygulamasi-gelistirme-rehberi\/","title":{"rendered":"Kotlin Multiplatform ile IoT Uygulamas\u0131 Geli\u015ftirme Rehberi"},"content":{"rendered":"<p><body><\/p>\n<p>Nesnelerin \u0130nterneti (IoT), g\u00fcnl\u00fck hayattan end\u00fcstriyel tesislere kadar her alanda cihazlar\u0131n birbirleriyle ve bulutla ileti\u015fim kurarak veri toplamas\u0131 ve eylemler ger\u00e7ekle\u015ftirmesi konseptidir. Peki, farkl\u0131 i\u015fletim sistemlerinde sorunsuz \u00e7al\u0131\u015fabilen, g\u00fc\u00e7l\u00fc ve verimli bir IoT uygulamas\u0131 geli\u015ftirmek m\u00fcmk\u00fcn m\u00fcd\u00fcr? Kotlin Multiplatform (KMP), bu sorunun cevab\u0131n\u0131 vererek tek bir kod taban\u0131yla hem Android hem de iOS gibi platformlarda IoT uygulamalar\u0131 olu\u015fturman\u0131za olanak tan\u0131r. Bu makale, KMP&#8217;nin IoT d\u00fcnyas\u0131na nas\u0131l entegre edildi\u011fini ve ad\u0131m ad\u0131m kendi uygulaman\u0131z\u0131 nas\u0131l geli\u015ftirebilece\u011finizi detayland\u0131racakt\u0131r.<\/p>\n<p>IoT ekosistemi, ak\u0131ll\u0131 termostatlardan karma\u015f\u0131k end\u00fcstriyel sens\u00f6r a\u011flar\u0131na kadar geni\u015f bir yelpazeyi kapsar. Ancak bu \u00e7e\u015fitlilik, geli\u015ftiriciler i\u00e7in beraberinde bir dizi zorlu\u011fu getirir. En belirgin sorunlardan biri, farkl\u0131 cihazlar ve platformlar i\u00e7in uyumlu uygulamalar olu\u015fturma ihtiyac\u0131d\u0131r. Genellikle, bir mobil IoT uygulamas\u0131 geli\u015ftirmek istedi\u011finizde, Android i\u00e7in Java\/Kotlin ve iOS i\u00e7in Swift\/Objective-C kullanarak iki ayr\u0131 kod taban\u0131 olu\u015fturman\u0131z gerekir. Bu durum, zamanla kod tekrar\u0131na, geli\u015ftirme maliyetlerinin artmas\u0131na ve bak\u0131m\u0131n zorla\u015fmas\u0131na yol a\u00e7ar. Her iki platform i\u00e7in de ayr\u0131 ayr\u0131 geli\u015ftirme yapmak, \u00f6zellik eklemeyi veya hata d\u00fczeltmeyi yava\u015flat\u0131r, \u00e7\u00fcnk\u00fc ayn\u0131 de\u011fi\u015fikli\u011fin iki farkl\u0131 dilde ve ortamda tekrarlanmas\u0131 gerekir. Bu da \u00fcr\u00fcn\u00fcn pazara \u00e7\u0131k\u0131\u015f s\u00fcresini uzat\u0131rken, tutarl\u0131l\u0131k sorunlar\u0131na da zemin haz\u0131rlar.<\/p>\n<p>Di\u011fer bir \u00f6nemli sorun ise IoT cihazlar\u0131yla g\u00fcvenli ve verimli ileti\u015fimi sa\u011flamakt\u0131r. Sens\u00f6rlerden gelen verileri toplamak, bu verileri i\u015flemek ve cihazlara komut g\u00f6ndermek i\u00e7in g\u00fcvenilir ileti\u015fim protokollerine ihtiya\u00e7 vard\u0131r. Genellikle MQTT (Message Queuing Telemetry Transport) gibi hafif ve yay\u0131n\/abone modeline dayal\u0131 protokoller tercih edilir. REST API&#8217;ler ise daha \u00e7ok komut-yan\u0131t tabanl\u0131 i\u015flemler i\u00e7in kullan\u0131l\u0131r. Bu protokollerin her platformda sorunsuz bir \u015fekilde entegre edilmesi ve optimize edilmesi, uygulaman\u0131n performans\u0131 ve kullan\u0131c\u0131 deneyimi a\u00e7\u0131s\u0131ndan kritik \u00f6neme sahiptir. \u00d6rne\u011fin, bir ak\u0131ll\u0131 ev uygulamas\u0131nda, kullan\u0131c\u0131 bir lambay\u0131 a\u00e7t\u0131\u011f\u0131nda bu komutun an\u0131nda cihaza iletilmesi ve cihaz\u0131n durumunun an\u0131nda uygulamaya yans\u0131mas\u0131 beklenir. Gecikmeler veya ba\u011flant\u0131 kopukluklar\u0131, kullan\u0131c\u0131 memnuniyetsizli\u011fine yol a\u00e7abilir.<\/p>\n<p>Veri g\u00fcvenli\u011fi ve gizlili\u011fi de IoT uygulamalar\u0131n\u0131n temel ta\u015flar\u0131ndan biridir. Cihazlardan toplanan hassas verilerin (\u00f6rne\u011fin sa\u011fl\u0131k verileri, konum bilgileri) yetkisiz eri\u015fime kar\u015f\u0131 korunmas\u0131, \u015fifreleme mekanizmalar\u0131 ve g\u00fc\u00e7l\u00fc kimlik do\u011frulama y\u00f6ntemleri gerektirir. Her iki platformda da bu g\u00fcvenlik \u00f6nlemlerini tutarl\u0131 bir \u015fekilde uygulamak, geli\u015ftiricilerin \u00fczerinde durmas\u0131 gereken bir di\u011fer aland\u0131r. KMP, bu noktada devreye girerek ortak bir mant\u0131k katman\u0131 olu\u015fturulmas\u0131na olanak tan\u0131r. Bu sayede, ileti\u015fim protokollerinin entegrasyonu, veri i\u015fleme mant\u0131\u011f\u0131 ve g\u00fcvenlik \u00f6nlemleri tek bir yerde geli\u015ftirilir ve farkl\u0131 platformlarda yeniden kullan\u0131labilir. B\u00f6ylece, kodun tekrar\u0131n\u0131 \u00f6nlerken, tutarl\u0131l\u0131\u011f\u0131 ve bak\u0131m kolayl\u0131\u011f\u0131n\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde art\u0131r\u0131r. Bu da geli\u015ftiricilerin platforma \u00f6zel detaylarla u\u011fra\u015fmak yerine, uygulaman\u0131n temel i\u015flevselli\u011fine ve kullan\u0131c\u0131 deneyimine odaklanmas\u0131na yard\u0131mc\u0131 olur.<\/p>\n<h2>Kotlin Multiplatform (KMP) Nedir ve IoT \u0130\u00e7in Neden \u0130dealdir?<\/h2>\n<p>Kotlin Multiplatform (KMP), tek bir kod taban\u0131ndan Android, iOS, web, masa\u00fcst\u00fc ve hatta backend uygulamalar\u0131 i\u00e7in kod payla\u015f\u0131m\u0131 yap\u0131lmas\u0131na olanak tan\u0131yan devrim niteli\u011finde bir teknolojidir. Geleneksel yakla\u015f\u0131mlar, her platform i\u00e7in ayr\u0131 ayr\u0131 kod yazmay\u0131 gerektirirken, KMP bu sorunu ortadan kald\u0131r\u0131r. Temel prensibi, uygulaman\u0131n i\u015f mant\u0131\u011f\u0131n\u0131, veri modellerini, a\u011f katman\u0131n\u0131 ve di\u011fer platformdan ba\u011f\u0131ms\u0131z bile\u015fenleri ortak bir mod\u00fclde (<code>commonMain<\/code>) geli\u015ftirmektir. Bu ortak mod\u00fcl, Kotlin dilinde yaz\u0131l\u0131r ve platforma \u00f6zel API&#8217;lere do\u011frudan ba\u011f\u0131ml\u0131l\u0131k i\u00e7ermez. Platforma \u00f6zg\u00fc \u00f6zelliklere (\u00f6rne\u011fin sens\u00f6r eri\u015fimi, yerel depolama API&#8217;leri) ihtiya\u00e7 duyuldu\u011funda ise <code>expect<\/code>\/<code>actual<\/code> mekanizmas\u0131 kullan\u0131l\u0131r. Ortak mod\u00fclde bir <code>expect<\/code> deklarasyonu yap\u0131l\u0131r ve her platform mod\u00fcl\u00fc (<code>androidMain<\/code>, <code>iosMain<\/code> gibi) bu <code>expect<\/code> deklarasyonuna kar\u015f\u0131l\u0131k gelen platforma \u00f6zg\u00fc bir <code>actual<\/code> implementasyon sa\u011flar.<\/p>\n<p>IoT uygulamalar\u0131 i\u00e7in KMP&#8217;nin ideal olmas\u0131n\u0131n birka\u00e7 temel nedeni vard\u0131r. \u00d6ncelikle, <strong>maliyet ve zaman tasarrufu<\/strong> sa\u011flar. Tek bir ekip, tek bir dil (Kotlin) kullanarak birden fazla platform i\u00e7in uygulama geli\u015ftirebilir. Bu, hem geli\u015ftirme s\u00fcresini k\u0131salt\u0131r hem de insan kayna\u011f\u0131 maliyetlerini d\u00fc\u015f\u00fcr\u00fcr. \u0130kincisi, <strong>kod taban\u0131 tutarl\u0131l\u0131\u011f\u0131<\/strong> artar. \u0130\u015f mant\u0131\u011f\u0131 tek bir yerde tan\u0131mland\u0131\u011f\u0131 i\u00e7in, farkl\u0131 platformlardaki uygulamalar\u0131n ayn\u0131 \u015fekilde davranmas\u0131 garanti edilir. Bu da hatalar\u0131n azalmas\u0131na ve kullan\u0131c\u0131 deneyiminin iyile\u015fmesine katk\u0131da bulunur. \u00dc\u00e7\u00fcnc\u00fcs\u00fc, KMP, IoT cihazlar\u0131yla ileti\u015fim kurmak i\u00e7in kullan\u0131lan protokollerin (MQTT, REST API vb.) entegrasyonunu b\u00fcy\u00fck \u00f6l\u00e7\u00fcde kolayla\u015ft\u0131r\u0131r. \u00d6rne\u011fin, bir MQTT istemcisi veya bir HTTP istemcisi (Ktor gibi) ortak mod\u00fclde tan\u0131mlanabilir ve bu istemci \u00fczerinden cihazlarla ileti\u015fim kuran t\u00fcm mant\u0131k tek bir yerde y\u00f6netilebilir.<\/p>\n<p>Bir vaka analizi olarak, basit bir ak\u0131ll\u0131 ev sistemi d\u00fc\u015f\u00fcnelim. Bu sistemde ak\u0131ll\u0131 bir termostat ve ak\u0131ll\u0131 bir lamba bulunmaktad\u0131r. Kullan\u0131c\u0131, mobil uygulamas\u0131 \u00fczerinden hem termostat\u0131n s\u0131cakl\u0131\u011f\u0131n\u0131 ayarlayabilir hem de lambay\u0131 a\u00e7\u0131p kapatabilir. KMP olmadan, bu uygulama i\u00e7in hem Android hem de iOS i\u00e7in ayr\u0131 ayr\u0131 iki mobil uygulama geli\u015ftirilmesi gerekirdi. Her iki uygulama da MQTT \u00fczerinden cihazlarla ileti\u015fim kuracak, cihaz durumlar\u0131n\u0131 g\u00f6sterecek ve kullan\u0131c\u0131n\u0131n komutlar\u0131n\u0131 cihaza iletecekti. Bu, iki ayr\u0131 MQTT istemcisi entegrasyonu, iki ayr\u0131 durum y\u00f6netimi ve iki ayr\u0131 kullan\u0131c\u0131 aray\u00fcz\u00fc anlam\u0131na gelirdi. KMP ile ise:<\/p>\n<ol>\n<li>Termostat ve lamba i\u00e7in veri modelleri (\u00f6rne\u011fin <code>data class TermostatDurumu(val sicaklik: Int, val mod: String)<\/code>) <code>commonMain<\/code> mod\u00fcl\u00fcnde tan\u0131mlan\u0131r.<\/li>\n<li>MQTT broker ile ileti\u015fim kuracak bir servis katman\u0131 (\u00f6rne\u011fin <code>MqttService<\/code>) <code>commonMain<\/code> mod\u00fcl\u00fcnde geli\u015ftirilir. Bu servis, MQTT mesajlar\u0131n\u0131 yay\u0131nlama ve abone olma mant\u0131\u011f\u0131n\u0131 i\u00e7erir. Kotlin Coroutines ve Flow kullan\u0131larak asenkron ileti\u015fim kolayca y\u00f6netilebilir.<\/li>\n<li>Kullan\u0131c\u0131 komutlar\u0131n\u0131 (s\u0131cakl\u0131k de\u011fi\u015ftirme, lamba a\u00e7ma\/kapama) i\u015fleyen ve MQTT \u00fczerinden ilgili cihazlara g\u00f6nderen i\u015f mant\u0131\u011f\u0131 (\u00f6rne\u011fin <code>AkilliEvKontrolcu<\/code>) yine <code>commonMain<\/code> mod\u00fcl\u00fcnde yer al\u0131r.<\/li>\n<li>Platforma \u00f6zel UI (Android i\u00e7in Jetpack Compose, iOS i\u00e7in SwiftUI veya UIKit) kendi mod\u00fcllerinde (<code>androidMain<\/code>, <code>iosMain<\/code>) geli\u015ftirilir. Bu UI katmanlar\u0131, <code>commonMain<\/code>&#8216;deki i\u015f mant\u0131\u011f\u0131na eri\u015ferek cihaz durumlar\u0131n\u0131 g\u00f6sterir ve kullan\u0131c\u0131dan gelen etkile\u015fimleri i\u015fler.<\/li>\n<\/ol>\n<p>B\u00f6ylece, sistemin \u00e7ekirdek i\u015flevselli\u011fi tek bir yerde geli\u015ftirilirken, kullan\u0131c\u0131 aray\u00fcz\u00fc her platformun kendi do\u011fal ara\u00e7lar\u0131yla olu\u015fturularak en iyi kullan\u0131c\u0131 deneyimi sunulur. Bu yakla\u015f\u0131m, sadece geli\u015ftirme s\u00fcrecini h\u0131zland\u0131rmakla kalmaz, ayn\u0131 zamanda IoT uygulamalar\u0131n\u0131n karma\u015f\u0131kl\u0131\u011f\u0131n\u0131 ve bak\u0131m y\u00fck\u00fcn\u00fc \u00f6nemli \u00f6l\u00e7\u00fcde azalt\u0131r.<\/p>\n<h2>Bir IoT Uygulamas\u0131 KMP ile Nas\u0131l Tasarlan\u0131r? Mimari ve Geli\u015ftirme Ad\u0131mlar\u0131<\/h2>\n<p>Kotlin Multiplatform (KMP) kullanarak bir IoT uygulamas\u0131n\u0131 tasarlarken, uygulaman\u0131n mimarisi, farkl\u0131 platformlar aras\u0131nda kod payla\u015f\u0131m\u0131n\u0131 en \u00fcst d\u00fczeye \u00e7\u0131karacak ve platforma \u00f6zg\u00fc ihtiya\u00e7lar\u0131 esnek bir \u015fekilde kar\u015f\u0131layacak \u015fekilde d\u00fczenlenmelidir. Genellikle uygulaman\u0131n mimarisi \u015fu ana bile\u015fenlerden olu\u015fur: IoT Cihaz\u0131, IoT Broker (\u00f6rn. MQTT Broker), Backend Servisleri ve KMP Uygulamas\u0131. KMP uygulamas\u0131 i\u00e7inde ise \u00fc\u00e7 ana katman bulunur: Ortak Mod\u00fcl (<code>commonMain<\/code>), Platforma \u00d6zel Mod\u00fcller (<code>androidMain<\/code>, <code>iosMain<\/code>, <code>desktopMain<\/code>, <code>jsMain<\/code>) ve sunum katman\u0131 (UI).<\/p>\n<h3>KMP Proje Yap\u0131s\u0131 ve Ortak Mod\u00fcl\u00fcn Rol\u00fc<\/h3>\n<p>KMP projesi, mod\u00fcler bir yap\u0131ya sahiptir. Temel olarak bir &#8220;shared&#8221; veya &#8220;common&#8221; mod\u00fcl ile ba\u015flar\u0131z. Bu mod\u00fcl, uygulaman\u0131n \u00e7ekirdek i\u015f mant\u0131\u011f\u0131n\u0131, veri modellerini, a\u011f katman\u0131n\u0131 ve genel utility fonksiyonlar\u0131n\u0131 i\u00e7erir. IoT ba\u011flam\u0131nda bu, MQTT istemci entegrasyonu, sens\u00f6r verilerini i\u015fleme mant\u0131\u011f\u0131, cihaz komutlar\u0131n\u0131 olu\u015fturma ve backend API \u00e7a\u011fr\u0131lar\u0131 gibi kritik bile\u015fenleri bar\u0131nd\u0131r\u0131r. Bu sayede, bu mant\u0131k par\u00e7alar\u0131 bir kez yaz\u0131l\u0131r ve t\u00fcm platformlarda yeniden kullan\u0131l\u0131r. Bu, kod tekrar\u0131n\u0131 ortadan kald\u0131r\u0131r ve geli\u015ftirme s\u00fcrecini b\u00fcy\u00fck \u00f6l\u00e7\u00fcde h\u0131zland\u0131r\u0131r.<\/p>\n<p>Platforma \u00f6zel mod\u00fcller ise (\u00f6rne\u011fin <code>androidMain<\/code>, <code>iosMain<\/code>), <code>commonMain<\/code>&#8216;deki mant\u0131\u011f\u0131 kullanarak platforma \u00f6zg\u00fc aray\u00fcz\u00fc (UI) olu\u015fturur ve platformun kendi API&#8217;lerine eri\u015fim sa\u011flar. \u00d6rne\u011fin, bir Android uygulamas\u0131nda Jetpack Compose kullan\u0131larak UI olu\u015fturulurken, iOS uygulamas\u0131nda SwiftUI veya UIKit tercih edilebilir. E\u011fer <code>commonMain<\/code>&#8216;de platforma \u00f6zg\u00fc bir fonksiyonelli\u011fe ihtiya\u00e7 duyulursa (\u00f6rne\u011fin, cihaz\u0131n pil seviyesini okuma), <code>expect<\/code>\/<code>actual<\/code> mekanizmas\u0131 devreye girer. Ortak mod\u00fclde <code>expect fun getBatteryLevel(): Int<\/code> gibi bir deklarasyon yap\u0131l\u0131r, her platform mod\u00fcl\u00fcnde ise bu fonksiyonun platforma \u00f6zg\u00fc implementasyonu (<code>actual fun getBatteryLevel(): Int = ...<\/code>) sa\u011flan\u0131r.<\/p>\n<h4>\u00d6rnek Bir <code>build.gradle.kts<\/code> Yap\u0131s\u0131<\/h4>\n<p>Bir KMP projesinin <code>build.gradle.kts<\/code> dosyas\u0131, bu mod\u00fcler yap\u0131y\u0131 tan\u0131mlar. \u0130\u015fte basitle\u015ftirilmi\u015f bir \u00f6rnek:<\/p>\n<pre><code class=\"language-kotlin\">\n\/\/ common\/build.gradle.kts\nplugins {\n    kotlin(\"multiplatform\")\n    kotlin(\"native-cocoapods\") \/\/ iOS entegrasyonu i\u00e7in\n    id(\"com.android.library\")\n}\n\nkotlin {\n    androidTarget {\n        compilations.all {\n            kotlinOptions.jvmTarget = \"1.8\"\n        }\n    }\n    iosX64()\n    iosArm64()\n    iosSimulatorArm64()\n\n    sourceSets {\n        val commonMain by getting {\n            dependencies {\n                implementation(\"org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3\")\n                implementation(\"io.ktor:ktor-client-core:2.3.8\")\n                \/\/ MQTT istemcisi i\u00e7in \u00f6rnek bir KMP uyumlu k\u00fct\u00fcphane\n                \/\/ Bu \u00f6rnekte kmp-mqtt-client gibi bir k\u00fct\u00fcphane varsay\u0131lm\u0131\u015ft\u0131r\n                implementation(\"com.example.mqtt:kmp-mqtt-client:1.0.0\")\n            }\n        }\n        val androidMain by getting {\n            dependencies {\n                implementation(\"io.ktor:ktor-client-android:2.3.8\")\n            }\n        }\n        val iosMain by getting {\n            dependencies {\n                implementation(\"io.ktor:ktor-client-darwin:2.3.8\")\n            }\n        }\n    }\n}\n\nandroid {\n    namespace = \"com.example.iot.common\"\n    compileSdk = 34\n    defaultConfig {\n        minSdk = 24\n    }\n    sourceSets[\"main\"].manifest.srcFile(\"src\/androidMain\/AndroidManifest.xml\")\n    compileOptions {\n        sourceCompatibility = JavaVersion.VERSION_1_8\n        targetCompatibility = JavaVersion.VERSION_1_8\n    }\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu yap\u0131, <code>commonMain<\/code> i\u00e7inde temel ba\u011f\u0131ml\u0131l\u0131klar\u0131 (Coroutines, Ktor HTTP istemcisi, varsay\u0131msal bir KMP uyumlu MQTT istemcisi) tan\u0131mlarken, Android ve iOS i\u00e7in platforma \u00f6zel Ktor motorlar\u0131n\u0131 entegre eder. Bu sayede, a\u011f istekleri ve MQTT ileti\u015fimi gibi kritik i\u015flevler tek bir <code>commonMain<\/code> katman\u0131nda geli\u015ftirilebilir.<\/p>\n<aside class=\"tip\">\n        Uzman \u0130pucu: KMP'de asenkron i\u015flemleri y\u00f6netmek i\u00e7in Kotlin Coroutines ve Flow'u yo\u011fun bir \u015fekilde kullanmak, kodunuzu daha okunabilir ve y\u00f6netilebilir hale getirir. \u00d6zellikle IoT uygulamalar\u0131nda s\u0131k\u00e7a kar\u015f\u0131la\u015f\u0131lan ger\u00e7ek zamanl\u0131 veri ak\u0131\u015flar\u0131 i\u00e7in Flow m\u00fckemmel bir \u00e7\u00f6z\u00fcmd\u00fcr.<br \/>\n    <\/aside>\n<h3>IoT Uygulamas\u0131n\u0131n Genel Ak\u0131\u015f\u0131<\/h3>\n<p>IoT uygulamas\u0131 genellikle a\u015fa\u011f\u0131daki ad\u0131mlar\u0131 izler:<\/p>\n<ol>\n<li><strong>Cihazdan Veri Toplama<\/strong>: IoT cihaz\u0131 (sens\u00f6rler arac\u0131l\u0131\u011f\u0131yla) \u00e7evresel verileri toplar (\u00f6rn. s\u0131cakl\u0131k, nem, \u0131\u015f\u0131k).<\/li>\n<li><strong>Veri \u0130letimi<\/strong>: Toplanan veriler MQTT gibi bir protokol arac\u0131l\u0131\u011f\u0131yla bir IoT Broker'a g\u00f6nderilir. Cihazlar ayr\u0131ca REST API'ler arac\u0131l\u0131\u011f\u0131yla bir backend servisiyle de ileti\u015fim kurabilir.<\/li>\n<li><strong>Broker\/Backend \u0130\u015fleme<\/strong>: IoT Broker, mesajlar\u0131 abone olan istemcilere (bu durumda KMP uygulaman\u0131za) da\u011f\u0131t\u0131r. Backend servisleri ise daha karma\u015f\u0131k veri i\u015fleme, depolama ve analiz g\u00f6revlerini \u00fcstlenebilir.<\/li>\n<li><strong>KMP Uygulamas\u0131na Veri Alma<\/strong>: KMP uygulaman\u0131z (<code>commonMain<\/code> katman\u0131ndaki a\u011f istemcisi arac\u0131l\u0131\u011f\u0131yla) IoT Broker'a abone olur veya backend API'lerini \u00e7a\u011f\u0131rarak verileri al\u0131r.<\/li>\n<li><strong>Veri \u0130\u015fleme ve Sunum<\/strong>: Al\u0131nan veriler <code>commonMain<\/code>'deki i\u015f mant\u0131\u011f\u0131 taraf\u0131ndan i\u015flenir (\u00f6rn. birimleri d\u00f6n\u00fc\u015ft\u00fcrme, e\u015fik de\u011ferlerini kontrol etme). Daha sonra bu veriler, platforma \u00f6zel UI katman\u0131nda g\u00f6rselle\u015ftirilir.<\/li>\n<li><strong>Komut G\u00f6nderme<\/strong>: Kullan\u0131c\u0131, uygulama \u00fczerinden cihazlara komut g\u00f6nderdi\u011finde (\u00f6rn. lambay\u0131 a\u00e7ma, termostat\u0131 ayarlama), bu komutlar yine <code>commonMain<\/code>'deki i\u015f mant\u0131\u011f\u0131 taraf\u0131ndan haz\u0131rlan\u0131r ve MQTT arac\u0131l\u0131\u011f\u0131yla veya REST API ile IoT cihaz\u0131na veya backend'e iletilir.<\/li>\n<\/ol>\n<p>Bu ad\u0131mlar\u0131n tamam\u0131, KMP'nin ortak kod payla\u015f\u0131m yetenekleri sayesinde daha verimli ve tutarl\u0131 bir \u015fekilde y\u00f6netilebilir. \u00d6zellikle a\u011f ileti\u015fimi ve veri i\u015fleme mant\u0131\u011f\u0131n\u0131n <code>commonMain<\/code> mod\u00fcl\u00fcnde toplanmas\u0131, farkl\u0131 platformlarda ayn\u0131 davran\u0131\u015f\u0131n garanti edilmesini sa\u011flar.<\/p>\n<h2>IoT Cihazlar\u0131yla \u0130leti\u015fim Kurmak \u0130\u00e7in Hangi Y\u00f6ntemler Kullan\u0131l\u0131r?<\/h2>\n<p>IoT cihazlar\u0131yla KMP uygulamas\u0131 aras\u0131nda k\u00f6pr\u00fc kurmak, uygulaman\u0131n temel i\u015flevselli\u011finin kalbidir. Bu ileti\u015fim, genellikle iki ana y\u00f6ntemle ger\u00e7ekle\u015ftirilir: MQTT istemcileri ve REST API'ler. Her iki y\u00f6ntem de KMP'nin ortak mod\u00fcl\u00fcnde (<code>commonMain<\/code>) entegre edilebilir, b\u00f6ylece platformlar aras\u0131 tutarl\u0131l\u0131k sa\u011flan\u0131r ve kod tekrar\u0131 \u00f6nlenir.<\/p>\n<h3>MQTT \u0130stemcisi Entegrasyonu: Ger\u00e7ek Zamanl\u0131 Veri Ak\u0131\u015f\u0131<\/h3>\n<p>MQTT (Message Queuing Telemetry Transport), d\u00fc\u015f\u00fck bant geni\u015fli\u011fine sahip ve g\u00fcvenilmez a\u011flar i\u00e7in tasarlanm\u0131\u015f, hafif bir mesajla\u015fma protokol\u00fcd\u00fcr. \u00d6zellikle IoT d\u00fcnyas\u0131nda sens\u00f6r verilerinin ger\u00e7ek zamanl\u0131 olarak iletilmesi ve cihazlar\u0131n uzaktan kontrol\u00fc i\u00e7in idealdir. KMP uygulaman\u0131zda bir MQTT istemcisini entegre ederek, IoT cihazlar\u0131ndan gelen verilere abone olabilir ve cihazlara komut yay\u0131nlayabilirsiniz.<\/p>\n<p>KMP i\u00e7in \u00e7e\u015fitli MQTT istemci k\u00fct\u00fcphaneleri bulunmaktad\u0131r. E\u011fer direkt olarak KMP uyumlu bir k\u00fct\u00fcphane bulamazsan\u0131z, Java tabanl\u0131 bir MQTT istemcisini (\u00f6rne\u011fin Eclipse Paho) Android i\u00e7in <code>androidMain<\/code> mod\u00fcl\u00fcnde, Swift tabanl\u0131 birini (\u00f6rne\u011fin Mosquitto) ise <code>iosMain<\/code> mod\u00fcl\u00fcnde <code>expect<\/code>\/<code>actual<\/code> mekanizmas\u0131yla entegre edebilirsiniz. Ancak KMP destekli bir k\u00fct\u00fcphane, direkt olarak <code>commonMain<\/code> i\u00e7inde kullan\u0131labildi\u011fi i\u00e7in tercih edilmelidir.<\/p>\n<p>\u0130leti\u015fim genellikle Kotlin Coroutines ve Flow ile non-blocking (engellemeyen) bir \u015fekilde y\u00f6netilir. Bu, uygulaman\u0131n UI'\u0131n\u0131n donmamas\u0131n\u0131 ve e\u015f zamanl\u0131 olarak birden fazla veri ak\u0131\u015f\u0131n\u0131 veya komut i\u015flemini y\u00f6netmesini sa\u011flar. \u0130\u015fte basitle\u015ftirilmi\u015f bir MQTT istemci \u00f6rne\u011fi:<\/p>\n<pre><code class=\"language-kotlin\">\n\/\/ commonMain\/src\/commonMain\/kotlin\/com\/example\/iot\/MqttService.kt\npackage com.example.iot\n\nimport kotlinx.coroutines.flow.Flow\nimport kotlinx.coroutines.flow.MutableSharedFlow\nimport kotlinx.coroutines.flow.asSharedFlow\n\n\/\/ Bu bir expect\/actual mekanizmas\u0131 \u00f6rne\u011fi olabilir, veya do\u011frudan KMP uyumlu bir k\u00fct\u00fcphane kullan\u0131labilir.\nexpect class PlatformMqttClient {\n    fun connect(brokerUrl: String, clientId: String)\n    fun disconnect()\n    fun subscribe(topic: String)\n    fun publish(topic: String, message: String)\n    val messages: Flow<Pair<String, String>>\n}\n\nclass MqttService(private val client: PlatformMqttClient) {\n\n    private val _receivedMessages = MutableSharedFlow<Pair<String, String>>()\n    val receivedMessages: Flow<Pair<String, String>> = _receivedMessages.asSharedFlow()\n\n    init {\n        \/\/ PlatformMqttClient'tan gelen mesajlar\u0131 al\u0131p kendi ak\u0131\u015f\u0131m\u0131za aktar\n        client.messages.collectCommon { topic, message ->\n            _receivedMessages.emit(topic to message)\n        }\n    }\n\n    suspend fun connect(brokerUrl: String, clientId: String) {\n        client.connect(brokerUrl, clientId)\n    }\n\n    suspend fun disconnect() {\n        client.disconnect()\n    }\n\n    suspend fun subscribe(topic: String) {\n        client.subscribe(topic)\n    }\n\n    suspend fun publish(topic: String, message: String) {\n        client.publish(topic, message)\n    }\n}\n\n\/\/ commonMain'de Flow.collect'i farkl\u0131 platformlarda kullanmak i\u00e7in bir extension fonksiyon (basitle\u015ftirilmi\u015f)\n\/\/ Ger\u00e7ek bir senaryoda platforma \u00f6zg\u00fc Dispatcher'lar veya lifecycle aware koleksiyonlar gerekebilir\nfun <T> Flow<T>.collectCommon(action: suspend (value: T) -> Unit): AutoCloseable {\n    val job = kotlinx.coroutines.GlobalScope.launch {\n        this@collectCommon.collect(action)\n    }\n    return object : AutoCloseable {\n        override fun close() { job.cancel() }\n    }\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu kodda, <code>PlatformMqttClient<\/code> bir <code>expect<\/code> s\u0131n\u0131f\u0131 olarak tan\u0131mlanabilir ve her platform i\u00e7in ayr\u0131 <code>actual<\/code> implementasyonlar\u0131 sa\u011flan\u0131r. <code>MqttService<\/code> ise <code>commonMain<\/code> i\u00e7inde i\u015f mant\u0131\u011f\u0131n\u0131 bar\u0131nd\u0131r\u0131r ve mesajlar\u0131 bir <code>Flow<\/code> arac\u0131l\u0131\u011f\u0131yla UI katman\u0131na iletir. Bir ak\u0131ll\u0131 termostattan gelen s\u0131cakl\u0131k verilerine abone olmak i\u00e7in <code>mqttService.subscribe(\"home\/thermostat\/temperature\")<\/code> ve bir lambay\u0131 a\u00e7mak i\u00e7in <code>mqttService.publish(\"home\/light\/control\", \"ON\")<\/code> gibi i\u015flemler yap\u0131labilir.<\/p>\n<h3>REST API Kullan\u0131m\u0131: Komut ve Yap\u0131land\u0131rma \u0130\u015flemleri<\/h3>\n<p>Baz\u0131 IoT senaryolar\u0131nda, ger\u00e7ek zamanl\u0131 veri ak\u0131\u015f\u0131ndan ziyade, cihaz ayarlar\u0131n\u0131 de\u011fi\u015ftirmek, ge\u00e7mi\u015f verileri sorgulamak veya daha karma\u015f\u0131k komutlar g\u00f6ndermek gerekebilir. Bu t\u00fcr durumlar i\u00e7in RESTful API'ler tercih edilir. KMP, Ktor Client gibi g\u00fc\u00e7l\u00fc HTTP istemci k\u00fct\u00fcphaneleri sayesinde REST API'lerini <code>commonMain<\/code> i\u00e7inde kolayca entegre etmenizi sa\u011flar.<\/p>\n<pre><code class=\"language-kotlin\">\n\/\/ commonMain\/src\/commonMain\/kotlin\/com\/example\/iot\/ApiService.kt\npackage com.example.iot\n\nimport io.ktor.client.*\nimport io.ktor.client.call.*\nimport io.ktor.client.plugins.contentnegotiation.*\nimport io.ktor.client.request.*\nimport io.ktor.http.*\nimport io.ktor.serialization.kotlinx.json.*\nimport kotlinx.serialization.Serializable\nimport kotlinx.serialization.json.Json\n\n@Serializable\ndata class DeviceStatus(val id: String, val name: String, val temperature: Double, val humidity: Double, val status: String)\n\n@Serializable\ndata class LightControlCommand(val deviceId: String, val state: String)\n\nclass ApiService(private val baseUrl: String) {\n    private val httpClient = HttpClient {\n        install(ContentNegotiation) {\n            json(Json {\n                ignoreUnknownKeys = true\n                prettyPrint = true\n                isLenient = true\n            })\n        }\n    }\n\n    suspend fun getDeviceStatus(deviceId: String): DeviceStatus {\n        return httpClient.get(\"$baseUrl\/devices\/$deviceId\/status\").body()\n    }\n\n    suspend fun sendLightCommand(command: LightControlCommand): String {\n        return httpClient.post(\"$baseUrl\/commands\/light\") {\n            contentType(ContentType.Application.Json)\n            setBody(command)\n        }.body()\n    }\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu <code>ApiService<\/code> s\u0131n\u0131f\u0131, <code>commonMain<\/code> i\u00e7inde tan\u0131mlanm\u0131\u015ft\u0131r ve hem cihaz durumunu almak hem de \u0131\u015f\u0131k kontrol komutlar\u0131 g\u00f6ndermek i\u00e7in kullan\u0131labilir. Ktor Client, JSON serile\u015ftirme\/deserile\u015ftirme i\u00e7in <code>kotlinx.serialization<\/code> ile m\u00fckemmel bir \u015fekilde entegre olur. Bu sayede, uygulaman\u0131z\u0131n farkl\u0131 platformlar\u0131 ayn\u0131 API \u00e7a\u011fr\u0131lar\u0131n\u0131 ve veri modellerini kullanarak backend ile ileti\u015fim kurar.<\/p>\n<p>IoT cihazlar\u0131yla ileti\u015fim kurarken, uygulaman\u0131n hem ger\u00e7ek zamanl\u0131 ak\u0131\u015flar\u0131 (MQTT) hem de yap\u0131land\u0131rma\/komut i\u015flemlerini (REST API) y\u00f6netebilmesi esneklik sa\u011flar. KMP, bu iki farkl\u0131 ileti\u015fim paradigmas\u0131n\u0131 tek bir payla\u015f\u0131lan kod taban\u0131nda birle\u015ftirerek geli\u015ftirme s\u00fcrecini basitle\u015ftirir ve uygulaman\u0131z\u0131n tutarl\u0131 bir \u015fekilde \u00e7al\u0131\u015fmas\u0131n\u0131 garanti eder.<\/p>\n<h3>KMP IoT Uygulamas\u0131nda Veri G\u00f6rselle\u015ftirme ve Kontrol Nas\u0131l Yap\u0131l\u0131r?<\/h3>\n<p>IoT uygulamas\u0131n\u0131n kullan\u0131c\u0131yla etkile\u015fim kurdu\u011fu en \u00f6nemli katman, veri g\u00f6rselle\u015ftirme ve kontrol aray\u00fcz\u00fcd\u00fcr. KMP, bu katmanda da platformlar aras\u0131 UI payla\u015f\u0131m\u0131n\u0131 m\u00fcmk\u00fcn k\u0131larak veya platforma \u00f6zg\u00fc en iyi deneyimi sunarak esneklik sa\u011flar. Jetpack Compose Multiplatform, \u00f6zellikle Android ve masa\u00fcst\u00fc (ve deneysel olarak web\/iOS) i\u00e7in tek bir UI kod taban\u0131yla uygulama geli\u015ftirmeye olanak tan\u0131rken, iOS i\u00e7in SwiftUI\/UIKit gibi yerel \u00e7\u00f6z\u00fcmleri kullanmaya devam etmek de m\u00fcmk\u00fcnd\u00fcr. \u0130deal yakla\u015f\u0131m, payla\u015f\u0131lan i\u015f mant\u0131\u011f\u0131 \u00fczerine her platformun kendi native UI ara\u00e7lar\u0131n\u0131 kullanmas\u0131d\u0131r, bu genellikle en iyi performans\u0131 ve kullan\u0131c\u0131 deneyimini sunar.<\/p>\n<h4>Compose Multiplatform ile Ortak UI Mant\u0131\u011f\u0131<\/h4>\n<p>E\u011fer hem Android hem de masa\u00fcst\u00fc (veya web) i\u00e7in ortak bir UI deneyimi hedefleniyorsa, Jetpack Compose Multiplatform g\u00fc\u00e7l\u00fc bir se\u00e7enektir. Bu yakla\u015f\u0131m, UI bile\u015fenlerini ve d\u00fczenlerini <code>commonMain<\/code> benzeri bir <code>composeApp\/src\/commonMain<\/code> mod\u00fcl\u00fcnde tan\u0131mlaman\u0131za olanak tan\u0131r. iOS i\u00e7in Jetpack Compose Multiplatform hala deneysel a\u015famada olsa da, gelecekte tek bir UI koduyla t\u00fcm platformlar\u0131 hedeflemek m\u00fcmk\u00fcn olabilir.<\/p>\n<p>\u00d6rnek olarak, bir s\u0131cakl\u0131k g\u00f6stergesi ve bir lamba kontrol butonu i\u00e7eren basit bir aray\u00fcz olu\u015ftural\u0131m. UI, <code>commonMain<\/code>'deki <code>MqttService<\/code> veya <code>ApiService<\/code> ile etkile\u015fime girerek verileri alacak ve komutlar\u0131 g\u00f6nderecektir.<\/p>\n<pre><code class=\"language-kotlin\">\n\/\/ composeApp\/src\/commonMain\/kotlin\/com\/example\/iot\/App.kt\npackage com.example.iot\n\nimport androidx.compose.foundation.layout.*\nimport androidx.compose.material.*\nimport androidx.compose.runtime.*\nimport androidx.compose.ui.Alignment\nimport androidx.compose.ui.Modifier\nimport androidx.compose.ui.unit.dp\nimport kotlinx.coroutines.flow.filter\nimport kotlinx.coroutines.launch\n\n\/\/ Varsay\u0131msal olarak MqttService'in commonMain'de tan\u0131mland\u0131\u011f\u0131n\u0131 varsay\u0131yoruz\n\/\/ Ve platforma \u00f6zel MqttClient implementasyonlar\u0131 mevcut.\n\/\/ Ger\u00e7ek uygulamada dependency injection kullan\u0131labilir.\nexpect fun getMqttClient(): PlatformMqttClient\nval mqttService = MqttService(getMqttClient())\n\n@Composable\nfun App() {\n    MaterialTheme {\n        val scope = rememberCoroutineScope()\n        var currentTemperature by remember { mutableStateOf(\"N\/A\") }\n        var lightState by remember { mutableStateOf(\"OFF\") }\n\n        LaunchedEffect(Unit) {\n            scope.launch {\n                mqttService.connect(\"tcp:\/\/broker.hivemq.com:1883\", \"KmpIotClient-${(0..1000).random()}\")\n                mqttService.subscribe(\"home\/thermostat\/temperature\")\n                mqttService.subscribe(\"home\/light\/status\")\n\n                mqttService.receivedMessages.collect { (topic, message) ->\n                    when (topic) {\n                        \"home\/thermostat\/temperature\" -> currentTemperature = message + \"\u00b0C\"\n                        \"home\/light\/status\" -> lightState = message\n                    }\n                }\n            }\n        }\n\n        Column(\n            modifier = Modifier.fillMaxSize().padding(16.dp),\n            horizontalAlignment = Alignment.CenterHorizontally,\n            verticalArrangement = Arrangement.Center\n        ) {\n            Text(\"Ak\u0131ll\u0131 Ev Kontrol\u00fc\", style = MaterialTheme.typography.h4)\n            Spacer(modifier = Modifier.height(32.dp))\n\n            \/\/ S\u0131cakl\u0131k G\u00f6stergesi\n            Card(elevation = 4.dp, modifier = Modifier.fillMaxWidth(0.8f)) {\n                Column(\n                    modifier = Modifier.padding(16.dp),\n                    horizontalAlignment = Alignment.CenterHorizontally\n                ) {\n                    Text(\"Oda S\u0131cakl\u0131\u011f\u0131\", style = MaterialTheme.typography.h5)\n                    Text(currentTemperature, style = MaterialTheme.typography.h2)\n                }\n            }\n            Spacer(modifier = Modifier.height(32.dp))\n\n            \/\/ Lamba Kontrol\u00fc\n            Row(\n                modifier = Modifier.fillMaxWidth(0.8f),\n                horizontalArrangement = Arrangement.SpaceAround,\n                verticalAlignment = Alignment.CenterVertically\n            ) {\n                Text(\"Lamba Durumu: $lightState\", style = MaterialTheme.typography.h6)\n                Button(\n                    onClick = {\n                        scope.launch {\n                            val newState = if (lightState == \"ON\") \"OFF\" else \"ON\"\n                            mqttService.publish(\"home\/light\/control\", newState)\n                        }\n                    },\n                    colors = ButtonDefaults.buttonColors(\n                        backgroundColor = if (lightState == \"ON\") MaterialTheme.colors.primary else MaterialTheme.colors.secondary\n                    )\n                ) {\n                    Text(if (lightState == \"ON\") \"Kapat\" else \"A\u00e7\")\n                }\n            }\n        }\n    }\n}\n    <\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnek, <code>LaunchedEffect<\/code> kullanarak uygulaman\u0131n ba\u015flat\u0131ld\u0131\u011f\u0131nda MQTT ba\u011flant\u0131s\u0131n\u0131 kurdu\u011funu ve gerekli konulara abone oldu\u011funu g\u00f6steriyor. Gelen mesajlar <code>currentTemperature<\/code> ve <code>lightState<\/code> de\u011fi\u015fkenlerini g\u00fcncellerken, kullan\u0131c\u0131 buton arac\u0131l\u0131\u011f\u0131yla lamban\u0131n durumunu de\u011fi\u015ftirmek i\u00e7in bir MQTT mesaj\u0131 yay\u0131nl\u0131yor.<\/p>\n<h4>Mobil Uyumlu Tasar\u0131m ve Platforma \u00d6zg\u00fc UI<\/h4>\n<p>E\u011fer Compose Multiplatform kullanm\u0131yor ve her platform i\u00e7in yerel UI ara\u00e7lar\u0131n\u0131 tercih ediyorsan\u0131z (\u00f6rne\u011fin iOS i\u00e7in SwiftUI), <code>commonMain<\/code>'deki i\u015f mant\u0131\u011f\u0131n\u0131 bir view model veya presenter arac\u0131l\u0131\u011f\u0131yla platforma \u00f6zg\u00fc UI katman\u0131na ba\u011flayabilirsiniz. Bu, KMP'nin en yayg\u0131n kullan\u0131m senaryosudur.<\/p>\n<aside class=\"tip\">\n        Uzman \u0130pucu: Mobil uyumlu HTML veya UI tasar\u0131mlar\u0131 i\u00e7in, CSS <code>@media<\/code> sorgular\u0131 veya Compose'da d\u00fczen y\u00f6neticileri (<code>Modifier.fillMaxWidth()<\/code>, <code>weight()<\/code>) kullanarak farkl\u0131 ekran boyutlar\u0131na ve y\u00f6nlendirmelere otomatik olarak uyum sa\u011flayan esnek tasar\u0131mlar olu\u015fturun. \u00d6rne\u011fin, k\u00fc\u00e7\u00fck ekranlarda dikey d\u00fczen, b\u00fcy\u00fck ekranlarda yatay d\u00fczen tercih edilebilir.<\/p>\n<pre><code class=\"language-css\">\n\/* Sadece mobil cihazlar i\u00e7in ge\u00e7erli stil *\/\n@media screen and (max-width: 768px) {\n    .container {\n        flex-direction: column;\n    }\n}\n        <\/pre>\n<p><\/code><br \/>\n        Bu t\u00fcr yakla\u015f\u0131mlar, farkl\u0131 cihazlarda en iyi kullan\u0131c\u0131 deneyimini sunar.<br \/>\n    <\/aside>\n<p>Sonu\u00e7 olarak, KMP IoT uygulamas\u0131nda veri g\u00f6rselle\u015ftirme ve kontrol, <code>commonMain<\/code>'deki payla\u015f\u0131lan i\u015f mant\u0131\u011f\u0131 ile platforma \u00f6zel veya Compose Multiplatform ile olu\u015fturulmu\u015f UI aras\u0131nda k\u00f6pr\u00fc kurarak ger\u00e7ekle\u015ftirilir. Bu, hem geli\u015ftirme verimlili\u011fini art\u0131r\u0131r hem de kullan\u0131c\u0131lara zengin ve tutarl\u0131 bir deneyim sunar.<\/p>\n<h2>G\u00fcvenlik ve Performans \u0130pu\u00e7lar\u0131: IoT Uygulamalar\u0131n\u0131 Nas\u0131l Optimize Ederiz?<\/h2>\n<p>IoT uygulamalar\u0131nda g\u00fcvenlik ve performans, yaln\u0131zca kullan\u0131c\u0131 deneyimi i\u00e7in de\u011fil, ayn\u0131 zamanda cihazlar\u0131n ve verilerin korunmas\u0131 i\u00e7in de kritik \u00f6neme sahiptir. KMP ile geli\u015ftirilen IoT uygulamalar\u0131nda bu iki alan\u0131 optimize etmek, uzun vadeli ba\u015far\u0131 i\u00e7in vazge\u00e7ilmezdir.<\/p>\n<h3>G\u00fcvenlik \u0130pu\u00e7lar\u0131<\/h3>\n<p>IoT ekosistemi, siber sald\u0131r\u0131lar i\u00e7in geni\u015f bir hedef y\u00fczeyi sunar. Bu nedenle, uygulaman\u0131z\u0131n ba\u015ftan sona g\u00fcvenli olmas\u0131 b\u00fcy\u00fck \u00f6nem ta\u015f\u0131r.<\/p>\n<ol>\n<li>\n            <strong>Veri \u015eifreleme (TLS\/SSL)<\/strong>: Cihaz ile KMP uygulamas\u0131 ve KMP uygulamas\u0131 ile backend\/broker aras\u0131ndaki t\u00fcm ileti\u015fimin \u015fifreli olmas\u0131 zorunludur. MQTT ve REST API ileti\u015fimi i\u00e7in TLS (Transport Layer Security) veya SSL (Secure Sockets Layer) kullan\u0131lmal\u0131d\u0131r. MQTT i\u00e7in MQTTS (MQTT over SSL\/TLS) ba\u011flant\u0131lar\u0131 tercih edilmelidir. Ktor Client ve KMP uyumlu MQTT istemcileri genellikle TLS deste\u011fi sunar.<\/p>\n<pre><code class=\"language-kotlin\">\n\/\/ Ktor HTTP istemcisinde TLS kullan\u0131m\u0131 (HTTPS) varsay\u0131lan olarak desteklenir.\n\/\/ E\u011fer \u00f6zel bir sertifika veya pinleme gerekiyorsa, platforma \u00f6zg\u00fc konfig\u00fcrasyonlar yap\u0131lmal\u0131d\u0131r.\nval secureHttpClient = HttpClient {\n    \/\/ ...\n    \/\/ TLS\/SSL sertifika do\u011frulama ve pinleme ayarlar\u0131 platforma \u00f6zg\u00fc expect\/actual ile yap\u0131labilir.\n}\n            <\/pre>\n<p><\/code>\n        <\/li>\n<li>\n            <strong>Kimlik Do\u011frulama ve Yetkilendirme<\/strong>:<\/p>\n<ul>\n<li><strong>Cihaz Kimlik Do\u011frulamas\u0131<\/strong>: Her IoT cihaz\u0131n\u0131n benzersiz bir kimli\u011fe sahip oldu\u011fundan ve broker\/backend'e ba\u011flan\u0131rken kendini do\u011frulamas\u0131 gerekti\u011finden emin olun. Bu, genellikle cihaz sertifikalar\u0131 veya benzersiz anahtarlar arac\u0131l\u0131\u011f\u0131yla yap\u0131l\u0131r.<\/li>\n<li><strong>Kullan\u0131c\u0131 Kimlik Do\u011frulamas\u0131<\/strong>: KMP uygulaman\u0131z\u0131 kullanan son kullan\u0131c\u0131lar\u0131n da kimliklerini do\u011frulamalar\u0131 gereklidir. OAuth 2.0 veya JWT (JSON Web Tokens) gibi standartlar, kullan\u0131c\u0131 kimlik do\u011frulama ve yetkilendirme i\u00e7in kullan\u0131labilir. Bu mant\u0131k, <code>commonMain<\/code> katman\u0131nda geli\u015ftirilmelidir.<\/li>\n<li><strong>Eri\u015fim Kontrol\u00fc<\/strong>: Her kullan\u0131c\u0131n\u0131n veya cihaz\u0131n yaln\u0131zca yetkili oldu\u011fu kaynaklara ve komutlara eri\u015febildi\u011finden emin olun. MQTT'de, topic tabanl\u0131 yetkilendirme (\u00f6rn. belirli bir kullan\u0131c\u0131n\u0131n yaln\u0131zca kendi cihaz\u0131n\u0131n s\u0131cakl\u0131k topic'ine abone olmas\u0131) bu ama\u00e7la kullan\u0131labilir.<\/li>\n<\/ul>\n<\/li>\n<li>\n            <strong>G\u00fcvenli Depolama<\/strong>: Hassas veriler (API anahtarlar\u0131, kullan\u0131c\u0131 token'lar\u0131) uygulaman\u0131n yerel depolama alan\u0131nda g\u00fcvenli bir \u015fekilde saklanmal\u0131d\u0131r. KMP'de, platforma \u00f6zg\u00fc anahtarl\u0131k\/keystore sistemlerini (Android KeyStore, iOS Keychain) kullanmak i\u00e7in <code>expect<\/code>\/<code>actual<\/code> mekanizmas\u0131 kullan\u0131labilir.\n        <\/li>\n<li>\n            <strong>Hata Y\u00f6netimi ve G\u00fcvenli Kodlama<\/strong>: Olas\u0131 g\u00fcvenlik a\u00e7\u0131klar\u0131n\u0131 \u00f6nlemek i\u00e7in giri\u015f do\u011frulamas\u0131, hata i\u015fleme ve ba\u011f\u0131ml\u0131l\u0131klar\u0131n g\u00fcncel tutulmas\u0131 \u00f6nemlidir. Asla kullan\u0131c\u0131dan gelen veriye g\u00fcvenmeyin ve her zaman sunucu taraf\u0131nda do\u011frulamalar yap\u0131n.\n        <\/li>\n<\/ol>\n<p>Bir vaka analizi olarak, end\u00fcstriyel bir IoT uygulamas\u0131n\u0131 ele alal\u0131m. Fabrika ortam\u0131ndaki sens\u00f6rlerden gelen \u00fcretim verileri, hem gizlilik hem de operasyonel g\u00fcvenlik a\u00e7\u0131s\u0131ndan kritik \u00f6neme sahiptir. Bu t\u00fcr bir uygulamada, KMP ile geli\u015ftirilen mobil aray\u00fcz\u00fcn, cihazlarla (PLC'ler, sens\u00f6rler) ve merkezi kontrol sistemiyle ileti\u015fim kurarken u\u00e7tan uca \u015fifreleme (TLS), \u00e7ift fakt\u00f6rl\u00fc kullan\u0131c\u0131 kimlik do\u011frulamas\u0131 ve rol tabanl\u0131 eri\u015fim kontrol\u00fc gibi \u00f6zelliklere sahip olmas\u0131 \u015fartt\u0131r. Her sens\u00f6r\u00fcn benzersiz bir kimli\u011fi ve kriptografik sertifikas\u0131 olmal\u0131, b\u00f6ylece sahte cihazlar\u0131n sisteme dahil olmas\u0131 engellenmelidir. KMP, bu g\u00fcvenlik katmanlar\u0131n\u0131n b\u00fcy\u00fck bir k\u0131sm\u0131n\u0131 ortak bir kod taban\u0131nda y\u00f6netme yetene\u011fi sayesinde, g\u00fcvenlik politikalar\u0131n\u0131n tutarl\u0131 bir \u015fekilde uygulanmas\u0131n\u0131 kolayla\u015ft\u0131r\u0131r.<\/p>\n<h3>Performans \u0130pu\u00e7lar\u0131<\/h3>\n<p>IoT uygulamalar\u0131 genellikle pil \u00f6mr\u00fc, a\u011f bant geni\u015fli\u011fi ve cihaz kaynaklar\u0131 a\u00e7\u0131s\u0131ndan k\u0131s\u0131tl\u0131 ortamda \u00e7al\u0131\u015f\u0131r. Performans optimizasyonu, uygulaman\u0131n verimli \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar.<\/p>\n<ol>\n<li>\n            <strong>Kaynak T\u00fcketimi Optimizasyonu<\/strong>:<\/p>\n<ul>\n<li><strong>Pil \u00d6mr\u00fc<\/strong>: Arka plan i\u015flemleri ve a\u011f istekleri, pil \u00f6mr\u00fcn\u00fc en \u00e7ok etkileyen fakt\u00f6rlerdir. Veri g\u00f6nderme s\u0131kl\u0131\u011f\u0131n\u0131 optimize edin (gereksiz yere \u00e7ok s\u0131k veri g\u00f6ndermeyin). Ak\u0131ll\u0131 uyku modlar\u0131 veya de\u011fi\u015fen veri s\u0131kl\u0131\u011f\u0131 stratejileri uygulay\u0131n. KMP'deki Coroutines, arka plan i\u015flemlerini verimli bir \u015fekilde y\u00f6netmek i\u00e7in idealdir.<\/li>\n<li><strong>Bellek Y\u00f6netimi<\/strong>: Bellek s\u0131z\u0131nt\u0131lar\u0131n\u0131 \u00f6nleyin. \u00d6zellikle b\u00fcy\u00fck veri k\u00fcmeleri i\u015flenirken, ak\u0131\u015flar\u0131 (Flow) ve kaynaklar\u0131 do\u011fru \u015fekilde kapat\u0131n.<\/li>\n<\/ul>\n<\/li>\n<li>\n            <strong>A\u011f \u0130leti\u015fimi Optimizasyonu<\/strong>:<\/p>\n<ul>\n<li><strong>Veri S\u0131k\u0131\u015ft\u0131rma<\/strong>: Cihazdan g\u00f6nderilen verileri s\u0131k\u0131\u015ft\u0131rmak, bant geni\u015fli\u011fini azalt\u0131r ve enerji t\u00fcketimini d\u00fc\u015f\u00fcr\u00fcr. MQTT, zaten hafif bir protokol olmas\u0131na ra\u011fmen, JSON veya Protobuf gibi formatlarda veri g\u00f6nderirken s\u0131k\u0131\u015ft\u0131rma d\u00fc\u015f\u00fcn\u00fclebilir.<\/li>\n<li><strong>Verimli Protokoller<\/strong>: MQTT, WebSocket gibi verimli protokolleri tercih edin. REST API kullan\u0131rken de gereksiz veri transferinden ka\u00e7\u0131n\u0131n.<\/li>\n<\/ul>\n<\/li>\n<li>\n            <strong>Hata Y\u00f6netimi ve Yeniden Deneme Mekanizmalar\u0131<\/strong>: A\u011f ba\u011flant\u0131s\u0131 kesintileri IoT uygulamalar\u0131nda s\u0131k\u00e7a rastlanan bir durumdur. Uygulaman\u0131z\u0131n bu kesintileri zarif bir \u015fekilde y\u00f6netti\u011finden ve ba\u011flant\u0131 yeniden kuruldu\u011funda otomatik olarak yeniden deneme (retry) yapt\u0131\u011f\u0131ndan emin olun. Geriye d\u00f6n\u00fck \u00fcstel bekleme (exponential backoff) stratejileri, a\u011f y\u00fck\u00fcn\u00fc azaltmaya yard\u0131mc\u0131 olur.<\/li>\n<li>\n            <strong>G\u00fcnl\u00fckleme ve \u0130zleme<\/strong>: Uygulaman\u0131z\u0131n performans\u0131n\u0131 ve hatalar\u0131n\u0131 izlemek i\u00e7in etkili g\u00fcnl\u00fckleme (logging) mekanizmalar\u0131 kullan\u0131n. Ancak, \u00fcretim ortam\u0131nda gereksiz veya hassas verileri g\u00fcnl\u00fc\u011fe kaydetmekten ka\u00e7\u0131n\u0131n. KMP'de, platforma \u00f6zg\u00fc g\u00fcnl\u00fckleme sistemlerini <code>expect<\/code>\/<code>actual<\/code> ile soyutlayabilir ve <code>commonMain<\/code>'de kullanabilirsiniz.<\/li>\n<\/ol>\n<aside class=\"tip\">\n        Uzman \u0130pucu: Performans sorunlar\u0131n\u0131 gidermek i\u00e7in Android Studio'daki Profiler veya Xcode'daki Instruments gibi platforma \u00f6zg\u00fc ara\u00e7lar\u0131 kullan\u0131n. KMP uygulamalar\u0131 i\u00e7in, payla\u015f\u0131lan kodun performans\u0131n\u0131 optimize ederken, platforma \u00f6zel kodun da en iyi performans\u0131 verecek \u015fekilde yaz\u0131ld\u0131\u011f\u0131ndan emin olun.<br \/>\n    <\/aside>\n<p>G\u00fcvenlik ve performans, KMP IoT uygulamalar\u0131n\u0131n geli\u015ftirme s\u00fcrecinde s\u00fcrekli olarak g\u00f6z \u00f6n\u00fcnde bulundurulmas\u0131 gereken konulard\u0131r. Bu ipu\u00e7lar\u0131n\u0131 uygulayarak, hem sa\u011flam hem de verimli uygulamalar olu\u015fturabilir, kullan\u0131c\u0131lar\u0131n\u0131za g\u00fcvenli ve ak\u0131c\u0131 bir deneyim sunabilirsiniz.<\/p>\n<h2>Geli\u015fmi\u015f Konular ve Gelecek Trendleri Nelerdir?<\/h2>\n<p>Kotlin Multiplatform (KMP) ile IoT uygulamas\u0131 geli\u015ftirmenin temel prensiplerini ve pratik ad\u0131mlar\u0131n\u0131 ele ald\u0131k. Ancak IoT d\u00fcnyas\u0131 s\u00fcrekli geli\u015fiyor ve KMP de bu geli\u015fime ayak uydurarak daha karma\u015f\u0131k ve yetenekli uygulamalar olu\u015fturmaya olanak tan\u0131yor. \u0130\u015fte KMP IoT uygulamalar\u0131n\u0131z\u0131 bir sonraki seviyeye ta\u015f\u0131yacak baz\u0131 geli\u015fmi\u015f konular ve gelecek trendleri:<\/p>\n<h3>\u00c7evrimd\u0131\u015f\u0131 Yetenekler ve Veri Senkronizasyonu<\/h3>\n<p>IoT cihazlar\u0131 her zaman internete ba\u011fl\u0131 olmayabilir. Bu senaryolarda, uygulaman\u0131n \u00e7evrimd\u0131\u015f\u0131 \u00e7al\u0131\u015fabilmesi ve ba\u011flant\u0131 kuruldu\u011funda verileri senkronize edebilmesi kritik \u00f6neme sahiptir. KMP'de bu yetenekleri uygulaman\u0131n <code>commonMain<\/code> mod\u00fcl\u00fcnde y\u00f6netebilirsiniz:<\/p>\n<ul>\n<li><strong>Yerel Depolama<\/strong>: SQLDelight (KMP uyumlu bir veritaban\u0131 k\u00fct\u00fcphanesi) veya ObjectBox (KMP deneysel deste\u011fi) gibi \u00e7\u00f6z\u00fcmlerle cihaz \u00fczerinde verileri yerel olarak depolayabilirsiniz. Sens\u00f6rden gelen veriler veya kullan\u0131c\u0131n\u0131n verdi\u011fi komutlar, \u00e7evrimd\u0131\u015f\u0131 durumdayken yerel olarak kaydedilir.<\/li>\n<li><strong>Senkronizasyon Mant\u0131\u011f\u0131<\/strong>: Ba\u011flant\u0131 geri geldi\u011finde, yerel depolamadan bekleyen verileri okuyup backend'e veya MQTT broker'a g\u00f6nderecek bir senkronizasyon mekanizmas\u0131 tasarlay\u0131n. \u00c7ak\u0131\u015fma \u00e7\u00f6z\u00fcmleme stratejileri (last-write-wins, merge) bu noktada \u00f6nem kazan\u0131r.<\/li>\n<li><strong>Arka Plan \u0130\u015flemleri<\/strong>: Veri senkronizasyonu gibi uzun s\u00fcren i\u015flemleri arka planda y\u00fcr\u00fctmek i\u00e7in KMP'de Coroutines ve Flow kullan\u0131n. Platforma \u00f6zg\u00fc arka plan i\u015fleri (Android WorkManager, iOS Background Tasks) i\u00e7in <code>expect<\/code>\/<code>actual<\/code> mekanizmas\u0131yla entegrasyon sa\u011flayabilirsiniz.<\/li>\n<\/ul>\n<h3>Edge Computing ile Entegrasyon<\/h3>\n<p>Edge computing, verilerin buluta g\u00f6nderilmeden \u00f6nce IoT cihaz\u0131na veya yerel bir a\u011f ge\u00e7idine yak\u0131n bir yerde i\u015flenmesi konseptidir. Bu, gecikmeyi azalt\u0131r, bant geni\u015fli\u011fi kullan\u0131m\u0131n\u0131 optimize eder ve gizlilik endi\u015felerini giderir. KMP uygulamalar\u0131, edge cihazlarla do\u011frudan veya yerel bir API arac\u0131l\u0131\u011f\u0131yla ileti\u015fim kurarak bu mimariden faydalanabilir. \u00d6rne\u011fin, bir KMP mobil uygulamas\u0131, yerel a\u011fdaki bir Raspberry Pi tabanl\u0131 edge gateway'e ba\u011flanarak sens\u00f6r verilerini oradan alabilir ve cihazlar\u0131 kontrol edebilir. Bu, bulut ba\u011f\u0131ml\u0131l\u0131\u011f\u0131n\u0131 azalt\u0131r ve daha h\u0131zl\u0131 yan\u0131t s\u00fcreleri sa\u011flar.<\/p>\n<h3>Makine \u00d6\u011frenimi Entegrasyonu (ML Kit veya \u00d6zel Modeller)<\/h3>\n<p>IoT cihazlar\u0131ndan toplanan b\u00fcy\u00fck miktardaki veriyi analiz etmek ve ak\u0131ll\u0131 kararlar almak i\u00e7in makine \u00f6\u011frenimi (ML) modelleri kullan\u0131labilir. KMP uygulamalar\u0131, ML modellerini hem bulut tabanl\u0131 API'ler (TensorFlow Lite for Mobile, ML Kit) arac\u0131l\u0131\u011f\u0131yla hem de platforma \u00f6zg\u00fc \u00e7\u00f6z\u00fcmlerle entegre edebilir:<\/p>\n<ul>\n<li><strong>Bulut ML API'leri<\/strong>: Ktor Client kullanarak, <code>commonMain<\/code> mod\u00fcl\u00fcnde bulut tabanl\u0131 ML servislerinin API'lerini \u00e7a\u011f\u0131rabilir ve sens\u00f6r verilerini g\u00f6ndererek tahminler veya analizler alabilirsiniz.<\/li>\n<li><strong>Cihaz \u00dczerinde ML<\/strong>: Daha geli\u015fmi\u015f senaryolarda, hafif ML modellerini mobil uygulamalar\u0131n kendisinde \u00e7al\u0131\u015ft\u0131rmak isteyebilirsiniz. Android i\u00e7in TensorFlow Lite, iOS i\u00e7in Core ML gibi platforma \u00f6zg\u00fc ML k\u00fct\u00fcphaneleri, <code>expect<\/code>\/<code>actual<\/code> mekanizmas\u0131yla KMP uygulamalar\u0131na entegre edilebilir. Bu sayede, internet ba\u011flant\u0131s\u0131 olmadan bile ak\u0131ll\u0131 kararlar al\u0131nabilir (\u00f6rn. anormallik tespiti, tahmine dayal\u0131 bak\u0131m).<\/li>\n<\/ul>\n<h3>Farkl\u0131 Sens\u00f6r Tipleriyle \u00c7al\u0131\u015fma ve Geni\u015fletilebilirlik<\/h3>\n<p>IoT uygulamalar\u0131 genellikle farkl\u0131 t\u00fcrde sens\u00f6rlerden veri toplar (s\u0131cakl\u0131k, nem, ivme\u00f6l\u00e7er, konum vb.). KMP uygulaman\u0131z\u0131n bu sens\u00f6r \u00e7e\u015fitlili\u011fini y\u00f6netebilmesi i\u00e7in geni\u015fletilebilir bir mimariye sahip olmas\u0131 \u00f6nemlidir:<\/p>\n<ul>\n<li><strong>Ortak Veri Modelleri<\/strong>: T\u00fcm sens\u00f6r verilerini kapsayacak esnek veri modelleri (\u00f6rne\u011fin, <code>SensorData(type: SensorType, value: Any, timestamp: Long)<\/code>) <code>commonMain<\/code> i\u00e7inde tan\u0131mlay\u0131n.<\/li>\n<li><strong>Soyutlanm\u0131\u015f Sens\u00f6r Aray\u00fczleri<\/strong>: Her sens\u00f6r tipi i\u00e7in ortak mod\u00fclde bir aray\u00fcz tan\u0131mlay\u0131n (\u00f6rne\u011fin <code>interface SensorReader { fun startReading(): Flow<SensorData> }<\/code>) ve bu aray\u00fcz\u00fcn platforma \u00f6zg\u00fc implementasyonlar\u0131n\u0131 (<code>actual class AndroidAccelerometerSensorReader: SensorReader<\/code>) sa\u011flay\u0131n. Bu, yeni sens\u00f6r tiplerini eklemeyi kolayla\u015ft\u0131r\u0131r.<\/li>\n<\/ul>\n<p>KMP'nin mod\u00fcler yap\u0131s\u0131 ve <code>expect<\/code>\/<code>actual<\/code> mekanizmas\u0131, bu geli\u015fmi\u015f entegrasyonlar\u0131 ve geni\u015fletilebilirli\u011fi m\u00fcmk\u00fcn k\u0131lar. IoT alan\u0131 b\u00fcy\u00fcd\u00fck\u00e7e, KMP'nin esnekli\u011fi, geli\u015ftiricilerin yenilik\u00e7i ve gelece\u011fe haz\u0131r uygulamalar olu\u015fturmas\u0131nda kilit rol oynayacakt\u0131r. \u00d6zellikle Compose Multiplatform'un iOS deste\u011finin olgunla\u015fmas\u0131yla, tek bir UI kod taban\u0131yla t\u00fcm platformlar\u0131 hedeflemek, IoT geli\u015ftirme s\u00fcrecini daha da optimize edecektir.<\/p>\n<h2>Sonu\u00e7: Kotlin Multiplatform ile IoT'nin Gelece\u011fi<\/h2>\n<p>Kotlin Multiplatform (KMP), IoT uygulama geli\u015ftirme alan\u0131nda kar\u015f\u0131la\u015f\u0131lan bir\u00e7ok zorlu\u011fa g\u00fc\u00e7l\u00fc ve esnek bir \u00e7\u00f6z\u00fcm sunmaktad\u0131r. Bu makalede, KMP'nin platform ba\u011f\u0131ms\u0131z kod payla\u015f\u0131m yetenekleri sayesinde nas\u0131l zaman ve maliyet tasarrufu sa\u011flad\u0131\u011f\u0131n\u0131, uygulaman\u0131n \u00e7ekirdek i\u015f mant\u0131\u011f\u0131n\u0131 ve a\u011f ileti\u015fimini tek bir ortak mod\u00fclde (<code>commonMain<\/code>) y\u00f6neterek tutarl\u0131l\u0131\u011f\u0131 nas\u0131l art\u0131rd\u0131\u011f\u0131n\u0131 detayl\u0131 bir \u015fekilde inceledik. MQTT ve REST API gibi temel ileti\u015fim protokollerinin entegrasyonundan, Compose Multiplatform ile veri g\u00f6rselle\u015ftirmeye kadar ad\u0131m ad\u0131m bir IoT uygulamas\u0131n\u0131n nas\u0131l tasarlanabilece\u011fini g\u00f6rd\u00fck. Ayr\u0131ca, uygulamalar\u0131n\u0131z\u0131n g\u00fcvenli\u011fini sa\u011flamak i\u00e7in veri \u015fifreleme, kimlik do\u011frulama ve yetkilendirme gibi \u00f6nemli g\u00fcvenlik ipu\u00e7lar\u0131n\u0131, ve performans optimizasyonlar\u0131 i\u00e7in kaynak y\u00f6netimi ile a\u011f ileti\u015fimi stratejilerini tart\u0131\u015ft\u0131k. Son olarak, \u00e7evrimd\u0131\u015f\u0131 yetenekler, edge computing entegrasyonu ve makine \u00f6\u011frenimi gibi geli\u015fmi\u015f konulara de\u011finerek KMP'nin IoT d\u00fcnyas\u0131ndaki gelecek potansiyelini vurgulad\u0131k.<\/p>\n<p>KMP, tek bir dil ve tek bir kod taban\u0131yla farkl\u0131 platformlarda (Android, iOS, web, masa\u00fcst\u00fc) zengin ve performansl\u0131 IoT deneyimleri sunma kapasitesine sahiptir. Bu yakla\u015f\u0131m, geli\u015ftirme ekiplerinin verimlili\u011fini art\u0131r\u0131rken, IoT \u00e7\u00f6z\u00fcmlerinin pazara \u00e7\u0131k\u0131\u015f s\u00fcresini k\u0131salt\u0131r ve bak\u0131m y\u00fck\u00fcn\u00fc azalt\u0131r. IoT'nin s\u00fcrekli b\u00fcy\u00fcyen ve karma\u015f\u0131kla\u015fan do\u011fas\u0131 g\u00f6z \u00f6n\u00fcne al\u0131nd\u0131\u011f\u0131nda, KMP gibi \u00e7oklu platform teknolojileri, gelece\u011fin ak\u0131ll\u0131 ve ba\u011fl\u0131 d\u00fcnyas\u0131n\u0131 \u015fekillendirmede merkezi bir rol oynayacakt\u0131r. Kotlin Multiplatform'u benimseyerek, geli\u015ftiriciler sadece g\u00fcn\u00fcm\u00fcz\u00fcn ihtiya\u00e7lar\u0131n\u0131 kar\u015f\u0131lamakla kalmayacak, ayn\u0131 zamanda yar\u0131n\u0131n IoT inovasyonlar\u0131na da \u00f6nc\u00fcl\u00fck edebileceklerdir.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<ul>\n<li>\n            <strong>KMP, t\u00fcm IoT cihazlar\u0131yla do\u011frudan ileti\u015fim kurabilir mi?<\/strong><\/p>\n<p>Hay\u0131r, KMP do\u011frudan IoT cihazlar\u0131yla ileti\u015fim kurmaz. KMP, mobil (Android\/iOS), web veya masa\u00fcst\u00fc uygulamalar\u0131 geli\u015ftirmek i\u00e7in kullan\u0131l\u0131r. Bu uygulamalar, IoT cihazlar\u0131yla ileti\u015fim kuran bir IoT Broker (MQTT gibi) veya bir Backend Servisi arac\u0131l\u0131\u011f\u0131yla etkile\u015fime girer. KMP, bu broker veya backend ile ileti\u015fim mant\u0131\u011f\u0131n\u0131 payla\u015f\u0131lan kodda yazman\u0131za olanak tan\u0131r.<\/p>\n<\/li>\n<li>\n            <strong>Kotlin Multiplatform ile UI da payla\u015f\u0131labilir mi?<\/strong><\/p>\n<p>Evet, Jetpack Compose Multiplatform ile \u015fu anda Android ve masa\u00fcst\u00fc (ve deneysel olarak web\/iOS) i\u00e7in UI kodu payla\u015f\u0131labilir. Bu, uygulaman\u0131z\u0131n g\u00f6r\u00fcn\u00fcm ve hissini farkl\u0131 platformlarda tutarl\u0131 hale getirmenin g\u00fc\u00e7l\u00fc bir yoludur. iOS i\u00e7in Compose Multiplatform deste\u011fi h\u0131zla geli\u015fmektedir ve gelecekte tam bir UI payla\u015f\u0131m\u0131 m\u00fcmk\u00fcn olacakt\u0131r.<\/p>\n<\/li>\n<li>\n            <strong>KMP'de IoT uygulamalar\u0131 i\u00e7in hangi ileti\u015fim protokolleri tercih edilmelidir?<\/strong><\/p>\n<p>Ger\u00e7ek zamanl\u0131 ve d\u00fc\u015f\u00fck bant geni\u015fli\u011fine sahip veri ak\u0131\u015flar\u0131 i\u00e7in MQTT (Message Queuing Telemetry Transport) idealdir. Cihaz konfig\u00fcrasyonlar\u0131, ge\u00e7mi\u015f veri sorgulamalar\u0131 veya daha karma\u015f\u0131k komut-yan\u0131t tabanl\u0131 i\u015flemler i\u00e7in ise RESTful API'ler tercih edilebilir. KMP, her iki protokol\u00fc de ortak mod\u00fclde entegre etmenizi sa\u011flar.<\/p>\n<\/li>\n<li>\n            <strong>G\u00fcvenlik a\u00e7\u0131s\u0131ndan KMP IoT uygulamalar\u0131nda nelere dikkat etmeliyiz?<\/strong><\/p>\n<p>U\u00e7tan uca veri \u015fifrelemesi (TLS\/SSL), g\u00fc\u00e7l\u00fc cihaz ve kullan\u0131c\u0131 kimlik do\u011frulamas\u0131, rol tabanl\u0131 yetkilendirme ve hassas verilerin g\u00fcvenli depolanmas\u0131 kritik \u00f6neme sahiptir. KMP, bu g\u00fcvenlik katmanlar\u0131n\u0131n i\u015f mant\u0131\u011f\u0131n\u0131 ortak kodda y\u00f6neterek tutarl\u0131l\u0131\u011f\u0131 art\u0131r\u0131r, ancak platforma \u00f6zg\u00fc g\u00fcvenlik mekanizmalar\u0131n\u0131n do\u011fru \u015fekilde entegre edilmesi gerekir.<\/p>\n<\/li>\n<\/ul>\n<p><\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Nesnelerin \u0130nterneti (IoT), g\u00fcnl\u00fck hayattan end\u00fcstriyel tesislere kadar her alanda cihazlar\u0131n birbirleriyle ve bulutla ileti\u015fim kurarak veri toplamas\u0131&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1],"tags":[],"class_list":{"0":"post-31123","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-genel","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Kotlin Multiplatform ile IoT Uygulamas\u0131 Geli\u015ftirme Rehberi<\/title>\n<meta name=\"description\" content=\"Nesnelerin \u0130nterneti (IoT), g\u00fcnl\u00fck hayattan end\u00fcstriyel tesislere kadar her alanda cihazlar\u0131n birbirleriyle ve bulutla ileti\u015fim kurarak veri toplamas\u0131 ve eylemler ger\u00e7ekle\u015ftirmesi konseptidir. Peki, farkl\u0131 i\u015fletim sistemlerinde sorunsuz \u00e7al\u0131\u015fabilen, g\u00fc\u00e7l\u00fc ve verimli bir IoT uygulamas\u0131 geli\u015ftirmek m\u00fcmk\u00fcn m\u00fcd\u00fcr? Kotlin Multiplatform (KMP), bu sorunun cevab\u0131n\u0131 vererek tek bir kod taban\u0131yla hem Android hem de iOS gibi platformlarda IoT uygulamalar\u0131 olu\u015fturman\u0131za olanak tan\u0131r. Bu makale, KMP&#039;nin IoT d\u00fcnyas\u0131na nas\u0131l entegre edildi\u011fini ve ad\u0131m ad\u0131m kendi uygulaman\u0131z\u0131 nas\u0131l geli\u015ftirebilece\u011finizi detayland\u0131racakt\u0131r.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/kotlin-multiplatform-ile-iot-uygulamasi-gelistirme-rehberi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Kotlin Multiplatform ile IoT Uygulamas\u0131 Geli\u015ftirme Rehberi\" \/>\n<meta property=\"og:description\" content=\"Nesnelerin \u0130nterneti (IoT), g\u00fcnl\u00fck hayattan end\u00fcstriyel tesislere kadar her alanda cihazlar\u0131n birbirleriyle ve bulutla ileti\u015fim kurarak veri toplamas\u0131 ve eylemler ger\u00e7ekle\u015ftirmesi konseptidir. Peki, farkl\u0131 i\u015fletim sistemlerinde sorunsuz \u00e7al\u0131\u015fabilen, g\u00fc\u00e7l\u00fc ve verimli bir IoT uygulamas\u0131 geli\u015ftirmek m\u00fcmk\u00fcn m\u00fcd\u00fcr? Kotlin Multiplatform (KMP), bu sorunun cevab\u0131n\u0131 vererek tek bir kod taban\u0131yla hem Android hem de iOS gibi platformlarda IoT uygulamalar\u0131 olu\u015fturman\u0131za olanak tan\u0131r. Bu makale, KMP&#039;nin IoT d\u00fcnyas\u0131na nas\u0131l entegre edildi\u011fini ve ad\u0131m ad\u0131m kendi uygulaman\u0131z\u0131 nas\u0131l geli\u015ftirebilece\u011finizi detayland\u0131racakt\u0131r.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/kotlin-multiplatform-ile-iot-uygulamasi-gelistirme-rehberi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-05T23:01:34+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"30 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kotlin-multiplatform-ile-iot-uygulamasi-gelistirme-rehberi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kotlin-multiplatform-ile-iot-uygulamasi-gelistirme-rehberi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"Kotlin Multiplatform ile IoT Uygulamas\u0131 Geli\u015ftirme Rehberi\",\"datePublished\":\"2025-10-05T23:01:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kotlin-multiplatform-ile-iot-uygulamasi-gelistirme-rehberi\/\"},\"wordCount\":5155,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kotlin-multiplatform-ile-iot-uygulamasi-gelistirme-rehberi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kotlin-multiplatform-ile-iot-uygulamasi-gelistirme-rehberi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/kotlin-multiplatform-ile-iot-uygulamasi-gelistirme-rehberi\/\",\"name\":\"Kotlin Multiplatform ile IoT Uygulamas\u0131 Geli\u015ftirme Rehberi\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-05T23:01:34+00:00\",\"description\":\"Nesnelerin \u0130nterneti (IoT), g\u00fcnl\u00fck hayattan end\u00fcstriyel tesislere kadar her alanda cihazlar\u0131n birbirleriyle ve bulutla ileti\u015fim kurarak veri toplamas\u0131 ve eylemler ger\u00e7ekle\u015ftirmesi konseptidir. Peki, farkl\u0131 i\u015fletim sistemlerinde sorunsuz \u00e7al\u0131\u015fabilen, g\u00fc\u00e7l\u00fc ve verimli bir IoT uygulamas\u0131 geli\u015ftirmek m\u00fcmk\u00fcn m\u00fcd\u00fcr? Kotlin Multiplatform (KMP), bu sorunun cevab\u0131n\u0131 vererek tek bir kod taban\u0131yla hem Android hem de iOS gibi platformlarda IoT uygulamalar\u0131 olu\u015fturman\u0131za olanak tan\u0131r. Bu makale, KMP'nin IoT d\u00fcnyas\u0131na nas\u0131l entegre edildi\u011fini ve ad\u0131m ad\u0131m kendi uygulaman\u0131z\u0131 nas\u0131l geli\u015ftirebilece\u011finizi detayland\u0131racakt\u0131r.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kotlin-multiplatform-ile-iot-uygulamasi-gelistirme-rehberi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/kotlin-multiplatform-ile-iot-uygulamasi-gelistirme-rehberi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/kotlin-multiplatform-ile-iot-uygulamasi-gelistirme-rehberi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kotlin Multiplatform ile IoT Uygulamas\u0131 Geli\u015ftirme Rehberi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Kotlin Multiplatform ile IoT Uygulamas\u0131 Geli\u015ftirme Rehberi","description":"Nesnelerin \u0130nterneti (IoT), g\u00fcnl\u00fck hayattan end\u00fcstriyel tesislere kadar her alanda cihazlar\u0131n birbirleriyle ve bulutla ileti\u015fim kurarak veri toplamas\u0131 ve eylemler ger\u00e7ekle\u015ftirmesi konseptidir. Peki, farkl\u0131 i\u015fletim sistemlerinde sorunsuz \u00e7al\u0131\u015fabilen, g\u00fc\u00e7l\u00fc ve verimli bir IoT uygulamas\u0131 geli\u015ftirmek m\u00fcmk\u00fcn m\u00fcd\u00fcr? Kotlin Multiplatform (KMP), bu sorunun cevab\u0131n\u0131 vererek tek bir kod taban\u0131yla hem Android hem de iOS gibi platformlarda IoT uygulamalar\u0131 olu\u015fturman\u0131za olanak tan\u0131r. Bu makale, KMP'nin IoT d\u00fcnyas\u0131na nas\u0131l entegre edildi\u011fini ve ad\u0131m ad\u0131m kendi uygulaman\u0131z\u0131 nas\u0131l geli\u015ftirebilece\u011finizi detayland\u0131racakt\u0131r.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/kotlin-multiplatform-ile-iot-uygulamasi-gelistirme-rehberi\/","og_locale":"tr_TR","og_type":"article","og_title":"Kotlin Multiplatform ile IoT Uygulamas\u0131 Geli\u015ftirme Rehberi","og_description":"Nesnelerin \u0130nterneti (IoT), g\u00fcnl\u00fck hayattan end\u00fcstriyel tesislere kadar her alanda cihazlar\u0131n birbirleriyle ve bulutla ileti\u015fim kurarak veri toplamas\u0131 ve eylemler ger\u00e7ekle\u015ftirmesi konseptidir. Peki, farkl\u0131 i\u015fletim sistemlerinde sorunsuz \u00e7al\u0131\u015fabilen, g\u00fc\u00e7l\u00fc ve verimli bir IoT uygulamas\u0131 geli\u015ftirmek m\u00fcmk\u00fcn m\u00fcd\u00fcr? Kotlin Multiplatform (KMP), bu sorunun cevab\u0131n\u0131 vererek tek bir kod taban\u0131yla hem Android hem de iOS gibi platformlarda IoT uygulamalar\u0131 olu\u015fturman\u0131za olanak tan\u0131r. Bu makale, KMP'nin IoT d\u00fcnyas\u0131na nas\u0131l entegre edildi\u011fini ve ad\u0131m ad\u0131m kendi uygulaman\u0131z\u0131 nas\u0131l geli\u015ftirebilece\u011finizi detayland\u0131racakt\u0131r.","og_url":"https:\/\/fatihsoysal.com\/blog\/kotlin-multiplatform-ile-iot-uygulamasi-gelistirme-rehberi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-05T23:01:34+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"30 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/kotlin-multiplatform-ile-iot-uygulamasi-gelistirme-rehberi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/kotlin-multiplatform-ile-iot-uygulamasi-gelistirme-rehberi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"Kotlin Multiplatform ile IoT Uygulamas\u0131 Geli\u015ftirme Rehberi","datePublished":"2025-10-05T23:01:34+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/kotlin-multiplatform-ile-iot-uygulamasi-gelistirme-rehberi\/"},"wordCount":5155,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/kotlin-multiplatform-ile-iot-uygulamasi-gelistirme-rehberi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/kotlin-multiplatform-ile-iot-uygulamasi-gelistirme-rehberi\/","url":"https:\/\/fatihsoysal.com\/blog\/kotlin-multiplatform-ile-iot-uygulamasi-gelistirme-rehberi\/","name":"Kotlin Multiplatform ile IoT Uygulamas\u0131 Geli\u015ftirme Rehberi","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-05T23:01:34+00:00","description":"Nesnelerin \u0130nterneti (IoT), g\u00fcnl\u00fck hayattan end\u00fcstriyel tesislere kadar her alanda cihazlar\u0131n birbirleriyle ve bulutla ileti\u015fim kurarak veri toplamas\u0131 ve eylemler ger\u00e7ekle\u015ftirmesi konseptidir. Peki, farkl\u0131 i\u015fletim sistemlerinde sorunsuz \u00e7al\u0131\u015fabilen, g\u00fc\u00e7l\u00fc ve verimli bir IoT uygulamas\u0131 geli\u015ftirmek m\u00fcmk\u00fcn m\u00fcd\u00fcr? Kotlin Multiplatform (KMP), bu sorunun cevab\u0131n\u0131 vererek tek bir kod taban\u0131yla hem Android hem de iOS gibi platformlarda IoT uygulamalar\u0131 olu\u015fturman\u0131za olanak tan\u0131r. Bu makale, KMP'nin IoT d\u00fcnyas\u0131na nas\u0131l entegre edildi\u011fini ve ad\u0131m ad\u0131m kendi uygulaman\u0131z\u0131 nas\u0131l geli\u015ftirebilece\u011finizi detayland\u0131racakt\u0131r.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/kotlin-multiplatform-ile-iot-uygulamasi-gelistirme-rehberi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/kotlin-multiplatform-ile-iot-uygulamasi-gelistirme-rehberi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/kotlin-multiplatform-ile-iot-uygulamasi-gelistirme-rehberi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Kotlin Multiplatform ile IoT Uygulamas\u0131 Geli\u015ftirme Rehberi"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31123","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=31123"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31123\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=31123"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=31123"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=31123"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}