Search code examples
iosios7ibeaconestimote

Fire PushNotification in didRangeBeacons methods


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.


Solution

  • 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;
                }
    
    
            }
        }
    
    
    }