2014-01-16 9 views
8

広告パケットのproximityUUIDをすべてプログラムで表示したい。いくつかの記事は、iOSでは不可能だと言っていますが、Androidは可能です。しかし、私は素晴らしいアプリ "BLExplr"が持っていることを発見したので、私はそれを信じることができません。私は私のアプリに関数を実装する必要があります。誰かがそれを行う方法や良い例を知っていますか?どんな助けもありがとう。iOS iBeacon:プログラムでproximityUUIDをすべて取得する方法

(UPDATE 2014年1月17日)

私は@davidgyoung答えが正しいと信じています。 EstimoteビーコンのproximityUUIDは "B9407F30-F5F8-466E-AFF9-25556B57FE6D"ですが、BLExplrアプリのEstimoteビーコンのUUIDは別のIDです。これに

enter image description here enter image description here

+0

である私は、 "ライトブルー" は、他のアプリを見つけました。このアプリは同じ機能を持っています。しかし、私はまだ解決策を見つけることができません。 Bluetoothフレームワークを使用してBLE生データを読み込む必要がありますか? (私はそれが可能かどうかは分かりません) – zono

答えて

23

残念ながら、することはできませんiOSの上。 BLExplrとLightBlueがこれを行うことができると言うと、BluetoothサービスUUIDとiBeacon Proximity UUIDを混同しています。これらは2つの非常に異なるものです。

BluetoothサービスのUUIDはiOSには表示されますが、iBeaconの識別子とは無関係であり、iBeaconsでの作業には役に立ちません。サービスUUIDは、ブルートゥースデバイスが見られるたびにiOSによって生成され、ブルートゥースデバイスが範囲内にある間のみ同じにとどまります。 Bluetoothデバイスを離れて後で戻すと、別のサービスUUIDになります。

iBeaconの識別子(ProximityUUID、Major、Minor)は、Bluetooth広告の本体に埋め込まれています。 iOSデバイスの問題は、AppleのCoreBluetooth APIが生の広告本体へのアクセスを許可しないため、サードパーティのアプリケーションがこれらの識別子を読み取ることができないことです。 Appleは特別なiBeacon CoreLocation APIを使用してこれらの識別子にアクセスできますが、これらのAPIではプロキシミティUUIDを知っておく必要があります。

申し訳ありませんが、私はこれがあなたが聞きたい答えではないことを知っています! (それについても申し訳ありません!)価値があるものは、Android、OSX Mavericks、Linuxでこれを行うことができます。

詳細はhereを参照してください。

+1

ありがとう!あなたが正しいです!私はBLExplrのスクリーンショットを添付しました。サービスUUIDは、EstimoteビーコンのProximity UUIDとは異なります。 – zono

+1

@davidgyoung AppStoreのRadius Networksアプリ「Locate」が私のUUIDとマイナーとメジャーの値をどのように読むことができるか教えてください。私は未知のUUIDを取得してデータベースにあるものと比較する必要があるアプリを開発しています。乾杯。 – Estevex

+0

できません。このアプリはあまり人気のあるUUIDであらかじめ設定されています。ビーコンには人気のあるものが必要です。 – davidgyoung

8

davidgyoungは、iBeacon情報を取得できないという点で部分的に間違っています。あなたは実際にです。 OS X、では近接UAIDを取得しますが、iOSでは取得できません。

CBPeripheraladvertisingDataには、kCBAdvDataManufacturerDataというキーがあります。 iBeacon広告情報を表すのはNSDataです。 このキーは、OS Xでのみ使用できます。第2バイトは0x02に等しいこと

チェック、第2バイトは、(10進数で760x004cに等しく、(10進数)4バイト+ 4(25なければならない)データの長さに等しいです。

NSRanges(マック構文については申し訳ありません)
近接UUID:NSMakeRange(4, 16)
主要:NSMakeRange(20,2)
マイナー:NSMakeRange(22,2)

はあなたが六角形などの値をログに記録することができ、あなたは右のそれをやっていることを確認する(使用書式文字列%x)を入力して、NSDatadescriptionと一致することを確認してください。

+1

これにはどのようなibeaconを使用しましたか?推定ビーコンでは機能しないようです。 'advertisingData = {kCBAdvDataIsConnectable = 1; kCBAdvDataLocalName =推定; kCBAdvDataServiceData = {"デバイス情報" = <0ec9686a 05d8b60e c9686a>; }; } ' – YarGnawh

+0

YarGnawh、私はiBeaconプロフィールの広告データの概要に従っています。 CoreBluetoothの周辺マネージャーが広告を出す方法です。ビーコンで広告する他の方法もあります。 Estimoteは、kCBAdvDataServiceDataを検索してビーコンに接続し、次に特性を読み取って大小を取得します。 –

+1

さらに、質問に答える正しい情報を提供する答えを下げること(特に他の人が質問を却下する時)はasinineです。 –

0
NSRange uuidRange = NSMakeRange(4, 16); 
NSRange majorRange = NSMakeRange(20, 2); 
NSRange minorRange = NSMakeRange(22, 2); 
NSRange powerRange = NSMakeRange(24, 1); 

Byte uuidBytes[16]; 
[data getBytes:&uuidBytes range:uuidRange]; 
NSUUID *uuid = [[NSUUID alloc] initWithUUIDBytes:uuidBytes]; 

int16_t majorBytes; 
[data getBytes:&majorBytes range:majorRange]; 
int16_t majorBytesBig = (majorBytes >> 8) | (majorBytes << 8); 

int16_t minorBytes; 
[data getBytes:&minorBytes range:minorRange]; 
int16_t minorBytesBig = (minorBytes >> 8) | (minorBytes << 8); 

int8_t powerByte; 
[data getBytes:&powerByte range:powerRange]; 



return @{ @"uuid" : uuid, 
      @"major" : @(majorBytesBig), 
      @"minor" : @(minorBytesBig), 
      @"power" : @(powerByte) 
      }; 

が、UUIDはDeviceUUID、ないProximityUUID

+0

この 'data'変数のデータ型は' kCBAdvDataServiceData'を使うことができますアレイはここに直接入りますか? –

+0

はい、データは[advertisingData objectForKey:kCBAdvDataServiceData]です。 –