Where are the beacon information registered in Google's Proximity API available? - eddystone

I know iBeacon only broadcasts UUID signal. What I'm reading about Proximity Beacon API is confusing. We must register:
Advertised ID (required)
Status
Stability
Latitude and longitude
Indoor floor level
Google Places API Place ID.
Text description
Arbitrary properties as key/value pairs
Does Eddystone broadcast all the information above, as shown on this image?

Beacons broadcast very little information themselves — typically only a Proximity UUID + major + minor (for iBeacons) or a BeaconID + transmission power (for Eddystone UID beacons).
The Proximity Beacon API is a service that allows you to "register" a beacon along with additional information for it. Some of this information, such as:
PlaceID
Building level
Stability
Lat/Lng
Description
Properties
are entirely optional are only for the registering beacon owner's own uses. You can choose to specify exactly where a beacon is with a lat/lng and a PlaceID, or you can skip these.
The Proximity Beacon API also lets you associate little pieces of data called "attachments" to your beacon. These are things that people can see when they run into your beacons in the wild. The content and format of these are entirely up to you.
So, if you want to register a beacon with the PB API, the only thing you MUST specify is the advertisementId.
For an Eddystone beacon, this will be 16 bytes (The BeaconID from the UID Frame) whereas for iBeacons, this will be 20 bytes (16 byte iBeacon Proximity UUID + 2 byte major + 2 byte minor).
Note that as per my answer to another question, what you upload to the register function for the beacon is a base64 encoded string representing the underlying BINARY data. So, get a Buffer or byte array representing the advertisement ID and then base64 encode that.

As you noted, the beacon itself only broadcasts its identifier—i.e., UUID + Major + Minor for iBeacon, and Namespace + Instance for Eddystone.
These additional fields that you register with Google's Proximity API are stored entirely on their server, and not broadcast by the beacon.
When you detect a beacon, you can read its identifier from the advertising packet, and use it to retrieve the additional data from Proximity API.
Imagine you have a beacon with identifier X. You upload the beacon's data to Proximity API, e.g., Advertised ID = X, description = "My beacon". Later, when your app detects that beacon, it can go to the Proximity API and say "give me data for beacon X", and that's how you gain access to the extra information, e.g., the "My beacon" description.
The image you've linked to is from a Proximity API tutorial I remember seeing on the Internet, and it's just a simplification, because strictly speaking, the beacon doesn't broadcast all this information, only the identifier. But this identifier is enough to fetch the extra data from Proximity API (providing you have Internet connection), so one can think about Proximity API as something that extends what you know about the beacon, and I think that's the reason why the image shows it this way.

Related

Eddystone-EID - what is it for and does it work?

Simply put, how does Eddystone-EID work and what are the main use cases?
Standard beacons transmit a unique identifier so apps can tell when they are in a particular place. But because this identifier is in clear text, any app can read this identifier, and use the transmission to know where it is. An unauthorized third party app can make use of standard beacons that the app's authors did not deploy.
Eddystone-EID encrypts it's identifier and rotates it periodically to prevent others from making use of the beacon identifier. Authorized apps can use a "trusted resolver" to get a stable identifier from the rotating encrypted one in the transmission. A server call is needed to convert the 8-byte AES encrypted identifier to a stable one.
Google's Proximity Beacon API provides this conversion. It is theoretically possible to build an independent trusted resolver apart from Google (I have done so for testing purposes), but otherwise you must register your EID beacons with Google and use their web services to resolve their identifiers.
An example ephemeral identifier looks like this:
0a194f562c97d2ea.
Here's a write up I did on the topic: http://altbeacon.github.io/android-beacon-library/eddystone-eid.html
Here's an explanation I found on a developers.google.com page here.
What happens when a client sights an Eddystone-EID beacon?
When a client device sights an Eddystone-EID beacon as a result of a Nearby1 subscription, the current EID is sent to the Google Proximity Beacon API2 along with the API key of the calling app. The Google Proximity Beacon API establishes whether the supplied API key is authorized to fetch attachments that have been associated with the beacon. If resolution is allowed, the attachments are served back as Nearby message objects in the normal way. Otherwise, Google Proximity Beacon API returns an empty value, as it would if the beacon had not been registered.
1 - The beacon scanning component of the Google beacon platform
2 - The Proximity Beacon API is a cloud service that allows you to manage data associated with your BLE beacons using a REST interface.
Here's another paragraph which I found critical to understand how the technology works.
Eddystone-EID is designed to give developers control over which clients can make use of their beacon signals. The beacon identifier changes pseudo-randomly in such a way that it can only be resolved to stable information by a resolution service that shares an encryption key with the beacon. Without access to the resolution service, the beacon identifier is of little use.
Eddystone-EID is appropriate for cases where beacon deployers wish to:
Prevent other parties from using their beacons.
Preserve user privacy in scenarios involving wearables or other equipment carried by the user.
Lease their beacon network to other parties in a way that allows a provable 'off switch' for access.
Provide a strong signal that a user is at a particular place, that is not easily spoofed.

