Do people manually have to turn on nearby notifications to receive proximity marketing messages?
And with android factory default settings, is nearby notifications settings on or off?
Thanks for your help. It's much appreciated.
Most Android phones outside of China will have Google Nearby enabled by default and location and bluetooth turned on by default. This is true because Google requires it be installed with default settings for the Google Play Store to be pre-installed on new Android devices.
However, this doesn't mean it will always work because there are lots of exceptions:
Any Android device that does not have Google apps installed by default (Gmail, Maps, etc.) do not have Google Play Service and will not show Nearby notifications. Amazon Fire OS tablets (and the Fire phone) are examples of this. These will never show Nearby notifications.
Android devices sold in mainland China do not have Google apps or Google Play Services installed. These will never show Nearby notifications.
Older Android devices that do not have automatic app updates turned on, and do not have Google Play Services 7.8.0+ (released in July 2015) will not get Nearby notifications, because that minimum Google Play Services app version is needed to display them.
Any device without Bluetooth LE support (or with Android 4.2.x or earlier which does not support Bluetooth LE) will not show Google Nearby messages, because Bluetooth LE is needed for it to work.
If a user proactively turns off bluetooth (common) or location services (also common) even if the user leaves Nearby enabled, notifications will not be received, as bluetooth and location are required for it to work.
The first few times a user sees a Nearby notification, the user is presented with an option to turn it off. It is very common that users do this even if they don't remember later that they did so.
Because every one of the above cases will break Nearby from working, it's hard to say the percentage of Android phones in any given location that will be able to receive notifications. In China, the percentage will be very low. In other parts of the world, it will be a big percentage, but nowhere near 100 percent. Getting a better estimate of the percentage is difficult, as Google does not publish numbers, and it will certainly vary significantly by the target audience.
Related
I'm developing a 'smart watch' which is connected via BLE to an app on a phone.
My idea is to show the direction on the watch so the user doesn't have to remove the phone from their pocket while using their favorite application (Waze, Google Maps, ...)
Is there any standard to send navigation information (turn left/right, ...) to a smart device over BLE?
It seems there are apps that do this, but they are fully custom: https://www.youtube.com/watch?v=naAhe7DTKYM. I'm checking on the side of Android Auto, but it seems to me it's only by USB cable.
Off the top of my head there are two services that you can use for this purpose:-
Location and Navigation Service (Used mostly for outdoor):-
"The Location and NavigationService(LN Service)exposes location and
navigation-related data from a Location and Navigation sensor
(Server)intended for outdoor activity applications."
Indoor Positioning Service (Used mostly for indoor):-
"The Indoor Positioning Service exposes location information to
support mobile devices to position themselves in an environment where
GNSS signals are not available, for example in indoor premises. The
location information is mainly exposed via advertising and the
GATT-based service is primarily intended for configuration."
If both are not 100% suitable for your application, then you can create your custom profile that contains one or both of these services in addition to a custom service (turn left/right etc). This way, any watch can connect to the phone and get the adopted services info, and for any additional info watch can add support for the custom service.
When I was looking for such "standard way" for turn-by-turn navigation (official Bluetooth specification for navigation, similar to official Battery or Heart rate services), I didn't find anything suitable, but I still have a feeling like maybe I've missed something.
Those services Youssif Saeed suggested are for different type of navigation, not turn-by-turn unfortunatery.
Some apps (Sygic for example) may integrate their own BLE service.
I guess the application you linked reads notifications (posted by navigation apps like Waze, Google Maps), extract instructions from them, and then send to an external device via BLE.
I am developing an app that controls a product's operation. The communication is via BLE. My configuration is
App - Peripheral (iOS, Android)
Product - Central (uses Laird BT900 module)
iOS as a peripheral works fine (pairing and bonding) ; Android PIN pairing works fine, but subsequent bonding (or reconnect when in range) there are a lot of issues and termination of connection. I am using the supported list of devices for Android BLE and I also understand that there are many known issues that come with different manufacturers/chipset vendors
The issue I am getting is, as seen by nrfConnect, is with descriptors. Android app doesnt show descriptors when seen in nrfConnect whereas iOS shows. I do not know what is the difference
Is it a common practice to use a phone as a peripheral ? Or is it a risk - because this is a medical device.
Are there any best practices for Android as a peripheral ?
I have following back up plans in case Android issue is not resolved. I think following would work on any BLE supported phones without having any issues with the variability.
Plan A : PIN pairing on every connection with the product. This is the most secure and most annoying
Plan B : Implement just works pairing with a app layer password before taking control of the product.
Question : Is just works safe and encrypted ? Is it snoop-safe or MITM-safe ?
Thanks in advance!
A few thoughts from your questions:
1a. (From my Android experience) I think its uncommon to have the phone be the peripheral. To my knowledge all iOS devices support peripheral mode but only a very small subset of Android devices are able to support it. I say this because I've been experimenting with BTLE beacons using the AltBeacon library. From this work I have discovered that only certain Android phones can broadcast BTLE advertise packets. Given that BTLE advertising is the first step in initiating a BTLE session I imagine that this prevents many Android phones from being compatible with peripheral mode.
If all of your users can use an iOS device, then you're set, otherwise this may be a problem.
1b) I can't speak to the specific risk of using a mobile device with your medical device, that depends on what the medical device is doing and how you're using the mobile app.
2) See 1a
3) The specific encryption scheme you used is also based on your product's risk profile. I would say that Just Works is not an ideal solution. The just works pairing process is not snoop-safe and can be re-initiated via a MITM. Other than that I can't speak to the strength of BTLE encryption.
I am aware of MOTO G first version has bluetooth issues.
Background:
My app scans for beacons in the vicinity. The app works great on all Android phones except Motorola Moto G, 1st version with Android 5.1. On this phone, it finds all the beacons except one and the scanning is pretty fast as well. However, with this specific beacon (skybeacon), it only detects first packet and after that it takes forever to find this specific beacon while finding others. A simple conclusion is this specification beacon has issues, which might be true. However, it becomes more interesting from here.
To understand this more, I downloaded other BLE scanners from play store. When I used "BLE Analyzer" from bluevoid, it captures this beacon perfectly. I can see RSSI changing as I move the beacon and it is pretty fast. Once I push BLE Analyzer to background and check our app, surprisingly our app works now. I repeated this, 20/20 times my app captures this specific beacon as long as BLE Analyzer is pushed into background (by pressing home button). If I restart or uninstall or wont open BLE Analyzer at all, my app wont capture this specific beacon.
Possible explanations:
For good or bad this specific beacon is advertising in one channel and the default scanning on this specific phone is having a mismatch. If this is in the right direction, then how to change default scanning channels through app?
This phone might have an integrated chip for wifi, bluetooth and 3G, which might be true. When I disable wifi, I do not see any changes in behavior. When I disable data (3G, not 4G on this), it some times (2 out of 10) start capturing the skybeacon. Again 2 out of 10 times is not a repeatable solution.
Any thoughts?
I would like to make iOS7 Application like MLB
I was reading Article is http://www.engadget.com/2013/09/27/mlb-to-use-ios-7s-ibeacon/
this article said to :
MLB application installed ,
Beacon(Bluetooth LE device) sendging Proximity UUID for MLB application,
MLB application make Passbook ticket or update ticket (and Lock screen update passbook)
This feature, Can only have one special applications for Apple authentication?
some articles said to :
Location based marketing and Passbook tickets
This particular application makes iBeacons an extension of the geofencing Apple enabled in last year’s Passbook, which lets an installed pass, ticket or loyalty card popup on the lock screen when you cross the geofence threshold of a defined GPS location. Using BLE, a merchant or other provider can define more targeted “micro-locations” to trigger an alert, in some cases requiring that you be in the presence of an iBeacon in order to validate a Passbook entry .
i don't understand 'particular application'...
iOS7 application can make publish passbook use iBeacon without user event?
(i don't know well english ;; sorry;;)
Bluetooth Beacons support is a new addition to iOS 7.
Rather than using GPS, it works by determining the phone's location relevant to a Bluetooth beacon. These beacons constantly broadcast a UUID that identifies them. Beacons offer more accuracy indoors as GPS doesn't work that well in covered spaces.
The standard CoreLocation framework defines a new class called CLBeaconRegion:
A CLBeaconRegion object defines a type of region that is based on the device’s proximity to a Bluetooth beacon, as opposed to a geographic location. A beacon region looks for devices whose identifying information matches the information you provide. When that device comes in range, the region triggers the delivery of an appropriate notification.
An apps can request to be informed when they are near these beacons. This is how the MLB app works. It is programmed to recognize these beacons and to provide the user with offers and information based on location.
In addition to support within apps, Passkit also provides the support these beacons. It works in roughly the same way. The pkpass file contains a list of UUIDs that identify various beacons and when the phone is near a beacon, the pass is shown on the lock screen.
You can read more about Passkit's support by looking at the package format guide
https://developer.apple.com/library/ios/documentation/UserExperience/Reference/PassKit_Bundle/Chapters/LowerLevel.html#//apple_ref/doc/uid/TP40012026-CH3-SW4
Hopefully that answers your question.
I am trying to find a clever way to keep a BLE app active in the background on iOS 6, without breaking any of Apple's rules. I plan to use the phone as a peripheral device and another BLE circuit as the central. My app will automatically be opened when a user arrives to a building using geofencing. After that the iPhone will connect to the first BLE central device it sees (the device will be in its white list). The user will then be able to move throughout the building switching to different BLE "nodes".
My question is: What do I need to do in the background when a user is stationary at their desk so that the app does not get suspended due to memory resources?
My idea is based on this solution for a separate problem: There could potentially (not regularly) be 10-50 users in an area with only a few BLE "nodes" and I read at bluetooth.org that I could setup a dynamic connection system, basically rotating connections through all the users.
My idea is to setup a similar dynamic system where the central device (not the iPhone) disconnects the device on regular intervals (30-40 minutes) and then the iPhone will reconnect.
Is this something that some feasible? Is this against the iOS development guidelines? I was unable to find anything explicit about this. I have also asked on the iOS developer forum, but unfortunately it is not as popular as this site.
Thanks in advance!
Xcode -> Project target -> Capabilities -> Enable background mode
Check Uses Bluetooth LE Accessories
Capabilities
Also enable the following key in .plist file
Required background modes
App communicates using CoreBluetooth
Plist