We were thinking of an automated user check-in for a loyalty program base on beacon proximity. Even though we feel this creates a friction-less user experience (without needing to identify yourself with a card or phone number or name), but we are very concerned of user adoption as research showed there are only 33% of the smartphone users turning on their bluetooth.
My questions:
Is there a way for mobile app (iOS and Android) to still read the beacon broadcast in the background even though Bluetooth is off ?
Is there any other alternative solution other than using beacon proximity to achieve this user experience? NFC or QR code requires user action which we try to avoid.
Thanks!
No, you cannot detect bluetooth beacons if bluetooth is turned off. However, you can detect that bluetooth is off and prompt the user to turn it on.
Related
Consider an application that has for example application called "Covid detection". This application has a flag whether or not the owner of the device is covid infected at the moment. The user can change this. Now, let's assume a group of people having this same application.
My question is - is it possible for all devices to perform a scan every once a while to detect whether somebody in their close range was covid infected and send them a warning?
In my mind, the best possible scenario is to simply send a data over bluetooth everytime a bluetooth scan is performed, whitelisting the application as an auto-pair somehow (don't know if it's possible) and sharing user data (covid sick flag). However it seems like this is not possible, and instead the other way would be to perform the scan, save all MAC addresses of nearby devices and once internet connection is available, check the MAC addresses server-side for covid possibility.
Is this possible? Are there other ways?
Currently, Android apps recognize beacons and send and receive data.
Is there a way to recognize beacons and send and receive data even when Bluetooth is turned off?
Is it possible to turn on the Bluetooth, send and receive data, and turn it off again when the beacons are detected?
Bluetooth must be turned on to detect beacons on Android. However, by declaring the BLUETOOTH_ADMIN permission an app can programmatically turn Bluetooth on and off. Since this permission is required to scan for beacons, anyway, it is easy to do. So, yes, you can turn Bluetooth on, scan for beacons, then turn it back off when done.
In practice, the reasons you might want to do this are rare, as Bluetooth being on uses minimal battery and system resources. Possible motivations for doing this might be:
The user has turned Bluetooth off. An app needing to use Bluetooth temporarily might turn it on temporarily, then turn it back off to respect user wishes.
Turning Bluetooth off and back on can sometimes clear a bad state in the Bluetooth stack.
There are some (debatable) privacy advantages of keeping Bluetooth off. Turning it on only briefly might help preserve some of these privacy advantages.
I am writing a android/ios application that detect/search another phone that turned on Bluetooth and get those name and mac address for further functions development. The application will run as background service that keep scanning the Bluetooth device.
Problems:
For Android, the phone Bluetooth needs to turn into discoverable mode that can let another phone to scan/detect and get the name and mac address. So, I am worry about that phone user keep requesting to another phone causing disturbance because the connection pair request can let the phone popup a confirm dialog box . Is it possible to block/reject the connection request under discoverable mode programmatically? Phone can scan bluetooth device and can get the information but can not request connection while the application is running.
For iOs, there is the same problem, but there is another question that i want to ask. Can Bluetooth keep scanning into background like android background service?
Turn off the screen of android devices that the Bluetooth signal still scannable. But iOs devices can not. Is it possible to let iOs Bluetooth device still be scannable when the screen off.
Thank you very much!
You can scan for Bluetooth devices in background (even when device is locked) as long as you add that background capability to your app. Simply start scanning when your app is launched, and don't stop.
However, this uses a significant amount of battery power (scans every 20ms), and even more if there are actual Bluetooth devices nearby (because scan response may be requested).
Instead, take a look at the Region Monitoring and iBeacon functionality in the CoreLocation classes. That is meant for power efficient discovery of BLE beacons.
You will not be able to get the MAC addresses on iOS. You will be getting UUIDs.
If the user force kills the app, background scanning stops.
I'd like to use android's bluetooth for some kind of sensing devices. But I don't want to connect to these devices. As far as I know Devices won't react to scanning when their own bluetooth is disabled. But is there any way to get my app noticed when such a scan has been performed by a remote device, even when my app is running with bluetooth turned off?
I don't want to force toggling bluetooth on, but I need to get some kind of Action started in other devices running the same app. So I'm wondering if some there is any description/data field that can be sent with a bluetooth scan, so if scan is rejected the app has the opportunity to read that data just to know there was this specific call?
I need to leverage context-awareness within my system as to users, not knowing each other, still can interchange content (if they agree). But I need to find some ways of sensing while I also don't want to have all sensors activated all the time.
Hope you can give me a hint, or tell me that this is simply not possible, which would also help me not spending any more time on that.
Thanks.
Can I detect the iBeacon with out the user install any app ? on iOS or on Android .
For example:
A aribetry user enter the store , he dont have the store app.
Can I detect that the user entered the store ? can I do it on iOS or Android ?
I am following the below article
http://developer.radiusnetworks.com/2013/10/21/corebluetooth-doesnt-let-you-see-ibeacons.html
No, you cannot use iBeacons to detect that a user has entered a store on either iOS or Android, unless an app is installed first. I am the author of the article you reference.
The reason iBeacons cannot do this without an app is because they are transmit only devices. You need an app to hear the iBeacon and then use the phone's internet or bluetooth connection to tell computers associated with your store about the user's presence.
What you want is possible with WiFi sniffing sensors that passively detect user phones. These are good for detecting statistics about customer presence. See the MessageRadius description for an overview of how this works.
With iOS this is not possible.
A user may have received & installed a Pass for Passbook that will trigger a lock-screen alert when it is within proximity to a specific iBeacon - but no information will be sent to any web-service about this triggering event. You cannot track a user's location via Passbook.
If the user installs your App then this can send information to your web-service when it detects an iBeacon - but you need to get the user to install the App first ..
I think you are a little confused about how iBeacon works - A device (beacon) needs to actively transmit an id which can be detected by another device that is listening for the specific UUID.
While an iOS device (or an Android device) can act as an iBeacon it requires an app running on the device to do so and this would not be the typical use case in a retail environment.
Rather, a store's app on the device would register interest in a particular UUID (the UUID assigned to that store's iBeacons). Entering range of an iBeacon (when you enter a store) would notify the app, which could then take the required action.
The Radius Networks article you linked to essentially describes a "sniffer" app that can scan for all iBeacon UUIDs rather than a specific one. Neither the iOS CoreLocation or CoreBluetooth libraries do not allow you to do this.
You could write an app on iOS that listens for 'well-known' UUIDs (such as Estimote, Radius Networks etc) - there are several example apps available on the App Store that do this, but the information transmitted is simply a UUID and two numbers, so it would be of limited information to a generic app as you need knowledge of how the store is assigning this information.