How Bluetooth messaging apps really work
Two phones find each other over Bluetooth Low Energy, open a short connection and hand the message straight across. No server, no internet, no account. The radio part works better than most people expect; the part that fails is almost always how many people have the app.
We build one of these, so this page is written from our own logs across nine real phones over several weeks, with the numbers that went against us included.
What actually happens between two phones
- Each phone advertises. It broadcasts a tiny packet saying "this app is here", constantly and very cheaply.
- And scans. It listens for those packets from other phones running the same app.
- They connect briefly. When one sees another it opens a connection, swaps the messages neither side has yet, and hangs up.
- Messages get carried. A phone holds what it has been given, so when it later meets a third person it passes it on. That is how a message reaches somebody who was never in range of the sender.
Step four is the one that matters and the one people miss. The reach of the system is not the reach of the radio — it is wherever the people carrying it go during the day.
Range, honestly
Tens of metres in open space. Much less through anything solid, and walls cost more than distance. A floor costs more than a wall; a steel deck costs more than a floor, which is why walkie talkies disappoint people on ships too.
So the realistic question is not "how far does it go" but "how often during a normal day do these people come near each other". For a family on holiday the answer turns out to be: constantly, far more than they would guess.
What the phone does while it is in your pocket
This is where the platforms differ, and where most of the engineering goes.
- iPhone. A backgrounded app may keep advertising and scanning, but iOS throttles it, ignores requests for frequent scanning, and suspends and wakes the app on its own schedule. It works — we have measured locked iPhones exchanging messages with each other and with Android phones, screens off, nobody touching them — but it happens in bursts, not continuously.
- Android. A foreground service keeps the process alive, so the timers actually fire and the behaviour is steadier. The price is a permanent notification, and the location permission, which Android requires before any app may scan for nearby Bluetooth devices at all.
- Both. Bluetooth addresses rotate every half hour or so for privacy, so the same phone looks like a new device repeatedly. An app that does not account for that will think it is surrounded by strangers. This caused the worst bug this project has had.
Battery: not the problem it is assumed to be
We measured this properly across nine phones because we expected it to be bad. It was not, and more usefully, we could not attribute the drain to the app at all.
Whole-phone drain while locked and untouched ran 2.2–7.8% an hour, and it tracked how much each person used their phone rather than anything the app did. One phone holding sixty-eight open connections drained less than one holding four. Android and iPhone figures overlapped almost entirely. Low-power Bluetooth scanning is genuinely cheap, and a background app is not what is flattening anyone's battery.
Stated as measured and no further: these figures say the app's cost is too small to see in whole-phone drain, not that it is zero.
The reason most of these apps disappoint
It is not range, battery or the operating system. It is that almost nobody has the app.
A mesh is a network made of other people's phones. Three installs among several thousand people is not a thin network, it is no network — those three people are simply never near each other. We tried an existing Bluetooth mesh app on a real cruise before building anything, and it failed for exactly that reason.
Which leads to the design decision behind ours: do not try to mesh a crowd of strangers. Carry messages between the people who came together, who are near each other all day anyway, and who can all install it beforehand. That is a problem a new app can actually solve.
What it looks like when there are enough people
A family of six, four hours, no shared wifi, moving around. One Android phone's own log:
| Completed exchanges per hour | Same person re-found every | |
|---|---|---|
| Sitting still at dinner | 90 | 4.2 and 4.4 minutes |
| Walking round an arcade | 60 | 6.0 and 7.4 minutes |
317 completed exchanges, every one over Bluetooth. Over a longer run, a person a phone had already met was re-reached on 99.8% and 99.6% of attempts across 3,007 and 874 tries on two Android handsets.
That last figure was 0.0% three weeks earlier, across 4,412 attempts, and finding out why took three separate bugs. The measurements, and the ones that went badly, are here.
If you are choosing one
- Does it work between iPhone and Android? Most families are a mix. An app that only connects to its own kind is no use.
- Can everyone install it beforehand? Nothing installs once the signal goes.
- Does it claim to be instant? Be suspicious. Messages travel when phones come near, and honest apps say so.
- Does it need strangers? If it only works at scale, it will not work on your trip.
The other ways to message without internet, and where each one fails, are here.
Get CruiseLink
Free, no account, nothing to set up beyond your group. On iPhone and Android, and the two work together.