I am developing app using Estimote beacons, so i have three beacons one for Entry and second for Exit and third for messages.I want to fire push notification based on proximity user is getting so i get the push notification but issue is that it give multiple same notification. so i use NSUserDefault to stop multiple pushnotification but it also not works so how can i stop this issue.i also check with local notification but it also give me multiple local notification.
Code:-
-(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;
}
}
}
Thanks in advance.
Try this,
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;
}
}
}
}