【问题标题】:How to get a beacons advertisement data in iOS background mode如何在 iOS 后台模式下获取信标广告数据
【发布时间】:2019-01-21 18:29:13
【问题描述】:

我正在尝试实现一个应用程序,它只检测信标并在应用程序处于后台模式时显示通知。

我最初实现了 CBCentralManager 并在 didDiscoverPeripheral 中接收了事件,效果很好,但一旦进入后台模式,它就会停止接收事件。

由于需要后台模式,因此我实现了 CLLocationManager。我在 info.plist 中将 location、background-central 和 background-peripheral 标记为背景模式。我还在 info.plist 中添加了 NSLocationAlwaysUsageDescription、NSLocationAlwaysAndWhenInUseUsageDescription 和 NSLocationWhenInUsageDescription。

相关代码如下:

locMgr = new CLLocationManager();
locMgr.PauseLocationUpdatesAutomatically= false;
locMgr.RequestAlwaysAuthorization();
locMgr.AllowsBackgroundLocationUpdates = true;

var nsuuid = new NSUuid(uuid.ToString());
var nsidentifier = new NSString(identifier);

CLBeaconRegion region = new CLBeaconRegion(nsuuid, nsidentifier);
region.NotifyOnExit = truel
region.NotifyOnEntry = true;
region.NotifyEntryStateOnDisplay = true;

locMgr.StartMonitoring(region);


public void OnRegionEntered(object sender, CLRegionEventARgs e)
{
    is there anyway to get advertising info (instance id) of beacon in here?
    anything to identify the beacon besides the proximity id which is the same for multiple beacons?
}

我有一个后端服务器,其中包含有关我想调用以获取名称/消息的信标的附加信息。但这是在信标的实例 ID 上键入的。

有人知道在后台模式下获取信标信息的方法吗?我可以连接到外围设备或在 OnRegionEntered 或任何其他方式中设置 cblcentralmanager 吗?

感谢您的帮助!

【问题讨论】:

    标签: ios bluetooth-lowenergy ibeacon core-bluetooth beacon


    【解决方案1】:

    您可以在 ios 中设置静默推送通知。您必须在其中创建一个 Web 服务,该服务将在一定时间后从应用程序获取纬度和经度,并返回可用信标列表,该信标包含该纬度和经度的特定区域。

    然后,你必须在你的应用委托类中实现这个方法:

    func 应用程序(_ 应用程序:UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data)

    当您的应用从服务器收到任何推送通知时,将调用此方法。您必须根据获得的列表更新您的应用。

    【讨论】:

    • 这是一个有趣的方法。谢谢。但它要求服务器事先知道每个信标的位置。
    【解决方案2】:

    您可以在启动信标监测的同时简单地启动信标测距。所以除此之外:

    locMgr.StartMonitoring(region)

    这样做:

    locMgr.StartRangingBeacons(in: region)

    如果您这样做,那么在您第一次检测到信标区域后的大约 10 秒内(即使在后台),您将以每秒一次的速率收到对以下委托方法的回调:

    didRange(beacons: beacons, region: region)

    上述参数 beacons 将包含与该区域匹配的所有信标作为CLBeacon 对象的数组,每个信标都将包含完整标识符:proximityUUID、major、minor

    【讨论】:

    • 因此,即使在检测到信标后,您也可以获得代理 uuid,主要和次要,但没有其他信息,例如广告数据(instanceid)。在 iOS 中似乎是一个很大的限制。感谢您的回复和帮助
    • 我不确定您所说的“instanceid”是什么意思?确实,iOS 会阻止您访问蓝牙 MAC,即使使用 CoreBluetooth 也是如此。不过,使用 CoreBluetooth,它确实为您提供了一个设备标识符,该标识符是映射到隐藏蓝牙 MAC 的 GUID。但即便如此,对于完全相同的设备,它也会周期性地旋转。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-31
    • 2020-04-05
    • 2019-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多