Kontakt信标和iOS:DidStartMonitoring for Region未按预期工作
我开始在iOS上使用Kontakt.io beacons,但即使我按照上的说明和上描述的第一步操作,似乎也只能让它工作一次 以下是我的ViewController代码:Kontakt信标和iOS:DidStartMonitoring for Region未按预期工作,ios,objective-c,ibeacon,kontakt.io,Ios,Objective C,Ibeacon,Kontakt.io,我开始在iOS上使用Kontakt.io beacons,但即使我按照上的说明和上描述的第一步操作,似乎也只能让它工作一次 以下是我的ViewController代码: #import "ViewController.h" #import <KontaktSDK/KontaktSDK.h> @interface ViewController () <KTKBeaconManagerDelegate> @property KTKBeaconManager *beacon
#import "ViewController.h"
#import <KontaktSDK/KontaktSDK.h>
@interface ViewController () <KTKBeaconManagerDelegate>
@property KTKBeaconManager *beaconManager;
@property KTKBeaconRegion *region1;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.beaconManager = [[KTKBeaconManager alloc] initWithDelegate:self];
NSUUID *myProximityUUID = [[NSUUID alloc] initWithUUIDString:@"xxxxxxxxx...xxxx"];
_region1 = [[KTKBeaconRegion alloc] initWithProximityUUID:myProximityUUID identifier:@"Beacon_1"];
switch ([KTKBeaconManager locationAuthorizationStatus]) {
case kCLAuthorizationStatusNotDetermined:
[self.beaconManager requestLocationAlwaysAuthorization];
break;
case kCLAuthorizationStatusDenied:
case kCLAuthorizationStatusRestricted:
// No access to Location Services
break;
case kCLAuthorizationStatusAuthorizedWhenInUse:
// For most iBeacon-based app this type of
// permission is not adequate
break;
case kCLAuthorizationStatusAuthorizedAlways:
// We will use this later
if ([KTKBeaconManager isMonitoringAvailable]) {
[self.beaconManager startMonitoringForRegion:_region1];
}
break;
}
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)beaconManager:(KTKBeaconManager *)manager didChangeLocationAuthorizationStatus:(CLAuthorizationStatus)status {
if (status == kCLAuthorizationStatusAuthorizedAlways) {
_TheLabel.text = @"YEAH";
if ([KTKBeaconManager isMonitoringAvailable]) {
_TheLabel.text = @"YEAH!!!";
[self.beaconManager startMonitoringForRegion:_region1];
}
// When status changes to kCLAuthorizationStatusAuthorizedAlways
// e.g. after calling [self.beaconManager requestLocationAlwaysAuthorization]
// we can start region monitoring from here
}
}
//
- (void)beaconManager:(KTKBeaconManager *)manager didStartMonitoringForRegion:(__kindof KTKBeaconRegion *)region {
// Do something when monitoring for a particular
// region is successfully initiated
_MonitoringStatus.text = @"Success";
[manager startRangingBeaconsInRegion:region];
}
- (void)beaconManager:(KTKBeaconManager *)manager monitoringDidFailForRegion:(__kindof KTKBeaconRegion *)region withError:(NSError *)error {
// Handle monitoring failing to start for your region
_MonitoringStatus.text = @"FAIL!";
}
- (void)beaconManager:(KTKBeaconManager *)manager didEnterRegion:(__kindof KTKBeaconRegion *)region {
// Decide what to do when a user enters a range of your region; usually used
// for triggering a local notification and/or starting a beacon ranging
[manager startRangingBeaconsInRegion:region];
_OnRegionStatus.text = @"We're in!";
}
- (void)beaconManager:(KTKBeaconManager *)manager didExitRegion:(__kindof KTKBeaconRegion *)region {
// Decide what to do when a user exits a range of your region; usually used
// for triggering a local notification and stoping a beacon ranging
[manager stopRangingBeaconsInRegion:region];
_OnRegionStatus.text = @"We're out";
}
- (void)beaconManager:(KTKBeaconManager *)manager didRangeBeacons:(NSArray<CLBeacon *> *)beacons inRegion:(__kindof KTKBeaconRegion *)region {
for(CLBeacon *beacon in beacons){
_TheLabel.text = [NSString stringWithFormat:@"WOW! %ld", (long)[beacon proximity]];
}
}
@end
这一次的效果与预期相符。但我对这种行为有点困惑。即使在强制关闭的情况下,该应用程序仍能对该区域进行监控?提前谢谢 据我所知,Kontakt.io的SDK基于苹果的核心位置,因此以下内容也适用: 在iOS中,与您的应用程序关联的区域会一直被跟踪, 包括应用程序未运行时。-
case kCLAuthorizationStatusAuthorizedAlways:
// We will use this later
if ([KTKBeaconManager isMonitoringAvailable]) {
if([[self.beaconManager monitoredRegions] count] == 0) [self.beaconManager startMonitoringForRegion:_region1];
else for(KTKBeaconRegion *reg in [self.beaconManager monitoredRegions]){
[self.beaconManager startRangingBeaconsInRegion:reg];
}
}
break;