Slide 1

Slide 1 text

iBeacons #sydinmotion

Slide 2

Slide 2 text

What are they? Built on Bluetooth 4.0. Extremely Low Powered. Protocol designed by Apple. #sydinmotion

Slide 3

Slide 3 text

#sydinmotion

Slide 4

Slide 4 text

Emit a Beacon

Slide 5

Slide 5 text

#sydinmotion

Slide 6

Slide 6 text

UUID

Slide 7

Slide 7 text

Major UUID

Slide 8

Slide 8 text

Minor Major UUID

Slide 9

Slide 9 text

Transmitting #sydinmotion

Slide 10

Slide 10 text

#sydinmotion class BeaconViewController < UIViewController ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! end def viewDidLoad super ! ! ! ! ! ! end uuid = NSUUID.alloc.initWithUUIDString("7cbff8c6-4d84-4e8c-8703-377e03d4f69f") @region = CLBeaconRegion.alloc.initWithProximityUUID(uuid, identifier: “com.wr.reg") queue = Dispatch::Queue.main.dispatch_object @manager = CBPeripheralManager.alloc.initWithDelegate(self, queue: queue)

Slide 11

Slide 11 text

#sydinmotion class BeaconViewController < UIViewController ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! end def viewDidLoad super ! ! ! ! ! ! end def peripheralManagerDidUpdateState(peripheral) ! ! ! end uuid = NSUUID.alloc.initWithUUIDString("7cbff8c6-4d84-4e8c-8703-377e03d4f69f") @region = CLBeaconRegion.alloc.initWithProximityUUID(uuid, identifier: “com.wr.reg") queue = Dispatch::Queue.main.dispatch_object @manager = CBPeripheralManager.alloc.initWithDelegate(self, queue: queue) if peripheral.state == CBPeripheralManagerStatePoweredOn @manager.startAdvertising @region.peripheralDataWithMeasuredPower(nil) end

Slide 12

Slide 12 text

Searching #sydinmotion

Slide 13

Slide 13 text

Registering a Beacon Region Entering a Region Ranging any Beacons (proximity) Exiting the Region #sydinmotion

Slide 14

Slide 14 text

Registering a Beacon Region Entering a Region Ranging any Beacons (proximity) Exiting the Region location_manager.startMonitoringForRegion(beacon_region) locationManager(manager, didEnterRegion: region) locationManager(manager, didRangeBeacons: beacons, inRegion: region) locationManager(manager, didExitRegion: region) #sydinmotion

Slide 15

Slide 15 text

Ranging Beacons! CLProximityUnknown CLProximityFar CLProximityNear CLProximityImmediate #sydinmotion ?

Slide 16

Slide 16 text

Gotchas #sydinmotion

Slide 17

Slide 17 text

Register the Beacon Region #sydinmotion Must Launch your App Limit of 20 Beacons Persist after closure of your App (iOS 7.1)

Slide 18

Slide 18 text

Example #sydinmotion

Slide 19

Slide 19 text

Office Arrivals and Departures #sydinmotion

Slide 20

Slide 20 text

#sydinmotion

Slide 21

Slide 21 text

class BeaconController < UIViewController def beacon_region ! ! ! ! ! ! end uuid = NSUUID.alloc.initWithUUIDString("1609DCB3-F641-4231-8B12-70129AAFE0DE") beacon = CLBeaconRegion.alloc.initWithProximityUUID(uuid, identifier: “com.willrax.s") beacon.notifyOnEntry = true beacon.notifyOnExit = true beacon.notifyEntryStateOnDisplay = true beacon #sydinmotion

Slide 22

Slide 22 text

class BeaconController < UIViewController def beacon_region ! ! ! ! ! ! end uuid = NSUUID.alloc.initWithUUIDString("1609DCB3-F641-4231-8B12-70129AAFE0DE") beacon = CLBeaconRegion.alloc.initWithProximityUUID(uuid, identifier: “com.willrax.s") beacon.notifyOnEntry = true beacon.notifyOnExit = true beacon.notifyEntryStateOnDisplay = true beacon def location_manager ! ! ! end @location_manager ||= CLLocationManager.alloc.init.tap do |manager| manager.delegate = self end #sydinmotion

Slide 23

Slide 23 text

class BeaconController < UIViewController def beacon_region ! ! ! ! ! ! end uuid = NSUUID.alloc.initWithUUIDString("1609DCB3-F641-4231-8B12-70129AAFE0DE") beacon = CLBeaconRegion.alloc.initWithProximityUUID(uuid, identifier: “com.willrax.s") beacon.notifyOnEntry = true beacon.notifyOnExit = true beacon.notifyEntryStateOnDisplay = true beacon def location_manager ! ! ! end @location_manager ||= CLLocationManager.alloc.init.tap do |manager| manager.delegate = self end def viewDidLoad super end location_manager.startMonitoringForRegion(beacon_region) #sydinmotion

Slide 24

Slide 24 text

! ! end manager.delegate = self end def viewDidLoad super end location_manager.startMonitoringForRegion(beacon_region) def locationManager(manager, didEnterRegion: region) end manager.startRangingBeaconsInRegion(region) if region.isKindOfClass(CLBeaconRegion) end #sydinmotion

Slide 25

Slide 25 text

! ! end manager.delegate = self end def viewDidLoad super end location_manager.startMonitoringForRegion(beacon_region) def locationManager(manager, didRangeBeacons: beacons, inRegion: region) ! ! ! end def locationManager(manager, didEnterRegion: region) end manager.startRangingBeaconsInRegion(region) if region.isKindOfClass(CLBeaconRegion) if beacons.last.proximity == CLProximityImmediate end Broadcast.new("Office Arrival: willrax" ).send end #sydinmotion

Slide 26

Slide 26 text

! ! end manager.delegate = self end def viewDidLoad super end location_manager.startMonitoringForRegion(beacon_region) def locationManager(manager, didRangeBeacons: beacons, inRegion: region) ! ! ! end def locationManager(manager, didEnterRegion: region) end def locationManager(manager, didExitRegion: region) ! ! ! ! end manager.startRangingBeaconsInRegion(region) if region.isKindOfClass(CLBeaconRegion) if region.isKindOfClass(CLBeaconRegion) ! ! end if beacons.last.proximity == CLProximityImmediate end manager.stopRangingBeaconsInRegion(region) Broadcast.new("Office Departure: willrax" ).send Broadcast.new("Office Arrival: willrax" ).send end #sydinmotion

Slide 27

Slide 27 text

Real World #sydinmotion

Slide 28

Slide 28 text

bit.ly/FormaQ bit.ly/tillless FormaQ Tillless bit.ly/awwapps ˑ*Aww Apps*ˑኯ #sydinmotion

Slide 29

Slide 29 text

uestions? #sydinmotion @willrax

Slide 30

Slide 30 text

bit.ly/blog-ibeacon bit.ly/ibeacon-app iBeacons and RubyMotion Blog Post Example Transmitter and Finder bit.ly/motion-arrivals Presentation Example Code #sydinmotion bit.ly/beaconpi bit.ly/clbeacon Raspberry Pi as iBeacon CLBeacon Class Reference bit.ly/beaconosx Beacon Emitter for OSX