Bluetooth Low Energy (BLE) minimal energiya sarfi bilan kichik hajmdagi ma'lumotlarni uzatish uchun optimallashtirilgan simsiz aloqa standartidir. Bluetooth SIG, 2025 ma'lumotlariga ko'ra, texnologiya butun dunyo bo'ylab 5 milliarddan ortiq qurilmalarda qo'llaniladi. GATT (Generic Attribute Profile) ma'lumotlarni Service → Characteristic → Descriptor iyerarxiyasida tashkil qiladi, bu iOS va Android uchun barcha BLE ilovalarining asosini tashkil etadi.
Asosiy Fikrlar
Bluetooth Low Energy (BLE) ikki rolli (Central (mobil qurilma) va Peripheral (qurilma)) mijoz-server modelida ishlaydi. Central havo to'lqinlarini skanerlaydi va ulanishni boshlaydi, Peripheral esa ma'lumotlarni uzatadi. Klassik Bluetooth dan farqli o'laroq, BLE audio oqimlari uchun mo'ljallanmagan — uning vazifasi minimal energiya sarfi bilan kichik paketlarni uzatishdir. Bluetooth SIG Core Specification 5.4 (2025) ga ko'ra, BLE faol rejimda 15 mA dan kam oqim bilan 2 Mbps gacha tezlikni qo'llab-quvvatlaydi.
GATT (Generic Attribute Profile) Bluetooth Low Energy ma'lumotlar strukturasini belgilaydi. Service xususiyatlarning mantiqiy guruhidir (masalan, Heart Rate Service 0x180D). Characteristic ma'lum bir qiymatga ega ma'lumot nuqtasidir. Descriptor bildirishnomalarni boshqarish uchun CCCD ni o'z ichiga olgan xususiyat metama'lumotlaridir. Har bir element UUID ga ega — standart Bluetooth SIG profillari uchun 16-bit yoki moslashtirilgan uchun 128-bit.
Mobil ilovalarda Bluetooth Low Energy smartfon va periferik qurilmalar o'rtasida ma'lumot almashinuvini tashkil qilish uchun ushbu iyerarxiyadan foydalanadi. GATT ni to'g'ri tushunish har ikki platformada BLE ilovalarini ishlab chiqishning asosidir. Dasturchi qurilmaning xizmatlari va xususiyatlarining UUID larini, shuningdek har bir xususiyatning xossalarini (read, write, notify, indicate) bilishi kerak.
BLE qurilmalari aniqlash uchun reklama paketlarini (advertising packets) uzatadi. Advertising Data qurilma nomi, xizmat UUID lari, RSSI va Manufacturer Specific Data ni o'z ichiga oladi. Reklama paketining hajmi 31 bayt bilan cheklangan. Qo'shimcha ma'lumotlarni uzatish uchun Scan Response ishlatiladi — markaziy qurilma aniqlashdan so'ng so'raydigan ikkinchi paket.
iOS da Core Bluetooth freymvorki Bluetooth Low Energy ni boshqaradi. CBCentralManager skanerlash va ulanishni boshqaradi, CBPeripheral uzoqdagi BLE qurilmasini ifodalaydi. Jarayon standart: CBCentralManager ni ishga tushirish, poweredOn holatini tekshirish, scanForPeripherals ni boshlash, ulanish va xizmatlarni kashf qilish. Core Bluetooth radio modulining quvvatini avtomatik boshqaradi — BLE ishlatilmasa, o'chadi.
iOS da mobil rivojlanishda BLE fon rejimlarini hisobga olishni talab qiladi. Core Bluetooth fon rejimi loyihaning Capabilities (Uses Bluetooth LE accessories) orqali yoqiladi. Fonda ilova xususiyatlardan bildirishnomalarni qabul qilishi mumkin, ammo skanerlash cheklangan — tizim uni faqat qurilma harakatlanayotganda qayta ishga tushiradi. iBeacon uchun fon skanerlash CLLocationManager orqali faolroq ishlaydi.
import CoreBluetooth
class DeviceScanner: NSObject, CBCentralManagerDelegate {
var centralManager: CBCentralManager!
func start() {
centralManager = CBCentralManager(delegate: self, queue: nil)
}
func centralManagerDidUpdateState(_ central: CBCentralManager) {
guard central.state == .poweredOn else { return }
central.scanForPeripherals(withServices: nil, options: nil)
}
func centralManager(_ central: CBCentralManager,
didDiscover peripheral: CBPeripheral,
advertisementData: [String: Any],
rssi RSSI: NSNumber) {
print("Topildi: \(peripheral.name ?? "unknown")")
}
}
Ushbu misolda CBCentralManagerDelegate barcha BLE ulanish hodisalarini qayta ishlaydi. centralManagerDidUpdateState metodi mobil qurilmada Bluetooth yoqilgan yoki yo'qligini tekshiradi. Muvaffaqiyatli ishga tushirilgandan so'ng skanerlash boshlanadi. Har bir topilgan qurilma uchun didDiscover callback i chaqiriladi.
Qurilmani kashf qilgandan so'ng connect va discoverServices ni chaqirish kerak. CBPeripheralDelegate har bir qadamni qayta ishlash uchun metodlarni taqdim etadi: didDiscoverServices, didDiscoverCharacteristics, didUpdateValueFor. Har bir metod asinxrondir — ma'lumotlar delegat callback lari orqali keladi. RSSI (Received Signal Strength Indicator) signal darajasini ko'rsatadi: qiymat 0 ga qanchalik yaqin bo'lsa, signal shunchalik kuchli.
Android da Bluetooth Low Energy android.bluetooth paketi orqali amalga oshiriladi. BluetoothAdapter barcha BLE operatsiyalari uchun kirish nuqtasidir. BluetoothLeScanner ScanCallback callback lari bilan skanerlashni boshlaydi. Qurilmani kashf qilgandan so'ng BluetoothGatt yaratiladi — periferikga ulanish. BluetoothGattCallback hodisalarni qayta ishlaydi: ulanish, xizmatlarni kashf qilish, xususiyatlarni o'qish, RSSI o'zgarishlari.
Android da mobil ilovalarda Bluetooth Low Energy aniq BLUETOOTH_SCAN, BLUETOOTH_CONNECT va ACCESS_FINE_LOCATION ruxsatnomalarini talab qiladi. Android 12 dan ruxsatnomalar ajratilgan: skanerlash uchun BLUETOOTH_SCAN, ulanish uchun BLUETOOTH_CONNECT. ACCESS_FINE_LOCATION faqat ma'lum turdagi qurilmalarni skanerlash uchun kerak. Ushbu ruxsatnomalarsiz ilova BLE bilan ishlay olmaydi.
class BLEScanner(private val bluetoothAdapter: BluetoothAdapter) {
fun startScan() {
val scanner = bluetoothAdapter.bluetoothLeScanner
val settings = ScanSettings.Builder()
.setScanMode(ScanSettings.SCAN_MODE_LOW_LATENCY)
.build()
scanner.startScan(null, settings, scanCallback)
}
private val scanCallback = object : ScanCallback() {
override fun onScanResult(callbackType: Int, result: ScanResult) {
val device = result.device
val rssi = result.rssi
Log.d("BLE", "Qurilma: ${device.name}, RSSI: $rssi")
}
}
}
ScanSettings skanerlash rejimini sozlash imkonini beradi: batareyani tejash uchun LOW_POWER, standart vazifalar uchun BALANCED, maksimal aniqlash tezligi uchun LOW_LATENCY. ScanFilter xizmat UUID si, qurilma nomi yoki MAC manzili bo'yicha qidiruvni toraytiradi. Filtrlash energiya sarfini kamaytiradi va kerakli qurilmani aniqlashni tezlashtiradi.
connectGatt orqali BluetoothGatt yaratgandan so'ng ilova discoverServices ni chaqiradi. BluetoothGattCallback onServicesDiscovered, onCharacteristicRead, onCharacteristicChanged ni o'z ichiga oladi. Xususiyat o'zgarishlari haqida bildirishnomalarni olish uchun setCharacteristicNotification chaqirilishi kerak. Jarayon diqqat talab qiladi: har bir GATT operatsiyasi asinxrondir va natija alohida callback da keladi.
iBeacon UUID, Major va Minor ni uzatuvchi BLE mayoqlari uchun Apple texnologiyasidir. Mayoq qurilmasi reklama paketini tarqatadi va mobil ilova ushbu ma'lumotlar asosida joy va masofani aniqlaydi. iOS da iBeacon CLLocationManager orqali mahalliy qo'llab-quvvatlanadi. Android da uchinchi tomon kutubxonasi talab qilinadi (masalan, AltBeacon yoki Android iBeacon Library).
Bonding BLE qurilmalari o'rtasida doimiy xavfsiz ulanish yaratish protsedurasidir. Bonding dan so'ng shifrlash kalitlari saqlanadi va qurilmalar yana yaqinlashganda avtomatik ulanadi. iOS da bonding tizim tomonidan avtomatik boshqariladi. Android da — BluetoothDevice.createBond() orqali. Bonding tez qayta ulanishni talab qiladigan kiyiladigan qurilmalar va fitnes kuzatuvchilar uchun muhimdir.
Advertising Data Bluetooth Low Energy da asosiy aniqlash mexanizmidir. Qurilma ishlab chiqaruvchilari moslashtirilgan ma'lumotlarni uzatish uchun reklama paketiga Manufacturer Specific Data qo'shishi mumkin. Paket formati Company Identifier (2 bayt) va ixtiyoriy ma'lumotlarni o'z ichiga oladi. iOS da CBCentralManager filtrlash uchun xizmat UUID lari massivini qabul qiladi — bu batareyani tejaydi. Android da ScanFilter xuddi shu printsipda ishlaydi.
| Parametr | iOS (Core Bluetooth) | Android (BluetoothGatt) |
|---|---|---|
| Menejer | CBCentralManager | BluetoothLeScanner |
| Ulanish | connect(to:) | connectGatt() |
| Xizmatlar | discoverServices() | discoverServices() |
| O'qish | readValue(for:) | readCharacteristic() |
| Bildirishnomalar | setNotifyValue(_:for:) | setCharacteristicNotification() |
| Ruxsatnomalar | Avtomatik | BLUETOOTH_SCAN, BLUETOOTH_CONNECT |
| iBeacon | CLLocationManager (mahalliy) | AltBeacon / kutubxonalar |
MTU (Maximum Transmission Unit) bitta Bluetooth Low Energy ma'lumot paketining maksimal hajmidir. Sukut bo'yicha, MTU 23 bayt (3 bayt sarlavha + 20 bayt ma'lumot). MTU ni 512 baytgacha oshirish konfiguratsiya yoki jurnallarni almashishda uzatishni sezilarli darajada tezlashtiradi. iOS da maximumWriteValueLength mavjud MTU ni ko'rsatadi. Android da MTU ni oshirish uchun requestMtu() ishlatiladi.
Connection Interval markaziy qurilmaning periferikni so'rov chastotasidir. Interval qanchalik qisqa bo'lsa, uzatish tezligi shunchalik yuqori, ammo energiya sarfi ham shuncha ko'p. Oddiy qiymatlar 7,5 ms dan 4 soniyagacha. Fitnes kuzatuvchilar uchun 100 ms yetarli; audio uchun — 7,5 ms. Mobil rivojlanishda BLE uzatish tezligi va qurilma batareyasining ishlash muddati o'rtasida muvozanatni talab qiladi.
iOS Background Modes orqali BLE ni fon rejimida qo'llab-quvvatlaydi, ammo cheklovlar bilan. Fondagi ilova xususiyatlardan bildirishnomalarni oladi, ammo faol skanerlay olmaydi. Tizim qurilma joylashuvi o'zgarganda skanerlashni qayta ishga tushiradi. Android da fon skanerlashi doimiy bildirishnoma bilan Foreground Service ni talab qiladi. Aks holda, mobil tizim ilovani minimallashtirishda jarayonni o'ldiradi.
Mobil ilovalarda ishonchli BLE ishlashi uchun ushbu qoidalarga amal qiling. Polling o'rniga notify dan foydalaning — bildirishnomalarga ega xususiyat o'zgarish paytida ma'lumot yuboradi, batareyani tejaydi. Ulanish boshida optimal MTU ni o'rnating. Skanerlashda xizmat UUID si bo'yicha qurilmalarni filtrlang. Turli modellarda BLE stekining mosligini tekshiring — ishlab chiqaruvchilar (Xiaomi, Huawei, Samsung) Bluetooth xatti-harakatiga ta'sir qiluvchi o'zgarishlar kiritadi.
Tez-tez Beriladigan Savollar
Bluetooth Low Energy (BLE) kam energiya sarfi bilan kichik paketlarning davriy uzatilishi uchun optimallashtirilgan. Klassik Bluetooth audio oqimlari va katta hajmdagi ma'lumotlarning uzluksiz uzatilishi uchun mo'ljallangan.
GATT (Generic Attribute Profile) Service → Characteristic → Descriptor iyerarxiyasini belgilaydigan BLE da ma'lumot almashish protokolidir. GATT BLE qurilmalaridan ma'lumot o'qish, yozish va bildirishnomalarni olish uchun ishlatiladi.
Android 12 dan oldin BLE skanerlash joyni aniqlash uchun ishlatilishi mumkin edi, shuning uchun Google bu ruxsatnomalarni birlashtirdi. Android 12 dan joy bilan bog'liq bo'lmagan alohida BLUETOOTH_SCAN ruxsatnomasi joriy etildi.
Android da requestMtu() va iOS da maximumWriteValueLength orqali MTU ni oshiring. Connection Interval ham tezlikka ta'sir qiladi — qanchalik kichik bo'lsa, uzatish shunchalik tez. Optimal kombinatsiya 10 baravargacha yaxshilanishni ta'minlaydi.
Bonding BLE qurilmalari o'rtasida doimiy xavfsiz ulanish yaratish protsedurasidir. Bonding dan so'ng shifrlash kalitlari saqlanadi va qurilmalar takroriy qidiruvsiz avtomatik ulanadi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.