In my app I am detecting if there is an internet connection and through what connection (wifi or cellular).
I want to know if there is an option to force the app using the cellular data in case that I am connected to wifi but for some reason or malfunction there is no internet.
Related
Is it possible to access internet (using cellular) during WiFi device configuration using Apple's "Wireless Accessory Configuration" feature?
This device would create the WiFi network and we would need to get data from the server while configurating the device.
Specifications:
Would iOS automatically use cellular to connect to the internet if there is no internet connection through WiFi? (But still keeps WiFi connection with device)
Or is it possible to programmatically switch between connections? For example: Get data from device through WiFi, send data to server through cellular, get data from server through cellular and then configurate device through WiFi.
Some other way to accomplish this?
From Apple Developers Forum:
eskimo:
"iOS keeps WWAN active even when Wi-Fi is fully functioning. That’s done because important system services, like push notifications, always run over WWAN where possible.
So, what you’re asking about is the switch of the default route. In general, iOS only switches the default route to Wi-Fi when the Wi-Fi is fully up and running. That means that WWAN should remain the default route during the WAC process."
https://forums.developer.apple.com/thread/46528
When I tether my mobile network to laptop with Hotspot on iPhone and test for Reachability's currentReachabilityStatus it reports ReachableViaWiFi where neither Wifi is open nor is it sharing mobile network via Wifi.
I know even with this, it shows correct information on internet connectivity but the nature of my app requires exact information on whether Wi-fi is connected or not so its not the issue to determine internet connectivity but more of Wi-fi reachability.
x----x----x----x----x----x----x
EDIT:
Infact it fails if there is no device connected on USB. Only reports ReachableViaWiFi when a machine is using its internet via USB.
Open this post: detect hotspot enabling in iOS with private api's
Maybe enumerating network interfaces will let you discover the fact that connection is actually a tethered cellular network.
Don't worry that title includes private API - the solution contains also a way to this without using private API.
Suppose that:
You are connected to Internet over 3G
You are constantly connected to a server over tcp (like http) and you are retrieving continuous data (like audio or video).
You enter into a WIFI enabled area which you have auto-connection enabled (remembered network); so iPhone automatically connects to WIFI in the background.
In this case, "as I have inspected" connection that was active through 3G is NOT interrupted. I can handle this situation by manually cutting connection and reconnecting again. (which will use WIFI this time)
However, this is only what I currently inspected and I am not sure if this happens on all OS versions and iOS devices.
Do you know if Apple has a procedure for this scenario? Scenario: Strict rules defined for what iOS does to active connections when connection type is changed from 3G to WIFI or from WIFI to 3G?
iOS 7 introduced a new user configuration to disable cellular data for specific apps. It can be configured in "Settings"->"Cellular" and then scrolling down.
You'll find a switch for each installed app and can see how much cellular data it has consumed.
How can I programmatically test if the switch is turned on for my app? Is there an API for that? Can I determine how much data my app has used over cellular?
I'm not asking to get the values for all apps. I'm only interested in my apps usage.
There is no API to detect your download consumption or whether cellular is active for your app.
If your app tries to connect to a website, but cellular is turned off, then iOS may ask the user to turn cellular back on. I'm not exactly sure how that works, but it is probably similar to the iOS 6 "no network connection" alert that would pop up if there is no connection but an app tries to access the internet.
You can check if the current internet connection is over WiFi or Cellular, but if Cellular is disabled you will just be told that there is no network connection.
More details here: iOS Detect 3G or WiFi
You can't check if the cellular data switch is turned on.
The closest thing is that you can check if a specific host is reachable over cellular connection using the SCNetworkReachability kSCNetworkReachabilityFlagsIsWWAN flag.
Additionally, you can enable/disable cellular data for specific connections using the NSURLRequest allowsCellularAccess property.
Reference: https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/Platform-SpecificNetworkingTechnologies/Platform-SpecificNetworkingTechnologies.html
This answer suggests how data usage can be measured system-wide: iPhone Data Usage Tracking/Monitoring
When I change my network from 3G to Wifi what is happening to all the services I'm using (like Facebook, Gmail, etc.)? Do they disconnect and then connect again? Is it like roaming between mobile networks?
Yes they are disconnected and they have to reconnect. I checked that in my own Android app. There I'm handling mobile and wifi network strength and on change the device is offline.
Since you change your connection you will get another IP which requires to reconnect.