Ang Bluetooth Low Energy (BLE) ay isang wireless communication standard na na-optimize para sa pagpapadala ng maliit na dami ng data na may minimal na konsumo ng kuryente. Ayon sa Bluetooth SIG, 2025, ang teknolohiya ay ginagamit sa mahigit 5 bilyong device sa buong mundo. GATT (Generic Attribute Profile) ay nag-aayos ng data sa isang hierarchy na Service → Characteristic → Descriptor, na siyang pundasyon ng lahat ng BLE application para sa iOS at Android.
Mga Pangunahing Punto
Ang Bluetooth Low Energy (BLE) ay gumagana sa isang client-server model na may dalawang papel: Central (mobile device) at Peripheral (device). Central ay nag-scan ng mga alon at nagpapasimula ng koneksyon, habang ang Peripheral ay nagpapadala ng data. Hindi tulad ng classic Bluetooth, ang BLE ay hindi dinisenyo para sa mga audio stream — ang gawain nito ay magpadala ng maliliit na packet na may minimal na konsumo ng kuryente. Ayon sa Bluetooth SIG Core Specification 5.4 (2025), sinusuportahan ng BLE ang bilis hanggang 2 Mbps na may kasalukuyang mas mababa sa 15 mA sa active mode.
GATT (Generic Attribute Profile) ay tumutukoy sa istruktura ng data ng Bluetooth Low Energy. Service ay isang lohikal na grupo ng mga katangian (halimbawa, Heart Rate Service 0x180D). Characteristic ay isang data point na may partikular na halaga. Descriptor ay metadata ng katangian, kasama ang CCCD para sa pamamahala ng mga notification. Bawat elemento ay may UUID — 16-bit para sa standard na Bluetooth SIG profile o 128-bit para sa custom.
Ang Bluetooth Low Energy sa mga mobile application ay gumagamit ng hierarchy na ito upang ayusin ang pagpapalitan ng data sa pagitan ng smartphone at mga peripheral. Ang tamang pag-unawa sa GATT ay pundasyon ng pag-develop ng BLE application sa parehong platform. Dapat malaman ng developer ang UUID ng mga serbisyo at katangian ng device, pati na rin ang mga property ng bawat katangian (read, write, notify, indicate).
Ang mga BLE device ay nagpapadala ng advertising packets para sa pagtuklas. Advertising Data ay naglalaman ng pangalan ng device, UUID ng mga serbisyo, RSSI at Manufacturer Specific Data. Ang laki ng advertising packet ay limitado sa 31 bytes. Para magpadala ng karagdagang data, ginagamit ang Scan Response — isang pangalawang packet na hinihiling ng central device pagkatapos ng pagtuklas.
Sa iOS, ang Core Bluetooth framework ang humahawak sa Bluetooth Low Energy. Ang CBCentralManager ay namamahala sa pag-scan at koneksyon, ang CBPeripheral ay kumakatawan sa isang malayuang BLE device. Ang proseso ay pamantayan: pagsisimula ng CBCentralManager, pag-check sa poweredOn status, pagsisimula ng scanForPeripherals, pagkonekta at pagtuklas ng mga serbisyo. Ang Core Bluetooth ay awtomatikong namamahala sa power ng radio module — kung hindi ginagamit ang BLE, ito ay namamatay.
Ang BLE sa mobile development sa iOS ay nangangailangan ng pagsasaalang-alang ng mga background mode. Ang Core Bluetooth background mode ay pinapagana sa pamamagitan ng Capabilities ng proyekto (Uses Bluetooth LE accessories). Sa background, ang app ay maaaring makatanggap ng mga notification mula sa mga katangian, ngunit ang pag-scan ay limitado — ang system ay nag-restart lamang nito kapag gumagalaw ang device. Para sa iBeacon, ang background scanning ay gumagana nang mas aktibo sa pamamagitan ng CLLocationManager.
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("Natagpuan: \(peripheral.name ?? "unknown")")
}
}
Sa halimbawang ito, ang CBCentralManagerDelegate ay humahawak ng lahat ng BLE connection event. Ang pamamaraang centralManagerDidUpdateState ay tumitingin kung naka-on ang Bluetooth sa mobile device. Pagkatapos ng matagumpay na pagsisimula, magsisimula ang pag-scan. Ang callback na didDiscover ay tinatawag para sa bawat device na natagpuan.
Pagkatapos matuklasan ang isang device, kailangang tawagan ang connect at discoverServices. CBPeripheralDelegate ay nagbibigay ng mga pamamaraan para sa bawat hakbang: didDiscoverServices, didDiscoverCharacteristics, didUpdateValueFor. Bawat pamamaraan ay asincrono — ang data ay dumarating sa pamamagitan ng delegate callbacks. Ang RSSI (Received Signal Strength Indicator) ay nagpapakita ng antas ng signal: mas malapit ang halaga sa 0, mas malakas ang signal.
Sa Android, ang Bluetooth Low Energy ay ipinapatupad sa pamamagitan ng android.bluetooth package. BluetoothAdapter ay ang entry point para sa lahat ng BLE operations. Ang BluetoothLeScanner ay nagsisimula ng pag-scan na may ScanCallback callbacks. Pagkatapos matuklasan ang isang device, ang BluetoothGatt ay nilikha — isang koneksyon sa peripheral. Ang BluetoothGattCallback ay humahawak ng mga event: koneksyon, pagtuklas ng serbisyo, pagbasa ng katangian, pagbabago ng RSSI.
Ang Bluetooth Low Energy sa mga mobile application sa Android ay nangangailangan ng tahasang mga pahintulot na BLUETOOTH_SCAN, BLUETOOTH_CONNECT at ACCESS_FINE_LOCATION. Mula noong Android 12, ang mga pahintulot ay hiwalay na: BLUETOOTH_SCAN para sa pag-scan, BLUETOOTH_CONNECT para sa pagkonekta. Ang ACCESS_FINE_LOCATION ay kinakailangan lamang para sa pag-scan ng ilang uri ng device. Kung wala ang mga pahintulot na ito, ang app ay hindi maaaring gumana sa BLE.
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", "Device: ${device.name}, RSSI: $rssi")
}
}
}
Ang ScanSettings ay nagpapahintulot sa iyo na i-configure ang scan mode: LOW_POWER para makatipid ng baterya, BALANCED para sa standard na gawain, LOW_LATENCY para sa maximum na bilis ng pagtuklas. ScanFilter ay nagpapaliit ng paghahanap ayon sa UUID ng serbisyo, pangalan ng device o MAC address. Ang pag-filter ay nagpapababa ng konsumo ng kuryente at nagpapabilis ng pagtuklas ng nais na device.
Pagkatapos lumikha ng BluetoothGatt sa pamamagitan ng connectGatt, ang app ay tumatawag ng discoverServices. BluetoothGattCallback ay naglalaman ng onServicesDiscovered, onCharacteristicRead, onCharacteristicChanged. Upang makatanggap ng mga notification tungkol sa mga pagbabago sa katangian, kailangang tawagan ang setCharacteristicNotification. Ang proseso ay nangangailangan ng atensyon: bawat GATT operation ay asincrono at ang resulta ay dumarating sa isang hiwalay na callback.
Ang iBeacon ay teknolohiya ng Apple para sa mga BLE beacon na nagpapadala ng UUID, Major at Minor. Ang beacon device ay nag-broadcast ng advertising packet, at ang mobile application ay tumutukoy ng lokasyon at distansya batay sa data na ito. Sa iOS, ang iBeacon ay native na sinusuportahan sa pamamagitan ng CLLocationManager. Sa Android, kinakailangan ang third-party na library (halimbawa, AltBeacon o Android iBeacon Library).
Ang Bonding ay pamamaraan ng paglikha ng permanenteng secure na koneksyon sa pagitan ng mga BLE device. Pagkatapos ng Bonding, ang encryption key ay nai-save at ang mga device ay awtomatikong kumokonekta kapag sila ay muling nagkalapit. Sa iOS, ang bonding ay awtomatikong pinamamahalaan ng system. Sa Android — sa pamamagitan ng BluetoothDevice.createBond(). Ang Bonding ay mahalaga para sa mga wearable device at fitness tracker na nangangailangan ng mabilis na reconnection.
Ang Advertising Data ay isang pangunahing mekanismo ng pagtuklas sa Bluetooth Low Energy. Ang mga manufacturer ng device ay maaaring magdagdag ng Manufacturer Specific Data sa advertising packet upang magpadala ng custom na data. Ang format ng packet ay may kasamang Company Identifier (2 bytes) at arbitrary na data. Sa iOS, ang CBCentralManager ay tumatanggap ng array ng service UUID para sa pag-filter — ito ay nakakatipid ng baterya. Sa Android, ang ScanFilter ay gumagana sa parehong prinsipyo.
| Parameter | iOS (Core Bluetooth) | Android (BluetoothGatt) |
|---|---|---|
| Manager | CBCentralManager | BluetoothLeScanner |
| Koneksyon | connect(to:) | connectGatt() |
| Serbisyo | discoverServices() | discoverServices() |
| Pagbasa | readValue(for:) | readCharacteristic() |
| Notification | setNotifyValue(_:for:) | setCharacteristicNotification() |
| Pahintulot | Awtomatiko | BLUETOOTH_SCAN, BLUETOOTH_CONNECT |
| iBeacon | CLLocationManager (native) | AltBeacon / mga library |
Ang MTU (Maximum Transmission Unit) ay ang maximum na laki ng isang Bluetooth Low Energy data packet. Bilang default, ang MTU ay 23 bytes (3 bytes header + 20 bytes data). Ang pagtaas ng MTU sa 512 bytes ay makabuluhang nagpapabilis ng transmisyon kapag nagpapalitan ng mga configuration o log. Sa iOS, ang maximumWriteValueLength ay nagpapakita ng available na MTU. Sa Android, ang requestMtu() ay ginagamit upang taasan ang MTU.
Ang Connection Interval ay ang dalas kung saan ang central device ay nagsusuri sa peripheral. Kung mas maikli ang interval, mas mataas ang bilis ng transmisyon, ngunit mas malaki rin ang konsumo ng kuryente. Ang karaniwang halaga ay mula 7.5 ms hanggang 4 na segundo. Para sa fitness tracker, sapat na ang 100 ms; para sa audio — 7.5 ms. Ang BLE sa mobile development ay nangangailangan ng balanse sa pagitan ng bilis ng transmisyon at buhay ng baterya ng device.
Sinusuportahan ng iOS ang BLE sa background mode sa pamamagitan ng Background Modes, ngunit may mga limitasyon. Ang app sa background ay tumatanggap ng mga notification mula sa mga katangian ngunit hindi maaaring aktibong mag-scan. Ang system ay nag-restart ng pag-scan kapag nagbago ang lokasyon ng device. Sa Android, ang background scanning ay nangangailangan ng Foreground Service na may permanenteng notification. Kung wala ito, ang mobile system ay papatayin ang proseso kapag na-minimize ang app.
Para sa maaasahang operasyon ng BLE sa mga mobile application, sundin ang mga patakarang ito. Gamitin ang notify sa halip na polling — isang katangian na may mga notification ay nagpapadala ng data kapag nagbago ito, nakatitipid ng baterya. Itakda ang optimal na MTU sa simula ng koneksyon. I-filter ang mga device ayon sa UUID ng serbisyo kapag nag-scan. Suriin ang compatibility ng BLE stack sa iba't ibang modelo — ang mga manufacturer (Xiaomi, Huawei, Samsung) ay gumagawa ng mga pagbabago na nakakaapekto sa pag-uugali ng Bluetooth.
Mga Madalas Itanong
Ang Bluetooth Low Energy (BLE) ay na-optimize para sa pana-panahong pagpapadala ng maliliit na packet na may mababang konsumo ng kuryente. Ang classic Bluetooth ay dinisenyo para sa mga audio stream at tuluy-tuloy na pagpapadala ng malalaking volume ng data.
Ang GATT (Generic Attribute Profile) ay isang data exchange protocol sa BLE na tumutukoy sa hierarchy na Service → Characteristic → Descriptor. Ang GATT ay ginagamit para magbasa, magsulat at makatanggap ng mga notification mula sa mga BLE device.
Bago ang Android 12, ang BLE scanning ay maaaring gamitin upang matukoy ang lokasyon, kaya pinagsama ng Google ang mga pahintulot na ito. Mula noong Android 12, isang hiwalay na BLUETOOTH_SCAN permission na walang kinalaman sa lokasyon ay ipinakilala.
Taasan ang MTU sa pamamagitan ng requestMtu() sa Android at maximumWriteValueLength sa iOS. Ang Connection Interval ay nakakaapekto rin sa bilis — kung mas maliit ito, mas mabilis ang paglipat. Ang optimal na kombinasyon ay nagbibigay ng hanggang 10 beses na pagpapabuti.
Ang Bonding ay pamamaraan ng paglikha ng permanenteng secure na koneksyon sa pagitan ng mga BLE device. Pagkatapos ng Bonding, ang encryption key ay nai-save at ang mga device ay awtomatikong kumokonekta nang walang paulit-ulit na paghahanap.
Buod
Gagawa kami ng mobile application na turnkey
Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.