Quantcast
Channel: Reality matters
Viewing all articles
Browse latest Browse all 184

Estimote Cloud helps you better control your beacon network with tags, geolocation and more remote management options

$
0
0

Getting started with developing beacon-enabled apps is fairly easy: (1) grab a dev kit, (2) download the Estimote SDK and (3) go through a simple tutorial—but it takes much more to build a successful beacon-powered experience that’ll win the hearts of the users of your mobile app. Sooner or later, you’ll face the challenge of deploying and managing the very backbone of such an experience: your beacon network. It might be a single venue or it might be multiple ones spanning dozens of cities or even countries. In any case, you want to stay on top of it all—and Estimote Cloud is here to help with that, now allowing you to organize your beacons with tags, their geolocation, and change even more of their settings with the remote fleet management feature.

enter image description here

We’ve heard you like context …

From the very first version of Estimote Cloud, you could assign names to your beacons—an easy way to keep track of them. After getting your first dev kit, you start with a simple “mint”, “ice” and “blueberry”. Then you order some more and set out to do your first, small pilot deployment and the names are now “main entrance”, “side entrance”, “big room beacon 1,” etc. Finally, you start deploying more and more beacons and you end up with monstrosities like “NYC, 46th street, floor 1, NE wing, PoS 6”. Oh, believe us, we’ve been there! Well, there’s a better way now: let’s dive into tags and geolocation.

… so we put more context in your context …

Imagine a multi-level department store with cash registers on each floor. You want your app to provide a seamless checkout experience when the user approaches a Point of Sale—it could be mobile payments or maybe something as simple as automatically pulling out the user’s loyalty card. For the app, it doesn’t really make any difference if the PoS is on the first or the second floor, so you just go ahead and assign a single major value to all the PoS beacons.

From a beacon network maintenance perspective, however, some extra information beyond just a major value would greatly simplify your life. For instance, what if all the cash registers on the second floor were spread further apart than those on the first floor and you wanted to remotely bump the broadcasting power of all the second floor beacons? By tagging them all with the appropriate floor number, it’s as easy as punching the tag name into the search box, clicking the “select all” checkbox and hitting the “edit” button. Our remote fleet management will do the rest!

enter image description here

Tagging your beacons is extremely easy: select the beacons you want to tag, click the “edit” button, pick one of the existing tags from the “tags” dropdown or add a new one, and wrap it all up with the “save changes” button.

enter image description here

While mainly designed to better organize your beacons, tags can also add additional context to your app. Once a “did enter” event triggers off the generic PoS region and the user opens the app, you can scan for the closest beacon and use the Estimote Cloud RESTful API to fetch its details—including a list of tags. You’ll then know exactly which floor the user’s on or whether she’s at the VIP PoS (providing you tagged them accordingly, of course).

enter image description here

Here’s some example Swift code you could put inside your didRangeBeacons delegate, assuming that the beacon variable holds a reference to the nearest beacon:

let session = NSURLSession.sharedSession()
let authString = (":" as NSString)
    .dataUsingEncoding(NSUTF8StringEncoding)!
    .base64EncodedStringWithOptions(nil)

let beaconUID = "\(beacon.proximityUUID):\(beacon.major):\(beacon.minor)"
let request = NSMutableURLRequest(URL: NSURL(string: 
    "https://cloud.estimote.com/v1/beacons/\(beaconUID)")!)
request.setValue("Basic \(authString)", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Accept")

let dataTask = session.dataTaskWithRequest(request) {
(data, response, error) in
    let beaconDetails = NSJSONSerialization.JSONObjectWithData(
        data, options: nil, error: nil) as! NSDictionary
    let beaconTags = beaconDetails["tags"] as! NSArray

    if beaconTags.containsObject("vip pos") {
        // ...
    }
}
dataTask.resume()

We’d be very keen to hear your thoughts about utilizing tags as an additional layer of context in your apps—we’re considering adding native support for tags to our SDK’s ESTCloudManager and your feedback will help us drive this decision!

enter image description here

… so that you can locate while you locate!

If your beacon network spans not just multiple rooms and floors, but also multiple geographical locations, and you’re about to start tagging all your beacons with cities and street names—let us stop you there and talk about supplementing your beacons’ tags with geolocation instead.

Estimote SDK 3.1.0 comes with two new methods in the ESTCloudManager that enable you to assign a geographical location to your beacon. This location is stored in Estimote Cloud, and we also perform a reverse geocoding operation to translate the raw latitude and longitude into a human-readable (and easily searchable!) address.

enter image description here

In its easiest form, you can simply tell the SDK to use standard GPS location services to figure out your current location, and assign that to the beacon:

// don't forget to set the app token!
ESTCloudManager.setupAppID("", andAppToken: "")

cloudManager = ESTCloudManager()
cloudManager.assignCurrentGPSLocationToBeacon(beacon) { (location, error) in
    if error != nil {
        println("error: \(error)")
    } else {
        println("successf: \(location as! CLLocation)")
    }
} 

If you prefer to fetch the location yourself, just use the assignGPSLocation:toBeacon:completion method instead.

enter image description here

And if you want to utilize the beacon’s geolocation as an additional layer of context—just like with the previous tags example—you can do it in a similar fashion:

// follow the code from the tags example up to the
// "let beaconDetails = NSJSONSerialization …" part

let beaconSettings = beaconDetails["settings"] as! NSDictionary
let beaconLocation = beaconSettings["location"] as! NSDictionary

if beaconLocation["city"] == "Kraków" {
    // change the background image to Lajkonik[1]
}

[1] http://en.wikipedia.org/wiki/Lajkonik

One More Thing™

Remote fleet management via the Estimote Cloud has gotten much more powerful since we introduced it last year: you can now not only remotely update your beacons’ broadcasting power and advertising interval, but also their UUID and major, as well as enable power modes and Secure UUID. The next time you open the Estimote app, it’ll automatically download the list of pending changes and—whenever you enter the range of beacons that need updating—apply them in the background. And in case you missed it, your own app can now do this too.

enter image description here

Whether you’re doing a small pilot, or rolling out thousands of beacons across multiple continents, organizing and managing your beacon network has never been easier!

As always, we encourage you to share your thoughts with us—whether on Twitter, our community forums, via email, or even Snapchat*.

* The official Estimote Snapchat account is coming Soon™.

Piotr Krawiec, Technology Evangelist at Estimote


Viewing all articles
Browse latest Browse all 184

Trending Articles