0

私はEstimoteビーコンを使用してアプリを開発しているので、エントリ用に1つ、出口用に2つ、メッセージ用に3つ目のビーコンを3つ持っています.ユーザーが取得している近接に基づいてプッシュ通知を起動したいので、プッシュ通知を取得しますが、複数のビーコンが発生するという問題があります同じ通知。したがって、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 に答える