æ°å¹Žåãäœæ¥äžã®ãããžã§ã¯ãã§åããŠBluetoothã«åºäŒã£ããšãããåºçºç¹ããèŠã€ããããã«ããã®ä»çµã¿ãç解ããã®ã«éåžžã«åœ¹ç«ã€ãã®èšäºãèŠã€ããŸããã åå¿è
ã«ãšã£ãŠäŸ¿å©ã§ããããšãé¡ã£ãŠããŸãã
èè
ã«ã€ããŠïŒYoav Schwartzã¯ãã³ãã³ããŒã²ã³ã®ãã€ã«ãŒå
±æã·ã¹ãã ã§ããDonkey Republicã®iOSã®äž»èŠéçºè
ã§ããããµã€ã¯ãªã³ã°ã«å¯Ÿããæ
床ãå€ããããšåªåããŠããŸãã 次ã«ãèè
ã«ä»£ãã£ãŠè©±ãããŸãã
ãã®èšäºã§ã¯ãCoreBluetoothã䜿çšããããã®å®çšçãªãã¯ããã¯ã«ã€ããŠèª¬æããŸãã ãŸãã誰ãããã®æè¡ã«ç²ŸéããŠããããã§ã¯ãªããããBluetooth Low EnergyïŒBLEïŒã«ã€ããŠã次ã«BLEããã€ã¹ãšå¯Ÿè©±ã§ããAppleãã¬ãŒã ã¯ãŒã¯ã§ããCoreBluetoothã«ã€ããŠèª¬æããŸãã ãŸãããããã°ãæ³£ããé ãã髪ãåŒãè£ãéã«ç§èªèº«ãåŠãã çºéäžã®ããªãã¯ã«ã€ããŠã説æããŸãã
Bluetooth Low Energy
ãŸããBLEãšã¯äœã§ããïŒ Bluetoothã®ãããªãã®ã§ãã¹ããŒã«ãŒããããã»ãããªã©ã§äœ¿çšãããŠããŸãããéãããããŸã-ãã®ãããã³ã«ã¯ã»ãšãã©é»åãæ¶è²»ããŸããã éåžžãBLEããã€ã¹ã®1åã®ããããªãŒå
é»ã¯ãæ°ãæããæ°å¹Žç¶ããŸãïŒãã¡ããã䜿çšæ¹æ³ã«ãã£ãŠç°ãªããŸãïŒã ããã«ããã以åã¯ãéåžžã®ãBluetoothã§ã¯å©çšã§ããªãã£ãããšãå¯èœã«ãªããŸãã ãã®æšæºã¯Bluetooth 4.0ãšåŒã°ãããã¹ãŠã¹ããŒãBluetoothãšåŒã°ããæè¡ããå§ãŸããåŸã«BLEã«çºå±ããŸããã 200ããŒãžã®
ããã¥ã¢ã«ããã ãå°±å¯åã®åºæ¿çãªèªæžãèªãããšãã§ããŸãã
BLEã¯ãšãã«ã®ãŒæ¶è²»ã«é¢ããŠéåžžã«çµæžçã§ããããããã³ã«èªäœã¯ããã»ã©è€éã§ã¯ãããŸããã ãªãbleã§ããïŒ ã©ã®ããã«äœ¿çšã§ããŸããïŒ æåã®æãäžè¬çãªäŸã¯ãå¿æã»ã³ãµãŒã§ãã éåžžããã®ããã€ã¹ã¯ããããã³ã«ãä»ããŠå¿ææ°ã枬å®ããŠéä¿¡ããŸãã ãŸããBLEãä»ããŠæ¥ç¶ããåéããããŒã¿ãèªã¿åãããšãã§ããããããçš®é¡ã®ã»ã³ãµãŒããããŸãã æåŸã«ãå Žæãžã®ãè¿æ¥ããäŒããããšãã§ããiBeaconsããããŸãã iPhoneã§ã¯Appleã¯iBeaconsãéåžžã®Bluetoothããã€ã¹ãšããŠæ€åºããæ©èœããããã¯ãããããåŒçšç¬Šã§å²ã¿ãŸãããã®ãããCoreLocationã§äœæ¥ããå¿
èŠããããŸãã äžè¬çã«ãããã¯ã¢ãã®ã€ã³ã¿ãŒãããã§ãããã¬ããŸãã¯ãšã¢ã³ã³ã«æ¥ç¶ãããã®ãããã³ã«ã䜿çšããŠéä¿¡ã§ããŸãã
ã©ã®ããã«æ©èœããŸããïŒ
ããªãã§ã©ãŒããããŸã-ãããã¯ãBluetoothãããã³ã«ã䜿çšããããã€ã¹ã§ãã ååšèŸºæ©åšã«ã¯ãµãŒãã¹ãããããµãŒãã¹ã®æ°ã¯ããã€ã§ãããŸããŸããããããããã«ç¹åŸŽããããŸãã ããªãã¡ãŒããµãŒããŒãšèŠãªãããšãã§ããŸãã ãã®çµæããã¹ãŠããªãã«ãªãããšãããã°ãããŒã¿ã®è»¢éã«æéããããããšãããããã®ããŒã¿ããŸã£ããå±ããªãããšããããŸãã
äžè¬ã«ãå€ãã®ç¹æ§ãæã€ãµãŒãã¹ããããåç¹æ§ã«ã¯å€ãã¿ã€ããªã©ãå«ãŸããŠããŸãã CoreBluetoothã䜿çšããã«ã¯ããã¹ãŠãç¥ãå¿
èŠã¯ãããŸãããæãéèŠãªããšã¯ããŒã¿ãèªãããšã§ãã ããã¯ãç§ãã¡ãèªåã®ç®çã®ããã«ååŸãå€æŽããŸãã¯äœ¿çšããããšããŠãããã®ã§ãã ãã®ããŒã¿ãšãããã§äœãã§ãããã«ã€ããŠã®ç¥èãå¿
èŠã§ãã
BLEã®ç°¡åãªçŽ¹ä»ã¯ãæè¡çãªæ©èœãç§ããããã説æããŠããäœåãã®ãªãœãŒã¹ãããããã§ãã
ã³ã¢Bluetooth
Core Bluetoothã¯ãããªãåã«iOS 5ã§Appleã«ãã£ãŠå°å
¥ãããŸãããAppleã¯ãAndroidãããã¯ããã«æ©ãããã€ã¹ã«BLEãå°å
¥ããæè¡ã®äººæ°ãé«ãŸã£ãŠããããšã«åãçµã¿å§ããŸããã å€ãã®éçºè
ã¯ãæŠããŠã¢ããªã±ãŒã·ã§ã³ã§ãã®ãã¬ãŒã ã¯ãŒã¯ã䜿çšããŠããŸããããã¯åãªãã©ãããŒã§ããBLEãããã³ã«èªäœã¯éåžžã«è€éã ããã§ãã æ¬åœã§ã¯ãããŸããããç§ãä¿¡ããŠãã ãããããã¯ç§ãæ¯æ¥äžç·ã«åããããã®ã§ã¯ãããŸããã ä»ã®å€ãã®ãã®ãšåãããã«ãAppleã¯ãããçŸãã䟿å©ãªããã±ãŒãžã«å
ã¿ããã«éçºè
å
šå¡ãç解ã§ããçšèªã䜿çšã§ããããã«ããŸããã
次ã¯ããã¬ãŒã ã¯ãŒã¯ãšã®éä¿¡ã«é¢ä¿ããã¯ã©ã¹ã«ã€ããŠæ¬åœã«ç¥ã£ãŠããã¹ãããšãäŒããçªã§ãã äž»ãªã¢ã¯ã¿ãŒã¯CBCentralManagerã§ããäœæããŸãã
manager = CBCentralManager(delegate:self, queue:nil, options: nil)
äžèšã§ã¯ã代ç人ã瀺ãæ°ãããããŒãžã£ãŒãäœæããŸãããããããªããšãããã䜿çšã§ããŸããã ãŸãããã¥ãŒïŒãã®å Žåã¯nilïŒã瀺ããŸããããã¯ããããŒãžã£ãŒãšã®ãã¹ãŠã®éä¿¡ãã¡ã€ã³ãã¥ãŒã§å®è¡ãããããšãæå³ããŸãã
ããªããäœãããããšããŠããã®ããæ£ç¢ºã«ç解ããå¿
èŠããããŸã-å¥ã®ãã¥ãŒã䜿çšãããšã¢ããªã±ãŒã·ã§ã³ãè€éã«ãªããŸããããã¡ããããŠãŒã¶ãŒã¯ããªãããã£ãšæããŸãã 1ã€ã®ããã€ã¹ã®ã¿ãšéä¿¡ããäºå®ã®å Žåãã¡ã€ã³ãã¥ãŒããããã䜿çšããããšã¯ã§ããŸããã ããã§ãå®éšãããå Žåã¯ããã¥ãŒãäœæããã³ã³ã¹ãã©ã¯ã¿ãŒã§æå®ããå¥ã®å Žæã§çµæã䜿çšããåã«ã¡ã€ã³ã®ãã¥ãŒã«æ»ãããšãå¿ããªãã§ãã ããã
ãªãã·ã§ã³ ããã«ã¯ç¹ã«èå³æ·±ããã®ã¯ãããŸãããããããäž»ãªãã®ã§ã-ãããŒãžã£ãŒãäœæãããŠãŒã¶ãŒã«å¯ŸããŠbluetoothããªãã«ãªã£ãŠããå Žåãã¢ããªã±ãŒã·ã§ã³ã¯ãã®ããšãç¥ãããŸãããã»ãšãã©ã®äººããOKãïŒå®éã«ã¯bluetoothãå«ã¿ãŸããïŒãã¯ãªãã¯ããŸããç§ã¯äœ¿çšããŸããã
ãŸãããããŒãžã£ãŒãäœæããåŸãããªã²ãŒãã¯ã¡ãœãããåŒã³åºããŸãã
func centralManagerDidUpdateState(_ central: CBCentralManager)
ãã®ããããŠãŒã¶ãŒãBluetoothãæå¹ã«ããŠãããã©ããã«ããããããããŒããŠã§ã¢ããå¿çãåãåããŸãã
æåã®ãã³ãïŒãããŒãžã£ãŒã¯ãbluetoothããªã³ã«ãªã£ãŠããããã®ç¶æ
ã¯ãPoweredOnããšããåçãåŸããŸã§ã¯åœ¹ã«ç«ã¡ãŸããã æ®ãã®ç¶æ
ã¯ããŠãŒã¶ãŒã«bluetoothããªã³ã«ããããã«äŸé Œããå Žåã«ã®ã¿äœ¿çšã§ããŸãã
ããã€ã¹æ€çŽ¢
ãããŒãžã£ãŒãæ£åžžã«æ©èœããŠããã®ã§ã次ãèŠãããšãã§ããŸãã
ç§ãã¡ã®åšãã«ãããã®ïŒ.PoweredOnç¶æ
ãååŸããåŸãscanForPeripheralsWithServicesé¢æ°ãåŒã³åºããŸã:)
manager.scanForPeripheralsWithServices([CBUUID], options: nil)
ãµãŒãã¹ã«é¢ããŠã¯ãããã¯CBUUIDé
åïŒBluetooth Low Energyã䜿çšããå±æ§ã®128ããããŠãããŒãµã«äžæèå¥åã§ããã¯ã©ã¹ïŒã§ããããã®UIDã®ã»ããã®ã¿ãæã€ããã€ã¹ãæ€çŽ¢ãããã£ã«ã¿ãŒãšããŠäœ¿çšããŸããããã¯CoreBluetoothã®äžè¬çãªæ¹æ³ã§ãã
åŒæ°ãšããŠnilãæž¡ããšãåšãã®ãã¹ãŠã®ããã€ã¹ãèŠãããšãã§ããŸãã ãã¡ãããããã©ãŒãã³ã¹ã®ããã«ãå¿
èŠãªãã©ã¡ãŒã¿ãŒã®é
åãæå®ããããšããå§ãããŸãããããããç¥ããªãå Žåãnilãæž¡ããŠã誰ãæ»ãªãªããŠãã²ã©ãããšã¯èµ·ãããŸããã
ããã€ã¹ã®æ€çŽ¢ãéå§ãããããåæ¢ããå¿
èŠããããŸãã ãã以å€ã®å Žåãæ€çŽ¢ã¯ç¶è¡ããããŠãŒã¶ãŒã®ããããªãŒãåæ¢ãããŸã§çéžããŸãã é©åãªããã€ã¹ãèŠã€ããããæ€çŽ¢ã®å¿
èŠããªããªããšããã«ãåæ¢ããŸãïŒ
manager.stopScan()
æ°ããããã€ã¹ãæ€åºããããã³ã«ããããŒãžã£ãŒããªã²ãŒãã¯ãåæåæã«æå®ãããã¥ãŒã§didDiscoverPeripheralé¢æ°ãåŒã³åºããŸãã ãã®é¢æ°ã¯ãèŠã€ãã£ãããã€ã¹ïŒåšèŸºæ©åšïŒãããã€ã¹ã«é¢ããæ
å ±ïŒadvertisementData-ãããéçºè
ãæ¯å衚瀺ããããšã決å®ãããã®ïŒããã³çžå¯ŸçãªRSSIä¿¡å·ã¬ãã«ããã·ãã«ã§éä¿¡ããŸãã
func centralManager(_ central: CBCentralManager, didDiscover peripheral: CBPeripheral, advertisementData: [String : Any], rssi RSSI: NSNumber)
2çªç®ã®ãã³ãïŒæ€åºãããããªãã¡ãŒãžã®åŒ·ããªã³ã¯ãåžžã«ç¶æããŸãã ãããè¡ãããªãå Žåãã·ã¹ãã ã¯ããã€ã¹ãæ€åºããå¿
èŠããªããšå€æããç Žæ£ããŸãã 圌女ã¯åœŒãèŠããŠããŸãããç§ãã¡ã¯åœŒã«ã¢ã¯ã»ã¹ã§ããªããªããŸãã ããããªããšãããã€ã¹ãæäœã§ããªããªããŸãã
ããã€ã¹æ¥ç¶
èå³ã®ããããã€ã¹ãèŠã€ããŸãã-ãããããŒãã£ãŒã«æ¥ãŠãããã女ã®åãèŠãæ¹æ³ã§ãã æ¥ç¶ããããconnectPeripheralé¢æ°ãåŒã³åºããŸã-ã飲ã¿ç©ã賌å
¥ããæäŸããŸãã ãããã£ãŠãå¿
èŠãªããã€ã¹ïŒåšèŸºæ©åšïŒã«æ¥ç¶ããããšãããšããã¯ãããŸãã¯ããããããããããŸãããiPhoneã¯æ¬åœã«è¯ãã®ã§ãè¯å®çãªçããèãããŸãã
manager.connectPeripheral(peripheral, options: nil)
ããã§ãæ¥ç¶ã®è²¬ä»»è
ã§ãããããŒãžã£ãŒã«ç®ãåããæ¥ç¶ããŠããç¹å®ã®ããã€ã¹ã圌ã«äŒããŸãããŸãããªãã·ã§ã³ã«nilãä»ããŸãïŒãªãã·ã§ã³ã«ã€ããŠè©³ããç¥ãããå Žåã¯ãããã¥ã¡ã³ããèªãã§ãã ããããéåžžã¯ãªãã·ã§ã³ãªãã§è¡ãããšãã§ããŸãïŒã ããã€ã¹ã§ã®äœæ¥ãçµäºããããååäžã«cancelPeripheralConnectionããåæã§ããŸãã
//called to cancel and/or disconnect manager.cancelPeripheralConnection(peripheral)
æ¥ç¶ãŸãã¯åæããåŸãããªã²ãŒããã次ã®ããšãéç¥ãããŸãã
//didConnect func centralManager(central: CBCentralManager!, didConnectPeripheral peripheral: CBPeripheral!) //didDisconnect func centralManager(central: CBCentralManager!, didDisconnectPeripheral peripheral: CBPeripheral!, error: NSError!)
次ã«ãããã«2ã€ã®éèŠãªãã³ãã瀺ããŸãã Bluetoothãããã³ã«ã¯æ¥ç¶ã¿ã€ã ã¢ãŠããæ³å®ããŠããŸãããAppleã¯æ°ã«ããŸããã iOSã¯äœåºŠãæ¥ç¶ãè©Šè¡ããcancelPeripheralConnectionãåŒã³åºããŸã§åæ¢ããŸããã ãã®ããã»ã¹ã«ã¯æéãããããããå¯èœæ§ããããããæéãå¶éããå¿
èŠããããæçµçã«æ¥ç¶æåã¡ãã»ãŒãžïŒdidConnectPeripheralïŒãåä¿¡ããªãå Žåã¯ããŠãŒã¶ãŒã«åé¡ãçºçããããšãéç¥ããå¿
èŠããããŸãã
åšèŸºæ©åšãžã®åŒ·åãªãªã³ã¯ãä¿æããªãå ŽåãiOSã¯åã«æ¥ç¶ããªã»ããããŸãã 圌女ã®èŠ³ç¹ãããããã¯ããªãããããå¿
èŠãšããªãããšãæå³ãããããç¶æããããšã¯ããããªãŒã«ãšã£ãŠããªããšãã«ã®ãŒéçŽåã®ä»äºã§ãããAppleããšãã«ã®ãŒæ¶è²»ãšã©ã®ããã«é¢ä¿ããããç¥ã£ãŠããŸãã
ããã€ã¹ã䟿å©ã«ããŸããã
ããã§ãããã€ã¹ã«æ¥ç¶ããŸãããããã§äœããããŸãããã åã«ããµãŒãã¹ãšæ©èœããããã«å«ãŸãã䟡å€ã«ã€ããŠè¿°ã¹ãŸãããããããå¿
èŠã§ãã ããã§ããã€ã¹ãäœæãããæ¥ç¶ãããperipheral.discoverServicesãåŒã³åºãããšã§ãµãŒãã¹ãååŸã§ããŸãã
peripheral.discoverServices(nil) func peripheral(peripheral: CBPeripheral!, didDiscoverServices error: NSError!) peripheral.services
ããã¯å°ãæ··ä¹±ããããã«èãããŸãããããªã²ãŒãã¯ããªãªãã£ã¹ãžã®ããªã²ãŒãã§ãããšããäºå®ã«ããããããããããŒãžã£ãäœæãããšãã«å®çŸ©ããã¹ã¬ããã§åŒã³åºãããŸãã ã€ãŸããã·ã¹ãã ã¯ã©ã®ã¹ããªãŒã ã§åäœããããèšæ¶ããŠããããã¹ãŠã®Bluetoothéä¿¡ã¯ãã®ã¹ããªãŒã ã§è¡ãããŸãã 䜿çšããªãã£ãå Žåã¯ãã¡ã€ã³ã«æ»ãããšãå¿ããªãããšãéèŠã§ãã
ãµãŒãã¹ã¯å
¥æã§ããŸãããããŸã 察åŠãããã®ã¯ãããŸããã 次ã«ãperipheral.discoverCharacteristicsãåŒã³åºãå¿
èŠããããŸããããªã²ãŒãã¯ãdidDiscoverCharacteristicsForServiceã§åä¿¡ãããµãŒãã¹ã§äœ¿çšå¯èœãªãã¹ãŠã®ç¹æ§ãæäŸããŸãã ããã§å€ãèªã¿åãããšãã§ããŸã
ããã«å«ãŸããŠããïŒreadValueForCharacteristicïŒããäœããå€æŽããããããã«æããŠãã ãã-setNotifyValueã
peripheral.discoverCharacteristics(nil, forService: (service as CBService)) func peripheral(peripheral: CBPeripheral!, didDiscoverCharacteristicsForService service: CBService!, error: NSError!) peripheral.readValueForCharacteristic(characteristic) peripheral.setNotifyValue(true, forCharacteristic: characteristic) func peripheral(peripheral: CBPeripheral!, didUpdateValueForCharacteristic characteristic: CBCharacteristic!, error: NSError!)
Androidãšã¯ç°ãªããAppleã¯èªæžãšéç¥ãåºå¥ããŸããã ã€ãŸããäœãèµ·ãã£ãŠããã®ãããããªã-ããã€ã¹ããäœããèªãã§ãããããã®ããã€ã¹ãäœããäŒããŠããã
ããã€ã¹ãžã®é²é³
ããã€ã¹ããããããããæ
å ±ãèªã¿åãã管çããŸãã ãããã£ãŠãéåžžã®NSDataã®ããã«ãæ
å ±ãèšé²ã§ããŸãã ãã®ããã€ã¹ãç§ãã¡ã«äœãæåŸ
ããäœãåãå
¥ããããã®ããç¥ãå¿
èŠããããŸãã
ã»ãšãã©ã®BLEããã€ã¹ã«ã¯ãããã€ã¹ãšãéä¿¡ãããæ¹æ³ãæ確ãªAPIã®äžçš®ã§ããä»æ§ãä»å±ããŠããŸãã ããã€ã¹ãç§ãã¡ã«æåŸ
ãããã®ã®å°ãªããšã倧ãŸããªã¢ã€ãã¢ãåŸãããã«ãç¹æ§ããããŒã¿ãåŒãåºãããšãã§ããŸãã
ä»æ§ãããã©ã®ç¹æ§ã§ã©ã®ããããã£ãèªã¿åããã©ã®ç¹æ§ã§æžã蟌ãããå€æŽãéç¥ããããã©ããïŒisNotifyingïŒãåŠç¿ããŸãã ãããŠãã®å Žåãããã§åäœããããã«å¿
èŠãªãã¹ãŠãèŠã€ããŸãã
peripheral.writeValue(data: NSData!, forCharacteristic: CBCharacteristic!, type: CBCharacteristicWriteType) characteristic.properties - OptionSet type characteristic.isNotifying func peripheral(peripheral: CBPeripheral!, didWriteValueForCharacteristic characteristic: CBCharacteristic!, error: NSError!)
èšé²ããã»ã¹äžã«ãããªã²ãŒãã¯ãã¹ãŠãããŸããã£ãããšïŒdidWriteValueForCharacteristicsïŒãç®çã®å€ãæŽæ°ãããããšããŠãŒã¶ãŒã«éç¥ããŸãããŠãŒã¶ãŒã«éç¥ãããããã®æ
å ±ãç°ãªãæ¹æ³ã§äœ¿çšã§ããŸãã
ãã®ãããã¯ã¯ãAppleã®å®è£
ã«äŸåããŠéåžžã«çãã»ã¯ã·ã§ã³ã§æ€èšãããããå€ãã®åé¡ã«çŽé¢ããå¿
èŠããããŸãã ããšãã°ãå§ä»»ãžã®éåžžã«åŒ·ãäŸåæ§ããšãŠãæãããŠããã¢ããã«ã
CBPeripheralã®ç¶æ¿ïŒ ãã¹ãŠããšãŠãç°¡åã ã£ãã
ããã€ã¹ãããã®ã§äœ¿çšãéå§ã§ããããã«èŠããŸãããå®éã«ã¯ããã€ã¹èªäœã«ã€ããŠã¯äœãããããŸããã ãããããããã¯ããšã¢ã³ã³ããŸãã¯å¿ææ°ã»ã³ãµãŒãå¶åŸ¡ãããã§ãããã ã©ã®ããã€ã¹ãšéä¿¡ããŠããããç¥ãå¿
èŠããããŸãã
ç¶æ¿ã®ããã«èŠããŸããå
±éç¹ããããšããç¹æ®ãªã±ãŒã¹ããããŸãã ç§ã®çµéšããèšãã°ãç¶æ¿ã䜿çšãããšãæåŸ
ã©ããã«äœãããŸã£ããæ©èœãããäœãããŸã£ããæ©èœããããã®çç±ãããããŸããã äžè¬ã«ãCBPeripheralãç¶æ¿ãããšããèãã«å察ããããèŠåããŸãã ã©ãããïŒ
CBPeripheralã管çãããªããžã§ã¯ãã®ã³ã³ã¹ãã©ã¯ã¿ãŒã«è¿œå ããããšããå§ãããŸãã ããã«ããããã®ã¯ã©ã¹å
ã«ã«ãã»ã«åãããŸãã ããã䜿çšããŠããã€ã¹ãšããåãããiOSãžã®åŒ·åãªãªã³ã¯ãç¶æããŠãiOSãæ¥ç¶ãåæããªãããã«ããŸãã ããããæãéèŠãªããšã¯ããã®ã¯ã©ã¹ãããªã²ãŒããšããŠäœ¿çšããããšã§ããããããªããšããã¹ãŠã®ããã€ã¹ã1ãæã§ç®¡çããã®ãé£ãããªããããã§ãªãå Žåã¯å€ãã®è
åšã«ãªããŸãã
CBPeripheralDelegateã®æ¥ç¶ãšæäœ
ãããŠãããã€ã¹ã«æ¥ç¶ããCBPeripheralDelegateã«ãªããããšèããŠããŸãã ãã1ã€åŸ®åŠãªéãããããŸããããã€ã¹ãæäœãããã®ãµãŒãã¹ãšç¹æ§ããåãåããããèªã¿åããšæžã蟌ã¿ãè¡ãéãã»ãšãã©ãã¹ãŠã®éä¿¡ã¯åšèŸºæ©åšãšè¡ãããŸãã æ¥ç¶ãé€ããã¹ãŠã
åœç¶ããã¹ãŠã®ã³ãã¥ãã±ãŒã·ã§ã³ã1ãæã«éäžããããšèããŠããŸããã管çè
ã¯ããã€ã¹ã§äœãèµ·ãã£ãŠããããèªèããŠããå¿
èŠããããŸãã ãããŠãå°é£ãªã®ã¯ãããã€ã¹ã«äœãèµ·ããŠããããå
šå¡ã«ã¿ã€ã ãªãŒã«ç¥ãããããã«ã1ã€ã®çå®ã®æ
å ±æºãæã€ããšã§ãã ãããè¡ãããã«ãåšèŸºæ©åšã®ã¹ããŒã¿ã¹ãç£èŠããŸã-åæãæ¥ç¶ãæ¥ç¶ããå€æŽã§ããŸãã åžžã«çŸåšã®ç¶æ³ã«ã€ããŠèª¬æããŸãã å
ã»ã©ã話ãããããã«ãå¶åŸ¡æ©èœã®ã¹ããŒã¿ã¹ã®å€æŽããµãã¹ã¯ã©ã€ãããå¿
èŠããããŸããããã«ããã1ãæããããã€ã¹ãšéä¿¡ã§ããããã«ãªããŸãã
è¿æ¥å®çŸ©
ãã®ãããã¯ã«é¢ããéåžžã®ããã¥ã¡ã³ããèŠã€ããã®ã¯é£ãããããéåžžã«éèŠãªãã€ã³ãã§ãã Appleãšãã®iBeaconsã®å Žåããã¹ãŠãã·ã³ãã«ã§ãBluetoothããã€ã¹ã«ã©ãã ãè¿ãããæããŠãããŸãã
æ®å¿µãªããããµãŒãããŒãã£ã®ããã€ã¹ãæäœããç°¡åãªæ¹æ³ã¯æäŸãããŠããŸããã ãããŠãæãè¿ãããã€ã¹ã決å®ããå¿
èŠãããããšãäœåºŠããããŸããã ããã€ã¹ã䜿çšå¯èœãªç¯å²ã«ãããã©ãããç解ããããšãå°é£ã§ãã æã
ãããã€ã¹ãæ€çŽ¢ãããšããããã¯äžåºŠã ãããèªèº«ãç¥ã£ãŠãæ¶ããããšãã§ããŸãããããŠãæ¥ç¶ã®è©Šã¿ã¯å€±æããã§ãããã
次ã®æ¹æ³ã䜿çšããŸããdiscoverPeripheralã§åä¿¡ããåã¡ãã»ãŒãžã®æ¥ä»ãšä¿¡å·åŒ·åºŠïŒRSSIïŒã©ãã«ã§ã¹ã¿ãã¯ãä¿åããŸãã 誰ããCoreLocationã«åºäŒã£ãå Žåãç§ãã¡ã®æ¹æ³ã¯ã¿ã€ã ã¹ã¿ã³ããšå¯Ÿå¿ãã座æšãããã«ä¿åãããæ¹æ³ã«äŒŒãŠããŸãã éåžžãä¿¡å·ïŒRSSIïŒãé«ãã»ã©ãããã€ã¹ã¯è¿ããªããŸãã ããã€ã¹ãã¢ã¯ã»ã¹å¯èœãªç¯å²ã«ãããã©ãããç解ããããšã¯ããå°é£ã§ããããã¯ããã®ã³ã³ã»ããèªäœãéåžžã«æè»ã§ããããã§ãã ãã®ããã«ãä¿¡å·ã®å éå¹³åã䜿çšããŸãã æ¥ç¶ãããŠããããã€ã¹ã®ä¿¡å·åŒ·åºŠã¯ãç¥ãå¿
èŠããããã³ã«æåã§èŠæ±ããå¿
èŠãããããšã«æ³šæããŠãã ããã
次ã¯ïŒ
æ®å¿µãªããããã®èšäºãèªãã§ãããªããå°é家ã«ãªãããšã¯ãããŸããã
èå³æ·±ããã®ã«ãªããŸãã
-Appleã®CoreBluetoothããã°ã©ãã³ã°ã¬ã€ãã«æ³šæããŠãã ãããã¬ã€ãã¯ããŸã倧ãããããŸããããéåžžã«äŸ¿å©ã§ãã WWDC 2012ããã®2ã€ã®æŸéïŒ
åºæ¬ããã³
äžçŽ ïŒãš
2013幎ããã®æŸéããŸã ãããŸãããå¿é
ããå¿
èŠã¯ãããŸããããã以æ¥ã»ãšãã©å€ãã£ãŠããŸããã
ãŸããRealm Webãµã€ãã«æçš¿ããã
Altconf 2015ã®ãããªããããŸãããã®ãããªã§ã¯ãå倧ãªäººç©ã§ããã¹ãã·ã£ãªã¹ãã§ããJohn Sherã®çµéšã
玹ä»ããŠããŸãã