LOCATION BEACON - Discovery Eddystone URL


#1

Hi!
Today I am looking to use Eddystone URL. What I want to do:
I want to retrieve the URL of a beacon like “http://TourSaintNicolas”. I don’t want to use this url to access a web page but just grab the part after the “http://” to get “Saint Nicholas Tower”.
However, I can not retrieve the URL because this error occurs:
“- [ESTEddystoneUID url]: unrecognized selector sent to instance 0x1c0090d10”
I activate Eddystone URL on my beacons and Eddystone UID is disabled.

Here is my code:

- (void)viewDidLoad {
    [super viewDidLoad];
    
    ...
    
    self.eddystoneManager = [[ESTEddystoneManager alloc] init];
    self.eddystoneManager.delegate = self;

    ...
}

- (void)eddystoneManager:(ESTEddystoneManager *)manager didDiscoverEddystones:(NSArray<ESTEddystone *> *)eddystones withFilter:(ESTEddystoneFilter * _Nullable)eddystoneFilter {
    if (eddystones.count > 0) {
        self.eddystoneUrlArray = (NSArray<ESTEddystoneURL *> *)eddystones;
        
        NSLog(@"SUCCESS : Eddystone packets found : %lu", [self.eddystoneUrlArray count]);
        for(ESTEddystoneURL* indexEddystone in self.eddystoneUrlArray)
        {
            NSLog(@"%@", indexEddystone.url); //The error occurs here
        }
        NSLog(@"STATE : Updating TableView.....");
    }
    
    [self.tableView reloadData];
}

Here is my logs:

2018-05-02 16:48:07.779164+0200 BeaconReadTest[6080:1462446] STATE : Searching beacons…
2018-05-02 16:48:10.780088+0200 BeaconReadTest[6080:1462446] SUCCESS : Eddystone packets found : 1
2018-05-02 16:48:10.780435+0200 BeaconReadTest[6080:1462446] -[ESTEddystoneUID url]: unrecognized selector sent to instance 0x1c0090d10

Can you help me?


#2

This morning, without modifying my code, I tried to run it and there, my two beacons are found but I have a third one that appears and that brings me to the same error as yesterday (I think it was that who gave this error yesterday…)
Here is my logs of this morning:

2018-05-03 09:08:30.187064+0200 BeaconReadTest[7898:2102973] STATE : Searching beacons…
2018-05-03 09:08:31.189266+0200 BeaconReadTest[7898:2102973] SUCCESS : Eddystone packets found : 3
2018-05-03 09:08:31.189624+0200 BeaconReadTest[7898:2102973] 5F51DDB9-3774-8B3D-5375-FB9C2EFAC299
2018-05-03 09:08:31.189708+0200 BeaconReadTest[7898:2102973] http://TourSaintNicolas
2018-05-03 09:08:31.189839+0200 BeaconReadTest[7898:2102973] B6C7ED02-22E2-C858-7D23-9B01E6EC552D
2018-05-03 09:08:31.189908+0200 BeaconReadTest[7898:2102973] http://TourDeLaLanterne
2018-05-03 09:08:31.190055+0200 BeaconReadTest[7898:2102973] F9BFF945-B4D5-701E-6099-C0D028D788FB
2018-05-03 09:08:31.190247+0200 BeaconReadTest[7898:2102973] -[ESTEddystoneUID url]: unrecognized selector sent to instance 0x1d0281180

So, how can I avoid it? I don’t know how the filter is used.


#3

[ESTEddystoneUID url]: unrecognized selector sent to instance 0x1c0090d10

It looks like you’re actually detecting Eddystone-UID packets, did you enable any on your beacons?

You can do a type-check to single out just the URL packets:

- (void)eddystoneManager:(ESTEddystoneManager *)manager didDiscoverEddystones:(NSArray<ESTEddystone *> *)eddystones withFilter:(ESTEddystoneFilter * _Nullable)eddystoneFilter {

for (ESTEddystone *packet in eddystones) {
    if ([packet isKindOfClass:[ESTEddystoneURL class]]) {
        ESTEddystoneURL *urlPacket = packet;
        // ...
    }
}

}