didEnterRegion 信标管理器方法返回一个主要和次要为零的区域

Posted

技术标签:

【中文标题】didEnterRegion 信标管理器方法返回一个主要和次要为零的区域【英文标题】:didEnterRegion beacon manager method returns a region with nil major and minor 【发布时间】:2015-06-30 15:19:41 【问题描述】:

在 appDelegate 中,我有一个信标管理器和 3 个信标区域,每个区域都使用相同的 UUID 但具有不同的专业和未成年人进行初始化。我在每个信标区域上调用了 startMonitoringForRegion 方法。 问题是有时在didEnterRegion委托方法中,即使我所有的地区都有minor和major,该地区也有空的major和minor。我还为每个地区设置了不同的标识符。我必须让自己清楚,超过50%有时我在 didEnterRegion 中没有得到 nil 主要和次要,但有时它们是 nil。另外我正在使用 estimote SDK。

有人可以帮我吗?非常感谢。

这是我的代码的一小部分:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
/*
 * Persmission to show Local Notification.
 */
if ([application respondsToSelector:@selector(registerUserNotificationSettings:)]) 
    [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound categories:nil]];


/*
 * BeaconManager setup.
 */

self.beaconManager = [[ESTBeaconManager alloc] init];
self.beaconManager.delegate = self;

self.firstBeaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:@"B9407F30-F5F8-466E-AFF9-25556B57FE6D"] major:34587 minor:56726 identifier:@"firstRegionIdentifier"];
self.secondBeaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:@"B9407F30-F5F8-466E-AFF9-25556B57FE6D"] major:23423 minor:45232 identifier:@"secondRegionIdentifier"];
self.thirdBeaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:@"B9407F30-F5F8-466E-AFF9-25556B57FE6D"] major:20106 minor:14567 identifier:@"thirdRegionIdentifier"];

self.firstBeaconRegion.notifyOnEntry = YES;
self.secondBeaconRegion.notifyOnEntry = YES;
self.thirdBeaconRegion.notifyOnEntry = YES;

[self.beaconManager startMonitoringForRegion:self.firstBeaconRegion];
[self.beaconManager startMonitoringForRegion:self.secondBeaconRegion];
[self.beaconManager startMonitoringForRegion:self.thirdBeaconRegion];

return YES;


- (void)beaconManager:(id)manager didEnterRegion:(CLBeaconRegion *)region


if (region.major != nil) 

    [[RTRequestManager sharedInstance] requestBeaconWithUUID:region.proximityUUID major:region.major withCompletionBlock:^(NSArray *objects, NSError *error) 

        UILocalNotification *notification = [UILocalNotification new];
        notification.alertBody = [[objects firstObject] objectForKey:@"beaconLocationDetails"];
        notification.soundName = UILocalNotificationDefaultSoundName;

        NSString *beaconUUID =[NSString stringWithFormat:@"%@%@",[region.proximityUUID UUIDString],region.major];
        RTBeaconViewController *beaconVC = [[RTBeaconViewController alloc] initWithBeacon:beaconUUID];
        [_navController.topViewController presentViewController:beaconVC animated:YES completion:nil];

        [[UIApplication sharedApplication] presentLocalNotificationNow:notification];
    ];



【问题讨论】:

你能提供一些代码吗? 这里是整个代码。希望这对你有帮助 【参考方案1】:

试试这个:-

         NSSet *set=[self.beaconManager1 monitoredRegions];                
               if ([set count]<3) 

[self.beaconManager startMonitoringForRegion: [[CLBeaconRegion alloc]                                                               initWithProximityUUID:ESTIMOTE_PROXIMITY_UUID major:anyvalue minor:anyyour value                                                                       identifier:@"your identifier"]]; 

每次进入,退出甚至发生这些 didlaunchwithoption 将被调用,你一次又一次地监视同一个区域,即使这些区域会在你下次调用 startmonitoring 时替换。但我已经看到了一些与此相关的问题,因此,您必须检查它是否已经在监控,因为您只想监控这些区域一次。重启设备后再试

【讨论】:

以上是关于didEnterRegion 信标管理器方法返回一个主要和次要为零的区域的主要内容,如果未能解决你的问题,请参考以下文章

仅在调用 requestAlwaysAuthorization 时才调用 DidEnterRegion。信标

(Kontakt.io) iBeacon didEnterRegion 没有被解雇

[LocationManager didEnterRegion] 可以获取 Beacon 的 Major & Minor 吗?

iBeacon 实施 - 用例

AltBeacon:didExitRegion 和 didEnterRegion 交替

在信标区域内每 10 分钟更新一次应用程序