List of beacons is empty for onEnteredRegion, when using Secure UUID

It appears the list of beacons returned by onEnteredRegion is empty when using secure UUID. It works when the beacon is not secured. As far as I can see I am logged in to the Estimote SDK, since information can be fetched.

Code below. Please note I am using a Nexus 5 running Marshmallow for testing.

As a follow up question: Is it possible to randomize only Major/Minor and keep the UUID non-randomized? It appears suboptimal to scan for all beacons with Region(“SecureRegion”, null, null, null), only because the UUID keeps on changing.

Thank you for your replies in advance

    EstimoteSDK.initialize(getContext(), getString(R.string.estimote_app_id), getString(R.string.estimote_token));
    EstimoteSDK.enableDebugLogging(true);

    //this is just to check if estimote initialized correctly
    MacAddress macAddress = MacAddress.fromString("XXXXXXX");
    EstimoteCloud.getInstance().fetchBeaconDetails(macAddress, new CloudCallback<BeaconInfo>() {
        @Override
        public void success(BeaconInfo beaconInfo) {
            Log.d(TAG, beaconInfo.toString());
            //this works and yields all relevant information
        }

        @Override
        public void failure(EstimoteServerException e) {
            Log.d(TAG, e.toString());
        }
    } );

    beaconManager = new BeaconManager(getApplicationContext());

    beaconManager.setMonitoringListener(new BeaconManager.MonitoringListener() {
        @Override
        public void onEnteredRegion(Region region, List<Beacon> list) {
            ShowNotification("Entered region");

            if (list.isEmpty()) {
                Log.d(TAG, "List of beacons is EMPTY.... WHY!?");
                return;
            }

        }

        @Override
        public void onExitedRegion(Region region) {
            ShowNotification("Exited region");

            new AsyncCheckOut().execute();
        }

    });

    beaconManager.connect(new BeaconManager.ServiceReadyCallback() {
        @Override
        public void onServiceReady() {
            Log.d(TAG, "Starting monitoring");
            beaconManager.startMonitoring(new Region("SecureRegion", null, null, null));
        }
    });

Use SecureRegion, not Region, when monitoring for Secure UUID beacons. SecureRegion will automatically take the “encrypted”/“rotating” UUID+major+minor, use the Estimote Cloud to decrypt it, and then match it against the UUID+major+minor you provided, the “real”/“decrypted” one.

Thank you. The above was unfortunately a typo as a result of testing various iterations - I was in fact using SecureRegion.

I also understand now that there is only a pre-defined set of 16 unique UUIDs being used for the SecureUUID feature, which wasn’t mentioned anywhere in the documentation. Previously I thought the “randomized” UUIDs would be truly random, and if that was the case, the API would require to do open a web request for every single beacon it would find. That’s why I asked if the UUID can be pre-defined, in order to avoid mass queries in beacon-heavy areas. As it turns out, the SecureUUIDs are already pre-defined, so the API is already doing that I wanted to implement “manually”. That’s good.

However, my primary question remains unsolved. The list of beacons is always empty (when using the SecureRegion class) upon invocation of an onEnteredRegion event. I saw a post that this was manually fixed in the iOS version sometime in the past, but it seems that on Android the list remains empty. Can you please check that if this is the case, and how I could fix this possibly?

Thank you very much!