enter image description here
I used swiftUI, and it was confirmed that the header bridge was also working properly.
As you can see in the image, the altbeacon is scanning fine,
but not the ibeacon.
I set the layout like this
setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24,d:25-25")
, is there any problem? please check.
I tried changing the layout like this, but it didn't work.
setBeaconLayout("m:2-3=0215,i:4-19,i:20-21,i:22-23,p:24-24")
The OP has set up beacon scanning on iOS using the AltBeacon iOS Beacon Tools
The above tools help iOS scan and decode Eddystone, AltBeacon and other BLE beacon formats using iOS CoreBluetooth APIs under the hood.
However, the above tools cannot detect iBeacon because iOS blocks the underlying CoreBluetooth APIs from getting scan results for iBeacon advertisements. In order to detect iBeacon you must use CoreLocation APIs alongside what you are already doing. While this is duplicative, unfortunately Apple requires this duplication by sandboxing iBeacon from other BLE advertisements.
Related
Im responsible of development of an app in which I need to scan for beacons, and so far support for iBeacon beacons only was enough and in order to do that I used CoreLocation to scan and retrieve data of the beacons which worked very good.
Now it is required to add support for scanning Eddystone beacons; but CoreLocation does not support this type of beacons. Hence, I must use CoreBluetooth to scan and retrieve data from Eddystone beacons, please refer to this very informative post from #davidgyoung for further understanding.
https://stackoverflow.com/a/41744019/6792878
So, since CoreLocation and CoreBluetooth are using bluetooth, I started to think of best practice to follow for scanning both beacons types as good as possible, I came up with the following:
Possibility of using CoreLocation and CoreBluetooth together, CoreLocation scan for iBeacon and CoreBluetooth for scanning other types (Eddystone in this case). But found nothing that stated or negates if they interrupt/affect each other’s scanner.
Ditch CoreLocation and Implement CoreBluetooth only scanner for both types, which will take harder work to dig deep in beacons details.
If you want to scan both iBeacon and other beacon types on iOS, you must use both CoreLocation and CoreBluetooth. They work fine together.
It is important to note that it is not possible to scan iBeacon with CoreBluetooth as iOS blocks access to the raw bytes of any packet matching the iBeacon format by returning an empty manufacturer data NSData object.
To see an example of these working together with no trouble, check out my Locate Beacon app for iOS which scans both iBeacon (with CoreLocation) and Eddystone and AltBeacon with CoreBluetooth. Turn on both beacon types in the vicinity and the app detects both at the same time. Indeed, the sample screen shots on the AppStore show this.
While the code for that app is not open source, the basics of how it scans for AltBeacon and CoreBluetooth are open source in the iOS Beacon Tools project.
Based on this documentation I understand that iOS devices can function as bluetooth beacons.
The documentation states that apps must be in the foreground for the beacon to work.
We need the beaconing to work when the app is not in the foreground. Could we solve this by using a service (similar to Android)?
Sorry, but you simply cannot transmit standard beacon formats like iBeacon, AltBeacon or Eddystone when an app is in the background on iOS.
Apple prohibits this because there is limited ability to advertise on bluetooth, and not all apps would be able to do this at the same time. Instead, Apple uses a proprietary technique that allows background apps to advertise Bluetooth services in the background. This proprietary technique is not compatible with the above bluetooth beacon transmission formats.
That said, a creative project has found a way to harness Apple's proprietary background advertising technique to allow you to use a custom beacon advertising format that does work in the background on iOS. The main disadvantage is that support is limited to receiving the advertisement on other iOS devices.
The project that lets you do this is also called AltBeacon (but should not be confused with the open source AltBeacon format described above) You can read more about it here: https://github.com/Decemberlabs/AltBeacon
Mobile device model and OS version -- Nexus 5, API 23
Android Beacon Library version -- 2.3.5
I have a sensor tag from TI(Texas Instruments), and the firmware is TI provided. The same 2541 chipset is used in all beacons. I try to detect it using this library, it comes inside the didRangeBeaconsInRegion() callback but it prints beacons.size to be zero size.
Now, what changes I need to do, to get this chipset detected?
Just for further information, there are free apps in playstore named (iBeacon detector) which detects this chipset.
Any help will be highly appreciated.
Thank You
A few points:
The Android Beacon Library is designed to work with Bluetooth LE Beacons, not non-Beacon BLE devices. A beacon is a specialized BLE device that continually broadcasts a unique identifier. If you need a more general purpose BLE functionality, the library may not be a good fit.
The TI Sensor Tag must be loaded with specific firmware to make it broadcast as a beacon.
There are many beacon formats including AltBeacon, Eddystone and iBeacon. If your BLE device is transmitting as a beacon you need to know which one it is transmitting.
By default, the Android Beacon Library only detects beacon transmitters sending the AltBeacon format. To detect other beacon formats, you must supply a BeaconParser for that format. A Google search will easily find the Parser expression to configure based on the format the beacon is using.
I need to access raw advertisement data of iBeacons (not AltBeacons). The app does not need to be deployed into the AppStore, thus using private frameworks is ok. I have tried to use BeeTee, which shows how to use BluetoothManager.framework, but it does not discover any devices (tested on iPhone 6, iOS 8.4 and iPod Touch, iOS 8.1.1).
Which other options are available?
Unfortunately, you can't do this. iOS has security blocks that prevent reading the raw advertisement bytes of iBeacons using CoreBluetooth or other means. There are no known workarounds.
I documented my attempts to find a way around this in a blog post here. For what it's worth, you can do this on OSX using CoreBluetooth and on Android devices using built-in bluetooth scanning APIs. It's just iOS that blocks decoding the raw advertising bytes of iBeacon advertisements.
I am using a Gimbal series 10 device configured in iBeacon mode using one of the AirLocate UUIDs (the first one - E2C56DB5-DFFB-48D2-B060-D0F5A71096E0). When I use iBeacon Locate on my Android phone, I can see the Gimbal broadcasting the correct UUID. However, when I try to use Apple's AirLocate demo app, it is not working in trying to find the iBeacon. I also cannot find it in the iOS version of iBeacon Locate, by the same company, Radius Networks.
I am using the beta version of Xcode / iOS.
We have internal apps that would like to use the micro-location features that iBeacons allow, and I'm trying to put together a quick proof of concept. Unless I can get the iBeacon distance using the sample code in AirLocate, I cannot proceed. Any help or experience with this would be greatly appreciated.
Two suggestions:
First, Look closely to verify that have every single character of that ProximityUUID entered as above in the Gimbal configuration. If even one character is off, it will not be visible in AirLocate or the iOS version of the Locate for iBeacon app.
The Android version of iBeacon Locate shows all iBeacons regardless of ProximityUUID, so it will still be visible in the event of a configuration issue.
Second, there is a known bug in iOS 7.1 CoreLocation where iBeacon detections can stop entirely until you reboot your phone. Try rebooting and see if the beacon starts showing up in both applications on iOS.