can iphone act as beacon having eddystone format

I read that Nexus6 and Nexus9 can only act as beacon in eddystone format.
Currently I do not have either of the phones. I have an iphone, can we use aniphone to broadcast eddystone format?
Unfortunately, this is not possible. Apple restricts the type of advertisements that can be sent out by its CoreBluetooth APIs. While you can broadcast an advertisement with the same GATT Service UUID as required for Eddystone, you cannot attach the necessary data. This is because the CBAdvertisementDataServiceDataKey that associates service data to an advertisement is read-only on iOS. You can't set the data.
So while you want to make the iOS device advertise something like this:
0201060303aafe1516aafe00e72f234454f4911ba9ffa6000000000001
You end up advertising something like this:
0201060303aafe0316aafe
This leaves off the Eddystone-UID type code (00), the calibrated power (e7), the namespace identifier (2f234454f4911ba9ffa6) and the instance identifier (000000000001). As a result, it won't be recognized as an Eddystone-UID frame.

How do I detect iBeacon device without knowind uuid in iOS?

I would like to develop app which detects a lot of beacon device withoud knowing uuid.
However I cannot find way to do this in internet.
I have to define uuid in code.
So is there way to detect iBeacon without knowing uuid?
I know CoreLocation requires you to know the UUID of the beacon you are CBCentralManager, which handles all of the bluetooth spectrum. It has methods for scanning for bluetooth devices. I don't have an iBeacon handy at the moment to test and see if it picks them up, but it is probably worth a try.
The nomenclature used is quite important here. If you want to detect 'iBeacon', then you need to at least know the UUID of the device or devices you're looking for. That's because, in the iBeacon standard, the ID is the only piece of information included in the advertising packet. iBeacon lets you do two things: monitoring and ranging (detecting whether there is an iBeacon in range, and detecting how close the iBeacon is), and both require you to know the UUID.
If you just want to look for beacons, without including the iBeacon properties and features, you can use Core Bluetooth to do that. SDKs of particular beacon vendors base their beacon maintenance features (firmware updates, settings changing) on that. This method is also used by vendors that use their own protocols alongside Apple's iBeacon. We do that at Estimote with Estimote Stickers, and AFAIK Gimbal does this as well.
Cheers.

iBeacon: Is possible send small data to track from transmit?

I am going to start a project code for iBeacon with iOS 7 and bluetooth 4.0.
http://www.appcoda.com/ios7-programming-ibeacons-tutorial/
Readied above link, i have coded it and tested . it is working fine .
Created two apps. One for transmit beacon and another for track beacon.
How can send small data to track beacon from transmit beacon. Small data is a ID of room.
Is possible send small data to track from transmit?
You cannot send any other data from a device transmitting as a beacon to another device via the iBeacons protocol. However, if only want to know a room ID, then you should set this as either the major or minor value of the beacon (or a combination of those two values).
As an example, a large retailer might set:
UUID: A single UUID for the retailer
Major ID: Identifies the specific store that a beacon is located in
Minor ID: Identifies the department that the beacon is in
If you wish to transmit more substantial data between two iOS devices, you'll probably want to look at something like Apple's Multipeer Connectivity framework.
https://github.com/DavidSahakyan/LGBluetooth
here is a framework which will help you to work bluetooth 4

How to post Advertisements from an IPhone Device which acts as iBeacon?

i want to know some details about iBeacons. Couple of days back i created a sample project where i turned my iOS Device into an iBeacon and i tracked down that iBeacon with another device, i am also getting the proximity distance between my Device and the beacon.
So my question is Is it possible to post some advertisements from my device which acting as iBeacon?
How to configure that?
All i wanted to know is how the iBeacon Configuration done to send the data?
Some one please help me out
thankYou
An iBeacon "advertisement" is just a constant transmission of a four part identifier that signifies a unique device. It only contains four fields:
proximityUUID (a 16 byte UUID usually expressed in the form 00000000-0000-0000-0000-000000000000)
major (a number from 0 to 65535)
minor (a number from 0 to 65535)
power (a number from 127 to -128)
That's it. You can't make an iBeacon send any more data than that. It doesn't matter if the device acting as an iBeacon is your phone, an iPad, a Mac computer, or a small battery-powered unit.
If you want to tie other data to an iBeacon, you have to do it through another channel, by some kind of lookup that matches the data up with the identifiers above. You can do this with a static lookup table in your app, a web service, or a CoreBluetooth communication channel. But you have to code that yourself.