我正在尝试实现一个仅检测信标并在后台模式下显示通知的应用。
我最初实现了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吗?
感谢您的帮助!
答案 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,主要,次要