How can I send data to an iBeacon ? - ios

If I use beacon in a store,the device can push some advertisement to customer`s phone.
How can I push the advertisement to the beacon device?

I beacons are not two way communication devices, they are low powered bluetooth devices that advertise some specific info. So it's only one way. There are only two modes of operations for a beacon , as region-monitoring and ranging.
Here's guide on how these beacons work...
http://www.warski.org/blog/2014/01/how-ibeacons-work/

You can't send message to other via beacon device. Do you have beacon device in store? If Yes, your app must installed in user device which is also in foreground while they entered into your store. So while your beacon device broadcasting, your app can detect accurately where they are. and your app must do some calculation based on location(use triangle theory). Send this information to your server, they will send information to your customer. For example, if your customer now in center of your store, you can popup ads with product image(Flat 50% offer...)
See this apple's doc to learn more about beacon.

Related

Can iOS app act as beacon, even when it is running in the background?

I need my app to act as a BLE beacon, even when it is in the background.
I've already made the beacon part - works fine when I'm using the app.
The problem is I've never made anything run in the background before, and not sure what the limitations are - if I will be allowed to let the app act as a beacon in the background.
Was wondering if this is possible or not (both technically, as well according to App Store rules)
Is this technically possible ? Can my app act as a beacon, even when the app is not in the foreground.
Is it within App Store rules ?
Unfortunately, iOS apps cannot emit iBeacon advertisements unless they are in the foreground. If you program your app to advertise iBeacon frames, as soon as the screen turns off or the app is not visible, iOS changes the advertising format to a special generic background advertisement that does not match the iBeacon format.
This proprietary background advertisement is useless for identification of a device. It is designed for connection to BLE GATT services from other iOS devices. Unless you want to advertise a connectable BLE GATT service to other iOS devices this advertisement has little value. EDIT: There is a way to make use of this advertisement. See below.
Apple's documentation describes this limitation here in the section titled "The bluetooth-peripheral Background Execution Mode":
you should be aware that advertising while your app is in the background operates differently than when your app is in the foreground. In particular, when your app is advertising while in the background:
The CBAdvertisementDataLocalNameKey advertisement key is ignored, and the local name of peripheral is not advertised.
All service UUIDs contained in the value of the CBAdvertisementDataServiceUUIDsKey advertisement key are placed in a special “overflow” area; they can be discovered only by an iOS device that is explicitly scanning for them.
If all apps that are advertising are in the background, the frequency at which your peripheral device sends advertising packets may decrease.
It may not be obvious that the above causes iBeacon transmissions to break, but I assure you that is absolutely a consequence.
Read my blog post here for more information on how to put useful beacon data into this background "Overflow Area" advertisement.

iOS React to iBeacon enter event with sending own iBeacon signal

I'm in the process of developing an iOS app that uses iBeacons.
I understand that my app can get woken up to the background when an enter event is triggered (when the iPhone detects a iBeacon with a certain UUID).
Can I use this to send back a beacon signal myself? (All while the phone is locked)
I know that my app would only have a few seconds in the background after being woken up by the enter event, but normally this should be enough time to send a beacon signal.
Any help is highly appreciated. Thanks in advance.
Unfortunately, an iOS device cannot send a standard iBeacon transmission when in the background. While you can execute the code to do so, and iOS will transmit, background transmissions will.not be detectable as iBeacons by other devices.
Why? CoreBluetooth uses a proprietary technique to roll up all Bluetooth advertisements of background applications into a single advertisement. This is designed to work with advertising Gatt services, and it has the side effect of breaking the iBeacon format.

iOS advertising beacon in background

I devlope advertising data app in iOS.
My app advertising data is good in foreground.
But I want to advertising beacon data in ios background.
I set up background-peripheral setting.
and advertisingData
advertisingData = [CBAdvertisementDataLocalNameKey: localName,
CBAdvertisementDataServiceUUIDsKey: [serviceUUID]]`
that's well show foreground
when, my app stopped(home button), ios beacon scanned,
but all data not showing.
I already know in background mode, services gone `overflow' area,
but is there anything you can do without a offical way?
I wrote my master thesis about this topic. The answer is no, it is not possible to make an iOS App advertise beacon data in background.
It doesn't work with the traditional CoreLocation APIs. What you may be able to do, is to replicate the iBeacon behavior in your app while supporting background broadcast and detection, but I did not manage to make the broadcasted signal to be recognised as a beacon.
Check this answer for additional information:
https://stackoverflow.com/a/19941436/3726570

Can I connect two iPhone by using the iBeacon technology?

I really haven't read into much about iBeacons beyond the fact that they are low energy bluetooth transmitters that are able to detect nearby proximity devices. I am aware that there are beacon devices such as estimote that allows users to get prompts when entering their proximity. However, I am wondering if two iPhones can act as both beacons and receivers at the same time. So is possible for User A to be able to connect to User B when he arrives in a particular distance of the person?
By connect what I mean is for some sort of interaction to occur.
(e.g. Notifying User A that User B is nearby or exchanging messages that these users would like to send to people that comes in their proximity)
Thanks guys.
Yes, iPhones can both act as iBeacons and receive iBeacon signals. But they can only act as an iBeacon when the transmitting app is in the foreground.
What you suggest is all possible, but it is important to note that the iBeacon concept is connectionless. It is a one way transmission of a simple identifier from beacon to receiver. If you want to make a connection and exchange data, you need a separate mechanism like the internet or a non-iBeacon Bluetooth connection.

iOS: detect app users nearby

I want to build and app which can detect other iPhones with my app within 65 feet range. As I understand I have the following choices:
Use Bluetooth to check periodically whether there is device with my app in the range. Send list of found devices to the server. The problem here is battery consumption. Is it true that Bluetooth will be disabled after some period of time automatically?
Can I use BLE technology for this purpose? If so, do you know what devices support BLE?
What is the best option on your opinion? Did I miss some other option?
Thanks
UPDATE
I plan to run search every 20 seconds or even more often.
There is no simple answer to this problem.
Bluetooth has 2 flavors: "Regular" bluetooth, used for hands-free devices, headphones, and the like, and BLE (Bluetooth Low Energy)
Regular bluetooth devices must be paired. (I'm less familiar with regular bluetooth than BLE, so take my explanation of this bit with a grain of salt.) In order to be paired they have to be put into "discoverable" mode, which broadcasts their ID. That is a battery-draining and only done briefly. It's not an "always on" solution.
BLE has a range of up to 60 meters, so it should meet your need in that regard.
BLE devices can "advertise" as a "peripheral" for extended periods. Other Bluetooth devices can act as a "central" and ask to be notified when certain peripheral devices are detected. I'm not sure if you can make an iOS device advertise (broadcast) as a BLE peripheral while it's in the background and/or if the device is locked, but it will certainly advertise while it's running. I'm pretty sure you can register to be notified when you detect a certain BLE peripheral from the background, but not positive.
iBeacons are a specific use of BLE with some extra limitations and some extra abilities. An iBeacon is a dirt-simple transmitter that sends a UUID plus a major and minor value and a signal strength calibration value periodically (usually once a second.) You can't add any other data to an iBeacon transmission. iOS can only act as an iBeacon transmitter when the app is in the foreground. If your app moves to the background, it stops transmitting. Period.
However, you can listen for iBeacon signals even from the background. AND, if you've registered as a listener for an iBeacon and the system terminates your app due to low memory, the system still listens for those beacons on your behalf. If iOS detects a beacon you're listening for, you get re-launched if needed, and notified in the background. You can then post a local notification to get the user's attention.
iBeacons are probably your best bet, but you will need your users to be actively running your app in the foreground in order to transmit a signal. That will drain your user's battery fairly quickly.
One possible solution would to have have every single device send their locations to your server every predetermined time period (more frequent the better but more resource intensive). Then, query the data from the server and get the location of all the devices near you.
Keep in mind, that this probably won't be very useful for real-time data collection. For example, if you want to send data every 30 seconds or so, this isn't a good option.
Use this option if you want to get data every 15-20 minutes or so.

Resources