The Physical Web: A Sneak Peak into the Future of IoT and Mobility

The Physical Web: A Sneak Peak into the Future of IoT and Mobility



July 04, 2016


  1. The Physical Web: A Sneak Peak into the Future of

    IoT and Mobility Qian // XKE 201607
  2. Agenda What’s The Physical Web? BLE Beacons: iBeacon & Eddystone

    Google Tools & APIs for Beacon Web bluetooth API Takeaways
  3. What’s The Physical Web?

  4. None
  5. Contextual Computing Real World Context QR Code NFC …

  6. Walk Up And Use Anything

  7. None
  8. None
  9. None
  10. BLE Beacons

  11. Bluetooth Low Energy Bluetooth Smart / Bluetooth 4.0 Small Size

    & Low Cost Low Power Requirements Native OS support: iOS 5+, Android 4.3+
  12. Beacon Signal Characteristics Tx Power: Transmit Power dBm: decibel-milliwatts Advertising

    Interval RSSI: Received Signal Strength Indicator Measured Power
  13. Measured Power

  14. Beacon Manufacturers


  16. None
  17. None
  18. None
  19. iBeacon

  20. iBeacon Data Packets Core Location API Region Monitoring Ranging

  21. WWDC June 2013


  23. Field Size Description UUID 16 bytes Application developers should define

    a UUID specific to their app and deployment use case. Major 2 bytes Further specifies a specific iBeacon and use case. For example, this could define a sub-region within a larger region defined by the UUID. Minor 2 bytes Allows further subdivision of region or use case, specified by the application developer.
  24. NSObject CLBeacon CLRegion CLBeaconRegion CLCircularRegion

  25. None
  26. Exit Enter Region Monitoring

  27. self.beaconManager.requestAlwaysAuthorization() self.beaconManager.startMonitoringForRegion(CLBeaconRegion( proximityUUID: NSUUID(UUIDString: "B9407F30-F5F8-466E- AFF9-25556B57FE6D")!, major: 123, minor: 123,

    identifier: "monitored region"))
  28. public class MyApplication extends Application { private BeaconManager beaconManager; @Override

    public void onCreate() { super.onCreate(); beaconManager = new BeaconManager(getApplicationContext()); beaconManager.connect(new BeaconManager.ServiceReadyCallback() { @Override public void onServiceReady() { beaconManager.startMonitoring(new Region( "monitored region", UUID.fromString(“B9407F30-F5F8-466E-AFF9-25556B57FE6D"), 22504, 48827) ); } }); } }
  29. Store Location San Francisco Paris London UUID D9B9EC1F-3925-43D0-80A9-1E39D4CEA95C Major 1

    2 3 Minor Clothing 10 10 10 Housewares 20 20 20 Automotive 30 30 30
  30. Immediate Near Far 0.5m 3m 70m Ranging

  31. enum CLProximity : Int { case Unknown case Immediate case

    Near case Far }
  32. Eddystone

  33. Eddystone Name origin Data Packets Ephemeral Identifier

  34. None

  36. Eddystone-EID: Eddystone Ephemeral Identifier

  37. Google Tools & APIs for Beacon

  38. Google Tools & APIs for Beacon Beacon Dashboard Beacon Tool

    App Proximity Beacon API Nearby Message API
  39. None
  40. None
  41. Proximity Beacon API Register Beacons Update Beacons List Beacons Add

    Attachments to Beacons ……
  42. Method Description activate POST /v1beta1/{beaconName=beacons/*}:activat Activates a beacon. deactivate POST

    /v1beta1/{beaconName=beacons/*}:deactivat Deactivates a beacon. decommission POST /v1beta1/{beaconName=beacons/*}:decommissio Decommissions the specified beacon in the service. delete DELETE /v1beta1/{beaconName=beacons/* Deletes the specified beacon including all diagnostics data for the beacon as well as any attachments on the beacon (including those belonging to other projects). get GET /v1beta1/{beaconName=beacons/* Returns detailed information about the specified beacon. list GET /v1beta1/beacon Searches the beacon registry for beacons that match the given search criteria. registe POST /v1beta1/beacons:registe Registers a previously unregistered beacon given its advertisedI . update PUT /v1beta1/{beacon.beaconName=beacons/* Updates the information about the specified beacon.
  43. { "beacons": [ { "status": "ACTIVE", "description": "Dot Beacon,

    reporting for duty!", "indoorLevel": { "name": "1" }, "latLng": { "latitude": 47.669377099999998, "longitude": -122.1966037 }, "placeId": "ChIJTxax6NoSkFQRWPvFXI1LypQ", "advertisedId": { "type": "EDDYSTONE", "id": "hZ3uYXQBwm2IsAAAAAAAyA==" }, "beaconName": "beacons/0123abcd4567efgh890", "expectedStability": "STABLE", "properties": { "type": "Radius Dot beacon", "location": "Entryway" } } ], "nextPageToken": "", "totalCount": "3" }
  44. Nearby

  45. None
  46. Nearby Message API Subscribe to BLE beacon messages - Foreground,

    in response to a user action or event - Background, when your app is not running
  47. public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... mMessageListener = new

    MessageListener() { @Override public void onFound(Message message) {} @Override public void onLost(Message message) {} } } // Subscribe to receive messages. private void subscribe() { Log.i(TAG, "Subscribing."); SubscribeOptions options = new SubscribeOptions.Builder() .setStrategy(Strategy.BLE_ONLY) .build(); Nearby.Messages.subscribe(mGoogleApiClient, mMessageListener, options); }
  48. // Subscribe to messages in the background. private void backgroundSubscribe()

    { Log.i(TAG, "Subscribing for background updates."); SubscribeOptions options = new SubscribeOptions.Builder() .setStrategy(Strategy.BLE_ONLY) .build(); Nearby.Messages.subscribe(mGoogleApiClient, getPendingIntent(), options); } private PendingIntent getPendingIntent() { return PendingIntent.getBroadcast(this, 0, new Intent(this, BeaconMessageReceiver.class), PendingIntent.FLAG_UPDATE_CURRENT); } @Override public void onReceive(Context context, Intent intent) { Nearby.Messages.handleIntent(intent, new MessageListener() { @Override public void onFound(Message message) {} @Override public void onLost(Message message) {} }); }
  49. Web Bluetooth API

  50. None
  51. Prerequisites Https only Requires user action

  52. <button id="the-button">Try it</button> const button = document.querySelector('#the-button'); button.addEventListener('click', function() {

    navigator.bluetooth.requestDevice({ filters: [{ services: ['battery_service'] }] }).then(device => { console.log('Got device:',; console.log('id:',; }); }); GATT Service Filter Generic Attribute Profile
  53. Web Bluetooth Demos Bluetooth LED Display Bluetooth Printer Bluetooth Racing

  54. None
  55. None
  56. None
  57. Takeaways

  58. Future of Mobility & IoT Pervasive, Ubiquitous, Contextual Proximity FTW

    Google Services / Ecosystem Battle between the giants Change how marketing would work
  59. Meanwhile in London… Proxama built the World’s First Consumer Physical

    Web Engagement Experience
  60. None
  61. “The developer event for Ubiquitous Computing and IoT covering Brillo,

    Weave, Android Wear, Beacons, Google Cast, Android TV, and Android Auto.”
  62. • Engaging with the Real World: Web Bluetooth and Physical

    Web (Chrome Dev Summit 2015) • Introduction to the Physical Web (Ubiquity Dev Summit 2016)
  63. None
  64. Thank you!