0

我正在使用 Estimote 信标开发应用程序,因此我有三个信标,一个用于进入,第二个用于退出,第三个用于消息。我想根据接近度用户发出推送通知,所以我收到推送通知,但问题是它提供多个相同的通知。所以我使用 NSUserDefault 来停止多个推送通知,但它也不起作用所以我怎样才能停止这个问题。我也检查本地通知,但它也给了我多个本地通知。

代码:-

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

}

提前致谢。

4

1 回答 1

1

试试这个,

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


        }
    }


}
于 2014-07-17T09:23:52.537 回答