3

URL Frame Specification: https://github.com/google/eddystone/tree/master/eddystone-url

I'm having trouble advertising Eddystone URL frames. I'm using the following code, however Eddystone beacon scanners don't recognize it.

byte[] data;
string url = "http://test.com";

var urlSchemeByte = EddystoneUrlFrame.EncodeUrlScheme(url);
var header = new byte[] { 0xAA, 0xFE, 0x10 };
using (var memoryStream = new MemoryStream())
{
    memoryStream.Write(header, 0, header.Length);

    // ranging data
    memoryStream.WriteByte(220);

    memoryStream.WriteByte((byte)urlSchemeByte);
    EddystoneUrlFrame.EncodeUrlToStream(url,EddystoneUrlFrame.UrlSchemeDictionary[(byte)urlSchemeByte].Length,memoryStream);

    data = memoryStream.ToArray();
}

var writer = new DataWriter();
writer.WriteBytes(data);

var advertisementData = new BluetoothLEAdvertisementDataSection();
advertisementData.Data = writer.DetachBuffer();
publisher.Advertisement.DataSections.Add(advertisementData);

What am I doing wrong?

Péter Bencze
  • 61
  • 1
  • 6

2 Answers2

1

Eddystone URL by design only support HTTPS.

http : // test. com must be https : // test. com

Try one url shortener and test again. https :// goo. gl/

0

Try prepending your header to include:

  1. The PDU type and length for the service data PDU:

    0x0D, 0x16
    
  2. Before the above, put the PDU type and length for the 16 bit service advertisement PDU, along with the service UUID:

    0x03, 0x03, 0xAA, 0xFE
    

So it should look like this:

var header = new byte[] { 0x03, 0x03, 0xAA, 0xFE, 0x0D, 0x16, 0xAA, 0xFE, 0x10 };

I am not experienced with the Windows APIs, so I might be wrong that these bytes may be specified in this manner. But somehow they need to be on the transmition for a proper detection.

davidgyoung
  • 63,876
  • 14
  • 121
  • 204