Ios didRangeBeacons方法中的火灾推送通知

Ios didRangeBeacons方法中的火灾推送通知,ios,ios7,ibeacon,estimote,Ios,Ios7,Ibeacon,Estimote,我正在使用Estimote信标开发应用程序,所以我有三个信标,一个用于进入,第二个用于退出,第三个用于消息。我想根据用户的接近度触发推送通知,所以我得到推送通知,但问题是它会发出多个相同的通知。 因此,我使用NSUserDefault停止多个pushnotification,但它也不起作用,因此如何停止此问题。我还使用本地通知进行检查,但它也会给我多个本地通知 代码:- -(void)beaconManager:(ESTBeaconManager *)manager didRangeB

我正在使用Estimote信标开发应用程序,所以我有三个信标,一个用于进入,第二个用于退出,第三个用于消息。我想根据用户的接近度触发推送通知,所以我得到推送通知,但问题是它会发出多个相同的通知。 因此,我使用NSUserDefault停止多个pushnotification,但它也不起作用,因此如何停止此问题。我还使用本地通知进行检查,但它也会给我多个本地通知

代码:-

-(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,将不会收到通知。当我们收到通知时,我使用你的条件,它起作用,但当我从近距离到近距离时,立即通知不起作用。是的,它不起作用,最好不要使用,因为近距离和近距离是不断波动的。是的,你是对的,谢谢你的帮助,我接受你回答,干杯:)