如何在iOS后台模式下获取信标广告数据

时间:2019-01-21 18:29:14

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

我正在尝试实现一个仅检测信标并在后台模式下显示通知的应用。

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

由于背景模式是必需条件,因此我实现了CLLocationManager。我在info.plist中将位置,背景中心和背景外围标记为背景模式。我还将NSLocationAlwaysUsageDescription,NSLocationAlwaysAndWhenInUseUsageDescription和NSLocationWhenInInUsageDescription添加到了info.plist。

相关代码如下:

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吗?

感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

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

然后,您必须在应用程序委托类中实现此方法:

func application(_ application:UIApplication,                  didRegisterForRemoteNotificationsWithDeviceToken deviceToken:Data)

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

答案 1 :(得分:0)

您可以在启动信标监视的同时简单地启动信标测距。因此,除了:

locMgr.StartMonitoring(region)

执行以下操作:

locMgr.StartRangingBeacons(in: region)

如果执行此操作,则在第一次检测到信标区域后(甚至在后台)大约10秒钟,您将以每秒一次的速率获得以下委托方法的回调:

didRange(beacons: beacons, region: region)

上面的参数信标将包含一个与该区域匹配的所有信标的数组,作为CLBeacon对象,并且每个信标将包含完整的标识符:接近性UUID,主要,次要