Yep – iOS devices try to connect to a page on Apple’s servers. This enables to work out if it’s got raw internet connection, or if there’s a portal intercepting the connection. If it detects a portal in the way, it presents it. In the meantime, in the background, it continues trying to reach the Apple page and makes the ‘Done’ button visible as soon as it can. But this only works if you try and access the internet via a browser. It won’t trigger the portal from inside some other application.
In terms of detecting connectivity within an app, personally, I use the ‘Connectivity’ framework in my iOS apps
This polls every 10 seconds and gives one of five results…
… and sends a notification to the app if it changes. It works in a similar way – trying to reach an actual website and comparing what comes back to make sure it’s valid.
It would literally take five minutes to add this to any app.
So, how do I avoid “WiFi waiting” on my iPad? Had to restart my box a couple times yesterday as the software would only switch between “connecting”/“waiting” mode after a while. I had all other apps closed
Did you also put in a manual IP address as described here?
Also note that once the WiFi is stuck closing apps might not solve it without a reboot. If you have all the apps closed from the beginning it should run nicely. If not please email me with some screenshots.
Great informative post, Stevelup. I wonder if android does this too?
Certainly I have never seen any app which returns the sort of rather useful information which you describe.
Probably, but even if there isn’t, it’s a programming exercise that could be done in the first term of ‘programming school’ ;)
The nice thing about the library I use is that you can pass it a bunch of custom URLs too – so not only can you check that the internet is working, you are checking if the actual service you’re trying to reach is up. This makes a lot more sense than just blindly trying to connect.
You can even instantiate it twice – once using the set of default URLs (Apple etc) and a second set (your servers) and give some really informative messages like:-
“Connected to WiFi but cannot connect to internet”
“Connected to WiFi and got a good internet connection, but can’t reach blah”
One problem (not sure if it is a problem – probably a feature) on Apple devices is ‘WiFi Assist’ – what that does is detects if the WiFi is crappy, and if it is, it’ll fall back and use cellular for data even if you’re still connected to WiFi. This is good (because it’s seamless), but bad because neither the end user, nor the app developer really knows what’s going on. That’s why it’s best to just check if it’s working, and not care how or why it is!
It is indeed a surprise that some app developers don’t bother treating reachability with any importance given that many apps will be used in places where connectivity is spurious.
I love the ADL devices. Was just wondering if in an upgraded version the WIFI cannot be exchanged for a Bluetooth connection? A mobile phone or tablet can be connected to only 1 WIFI network, but to several Bluetooth devices. The Garmin Inreach connects to their app on the iPhone over Bluetooth as well. Maybe this is technically not possible, but just an idea that might work.
Was just wondering if in an upgraded version the WIFI cannot be exchanged for a Bluetooth connection?
I did investigate this option but the main limitation is the GDL90 compatibility with SkyDemon, Foreflight and other apps. Those apps receive GDL90 formated IP broadcast messages. So switching over to Bluetooth would kill this interface.
I wonder if, Sebastian, you could run BT concurrently with WIFI? It might reduce the power consumption of the client device significantly. OTOH, BT works only on certain days of the week so maybe that’s not a good idea
I must say that I believe BT to be the work of the devil. It can fail and fail and fail and you can restart the services on both devices and/or the devices themselves multiple times, then it suddenly starts working for no obvious reason.
I am sure it was written as a joke.
But then, WiFi isn’t a whole lot better.
It’s a bit of a shame because the more modern implementations of Bluetooth would be ideal for these applications, but WiFi has taken root. I think eventually what we’ll need is an access point in the aircraft (or at least for one of the devices to act as one), and then everything can connect to the same network.