iBeacon 在应用程序上开始广告确实进入了后台

Posted

技术标签:

【中文标题】iBeacon 在应用程序上开始广告确实进入了后台【英文标题】:iBeacon start advertising on application did enter background 【发布时间】:2014-05-14 12:54:41 【问题描述】:

applicationDidEnterBackgroundapplicationWillResignActive 我需要startAdvertising 但我收到此错误:

CoreBluetooth[API MISUSE] <CBPeripheralManager: 0x146a4e30> can only accept this command while in the powered on state.

我用:

- (void)applicationWillResignActive:(UIApplication *)application

    _locationManager = [[CLLocationManager alloc] init];
    _locationManager.delegate = self;
    [_locationManager stopRangingBeaconsInRegion:_runningBeacon];
    NSLog(@"stop monitoring");
    NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:@"23542266-18D1-4FE4-B4A1-23F8195B9D39"];
    self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid major:1 minor:1 identifier:@"com.devfright.myRegion"];
    self.beaconPeripheralData = [self.beaconRegion peripheralDataWithMeasuredPower:nil];
    self.peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil options:nil];
    [self.peripheralManager startAdvertising:self.beaconPeripheralData];

    if ([self.peripheralManager isAdvertising]) 
        NSLog(@"peripeheralManager is advertising");
    

任何帮助将不胜感激..

【问题讨论】:

【参考方案1】:

如果你想从你的应用主动发送BT广告数据,我认为你的应用必须在前台。 这是来自 Apple 类参考

[..]数据广告是在“尽力而为”的基础上进行的,因为空间有限并且可能同时有多个应用程序广告。 当您的应用处于前台时,它可以在初始广告数据中使用最多 28 字节的空间,用于支持的广告数据键的任意组合[..]

在后台时,您只能收听信标。为此,您必须将您的应用和信标数据注册到CLLocationManager

【讨论】:

你能想出一种方法来“绕过”这个“限制”并且仍然获得应用商店的批准吗? 根据我的阅读,Apple 限制 CoreLocation 框架在后台做广告。不过好像可以用CoreBluetooth在后台发送BT广告数据。我不知道您是否可以通过这种方法获得完整的 iBeacon 功能,我也不知道 Apple 是否会在 AppStore 中批准它......但值得一试。这是一个处理这个问题的 GitHub 项目github.com/Instrument/Vicinity【参考方案2】:

要消除此错误,请等待在委托方法 peripheralManagerDidUpdateState: 中调用 CBPeripheralManager 方法 startAdvertising:。这里的关键是在执行任何 CBPeripheralManager 方法之前确保外围状态始终等于 CBPeripheralManageStatePoweredOn。

【讨论】:

虽然这是前台状态的正确答案,但 ios 11 在 background 中的行为是:即使 peripheral.state 是 .poweredOn 广告也无法启动并且记录错误“API MISUSE: 只能在开机状态下接受此命令”。

以上是关于iBeacon 在应用程序上开始广告确实进入了后台的主要内容,如果未能解决你的问题,请参考以下文章

设备重启后的 IOS8 iBeacon 监控

iOS 在后台监控/测距信标会消耗大量电池

如何在后台应用程序和iphone重启时使用ibeacon[关闭]

在后台使用 iBeacon 或 CoreBluetooth 识别 iOS 设备

iPhone 休眠时无法检测到 Beacon 设备。(进入后台)

ibacon 如何在后台工作?