Ios didRangeBeacons方法中的火灾推送通知
我正在使用Estimote信标开发应用程序,所以我有三个信标,一个用于进入,第二个用于退出,第三个用于消息。我想根据用户的接近度触发推送通知,所以我得到推送通知,但问题是它会发出多个相同的通知。 因此,我使用NSUserDefault停止多个pushnotification,但它也不起作用,因此如何停止此问题。我还使用本地通知进行检查,但它也会给我多个本地通知 代码:-Ios didRangeBeacons方法中的火灾推送通知,ios,ios7,ibeacon,estimote,Ios,Ios7,Ibeacon,Estimote,我正在使用Estimote信标开发应用程序,所以我有三个信标,一个用于进入,第二个用于退出,第三个用于消息。我想根据用户的接近度触发推送通知,所以我得到推送通知,但问题是它会发出多个相同的通知。 因此,我使用NSUserDefault停止多个pushnotification,但它也不起作用,因此如何停止此问题。我还使用本地通知进行检查,但它也会给我多个本地通知 代码:- -(void)beaconManager:(ESTBeaconManager *)manager didRangeB
-(void)beaconManager:(ESTBeaconManager *)manager
didRangeBeacons:(NSArray *)beacons
inRegion:(ESTBeaconRegion *)region
{
if ([beacons count] == 0)
return;
ESTBeacon* beacon = [beacons firstObject];
int dist = [beacon.distance intValue];
if([region.identifier isEqualToString:BeaconIdentifier2]){
switch (beacon.proximity) {
case CLProximityUnknown:{
[[NSUserDefaults standardUserDefaults] setObject:@"FALSE" forKey:@"Far"];
[[NSUserDefaults standardUserDefaults] setObject:@"FALSE" forKey:@"Near"];
[[NSUserDefaults standardUserDefaults] setObject:@"FALSE" forKey:@"Immediate"];
[[NSUserDefaults standardUserDefaults] synchronize];
if([[[NSUserDefaults standardUserDefaults] valueForKey:@"Unknown"] isEqualToString:@"FALSE"])
{
[[NSUserDefaults standardUserDefaults] setObject:@"TRUE" forKey:@"Unknown"];
[[NSUserDefaults standardUserDefaults] synchronize];
NSLog(@"Call Unknown");
[self callPush];
}
}
break;
case CLProximityFar:{
[[NSUserDefaults standardUserDefaults] setObject:@"FALSE" forKey:@"Unknown"];
[[NSUserDefaults standardUserDefaults] setObject:@"FALSE" forKey:@"Near"];
[[NSUserDefaults standardUserDefaults] setObject:@"FALSE" forKey:@"Immediate"];
[[NSUserDefaults standardUserDefaults] synchronize];
if([[[NSUserDefaults standardUserDefaults] valueForKey:@"Far"] isEqualToString:@"FALSE"])
{
[[NSUserDefaults standardUserDefaults] setObject:@"TRUE" forKey:@"Far"];
[[NSUserDefaults standardUserDefaults] synchronize];
//Call webservice
[self callPush];
}
}
break;
case CLProximityNear:{
[[NSUserDefaults standardUserDefaults] setObject:@"FALSE" forKey:@"Unknown"];
[[NSUserDefaults standardUserDefaults] setObject:@"FALSE" forKey:@"Far"];
[[NSUserDefaults standardUserDefaults] setObject:@"FALSE" forKey:@"Immediate"];
[[NSUserDefaults standardUserDefaults] synchronize];
if([[[NSUserDefaults standardUserDefaults] valueForKey:@"Near"] isEqualToString: @"FALSE"])
{
[[NSUserDefaults standardUserDefaults] setObject:@"TRUE" forKey:@"Near"];
[[NSUserDefaults standardUserDefaults] synchronize];
//Call webservice
[self callPush];
}
}
break;
case CLProximityImmediate:{
[[NSUserDefaults standardUserDefaults] setObject:@"FALSE" forKey:@"Unknown"];
[[NSUserDefaults standardUserDefaults] setObject:@"FALSE" forKey:@"Far"];
[[NSUserDefaults standardUserDefaults] setObject:@"FALSE" forKey:@"Near"];
[[NSUserDefaults standardUserDefaults] synchronize];
if([[[NSUserDefaults standardUserDefaults] valueForKey:@"Immediate"] isEqualToString:@"FALSE"])
{
[[NSUserDefaults standardUserDefaults] setObject:@"TRUE" forKey:@"Immediate"];
[[NSUserDefaults standardUserDefaults] synchronize];
//Call webservice
[self callPush];
}
}
break;
}
}
}
提前谢谢。试试这个
BOOL isFar=TRUE;
- (void)locationManager:(CLLocationManager *)manager
didRangeBeacons:(NSArray *)beacons inRegion:(CLBeaconRegion *)region{
if (self.beaconRegion) {
if([beacons count] > 0)
{
//get closes beacon and find its major
CLBeacon *beacon = [beacons objectAtIndex:0];
switch (beacon.proximity)
{
case CLProximityUnknown:
break;
case CLProximityImmediate:
NSLog(@"Immediate");
if (isFar) {
isFar=false;
// Call WebService
}
break;
case CLProximityNear:
if (isFar) {
// Call WebService
}
isFar=false;
break;
case CLProximityFar:
NSLog(@"far");
if (!isFar) {
// call websercie
}
isFar=TRUE;
break;
default:
break;
}
}
}
}
我使用nslog打印,所以有时在近距离内找到信标,有时在即时内找到信标,这就是问题发生的原因。实际上,我们的想法是,当用户走远时,我们将标志设置为true,当它接近或立即出现时,我们将标志设置为false,从而发出通知。现在如果用户停留在near和immediate,将不会收到通知。当我们收到通知时,我使用你的条件,它起作用,但当我从近距离到近距离时,立即通知不起作用。是的,它不起作用,最好不要使用,因为近距离和近距离是不断波动的。是的,你是对的,谢谢你的帮助,我接受你回答,干杯:)