Buoy 是一个简单的 iBeacon 监听器/管理器,为您处理所有复杂的部分,伙计!
现在也支持使用 Swift 编写了!
使用 CocoaPods 安装 Buoy。
pod 'Buoy'
首先,在您想使用 Listener 和它的通知的类中导入 #import <BUOY.h>
。Buoy 通过监听 iBeacon 并通过 广播 NSNotifications 来工作,因此您的一个类可以监听这些通知并对数据进行处理。
在您可以通过 BUOYListener 获取通知之前,您需要对其进行设置。您需要监听的不同 Proximity UUIDs
的列表。这些与 iBeacon 本身相关,您可以将您不同的 iBeacon 配置为新 UUID,大多数主要种类的新 UUID。以下是设置 Listener 的方法:
// AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
...
NSArray *uuids = @[[[NSUUID alloc] initWithUUIDString:@"00000000-0000-0000-0000-000000000000"],[NSUUID alloc] initWithUUIDString:@"11111111-1111-1111-1111-111111111111"]];
[[BUOYListener defaultListener] listenForBeaconsWithProximityUUIDs:uuids];
...
}
当 Listener 发现 iBeacon 时,它将在 notification userInfo
字典对象中传播一个包含该信标的通知。已发现的信标为 CLBeacon
类型。
// Set Up Notifications
[[NSNotificationCenter defaultCenter] addObserverForName:kBUOYDidFindBeaconNotification object:nil queue:nil usingBlock:^(NSNotification *note) {
if (note.userInfo[kBUOYBeacon]) {
CLBeacon *beacon = note.userInfo[kBUOYBeacon];
// Do something here!
}
}];
因为 iBeacon 可以以每秒 20 次以上的频率触发广告间隔,您可能不希望应用程序中始终接收通知。因此,您可以设置在找到每个信标后经过 x
秒时触发的通知间隔。监听器会跟踪为每个特定信标发送通知的时间,然后每次它看到该信标时,它将检查该时间与当前时间的关系,如果需要,则发送新的通知。
默认间隔是 0 秒
。
// Set the notification interval to 5 seconds.
[[BUOYListener defaultListener] setNotificationInterval:5];
如果出于任何原因想要停止监听,有一些方法可以处理这个问题。
// Stop listening to one Proximity UUID
NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:@"00000000-0000-0000-0000-000000000000"];
[[BUOYListener defaultListener] stopListeningForBeaconsWithProximityUUID:uuid];
// Stop listening to all Proximity UUIDs
[[BUOYListener defaultListener] stopListening];
每个 CLBeacon
对象都有一些属性,您可以利用这些属性来处理您应用程序内部特定的逻辑。
major
- NSNumberminor
- NSNumberproximityUUID
- NSUUIDaccuracy
- CLLocationAccuracy (米)proximity
- CLProximity (枚举)rssi
- NSInteger (信号强度 dB)除了这些基本属性之外,还包括的 CLBeacon+Buoy.{h,m}
类别类还有一些为您简化操作的方法。
信标精度字符串
CLBeacon *someBeacon;
NSString *accuracy = [someBeacon accuracyStringWithDistanceType:kBuoyUnitTypeFeet];
这是用于 kBuoyUnitType
的以下枚举
kBuoyUnitTypeMeters
kBuoyUnitTypeFeet
kBuoyUnitTypeYards
主要/次要
NSString *M = [someBeacon majorString];
NSString *m = [someBeacon minorString];
除了侦听之外,Buoy 还可以将您的 iPhone 转换为 iBeacon。首先,您需要在 Buoy 中包含的另一个单例上调用一个方法,即 [BUOYBeacon deviceBeacon]
。
[[BUOYBeacon deviceBeacon] setWithProximityUUID:[NSUUID UUID]
major:@10001
minor:@69
identifier:@"com.someIdentifier.Id"];
这设置了 iBeacon 所需的属性,但不会开始传输。当您准备好开始传输时,只需要调用以下方法。
[[BUOYBeacon deviceBeacon] startTransmitting]
然后当您准备好停止传输时,只需要调用相反的方法。
[[BUOYBeacon deviceBeacon] stopTransmitting]
作为一个很棒的增加和学习工具 —— 这段代码已经移植到了 Swift。为了使此代码在您的设备上运行,您需要在您的 Info.plist
文件中添加一个密钥。
NSLocationAlwaysUsageDescription : "Some Description of why you want to take location"
从 iOS 8+ 开始需要这样做。
说到这一点,所有的 Swift 类都可以在 /Buoy/Swift 目录下找到,示例项目可以在 /Examples/Buoy-Swift 下找到。
本项目许可证为标准的 MIT 许可证,可以在 这里找到