VoIP on LAN

The setKeepAliveTimeout API is now deprecated in iOS 9 (as well as the other VoIP socket settings). How are current VoIP apps able to communicate when on a LAN without Internet access? The new solution as of iOS 8 is to use PushKit and funnel all requests for the app to wake-up from Apple's APNs. But these notifications will not arrive if on a private network.


Any ideas are welcomed, but unless I'm missing something; this as effectively killed a segment of VoIP apps from existing.

Replies

Can you give more details about the sort of setup you’re interested in? In my experience there are two general classes of LAN-only VoIP solutions:

  • consumer facing (A)

  • managed (B)

The legacy VoIP architecture does not work well for A because users will often bring a WWAN-capable device to the party. On a WWAN-capable device we typically disassociate from Wi-Fi on screen lock, and so VoIP apps have to be capable of moving to WWAN anyway.

The legacy VoIP architecture works well (as well as it ever worked, which is not great) for B because you can outlaw WWAN. However, moving to PushKit in this setup isn’t too hard because you can specifically punch a hole in your firewall to allow the devices to connect to APNs.

Share and Enjoy

Quinn “The Eskimo!”
Apple Developer Relations, Developer Technical Support, Core OS/Hardware

let myEmail = "eskimo" + "1" + "@apple.com"

Thank you for the reply. The solution in mind is an enterprise-only application, which will not be available to the general public. The app will sometimes have a Internet connection through WiFi, but it also needs to fail over to LAN-only connectivity for continued communications.


A good scenario to imagine is that you're on a train with limited Internet connectivity. When the train is outside and able to pick up a satellite signal then all is well and Apple's new APN API's can do the job. But when the train goes into a long tunnel the train's crew should still be able to communicate through the onboard VoiP server. Expand this scenario to other modes of transportation that may have longer periods of no connectivity and you get the idea.


I'm a bit uneasy that the old API's might be removed at some point and leave me with no workaround solution. This other thread echoes my concern: https://forums.developer.apple.com/message/63553#63553

I too am interested in how to get around this and I think you have missed the main point here...

How can you get a "notification " to a suspended app when there is no internet connection at all. I have various customers who have times when there is no physical way of getting internet, or they are in a restricted closed network, but we need to use both VoIP and notifications.

Is there any way to deliver a notification or wake an app on a TCP or UDP port?

I don't see how moving to pushkit can work for my situation. My customers have a closed network which does not have access to the internet.

Will setKeepAliveTimeout, voip socket or

NSStreamNetworkServiceTypeVoIP be available for use in 11?

Will

setKeepAliveTimeout
, voip socket or
NSStreamNetworkServiceTypeVoIP
be available for use in 11?

I’m sorry but no one can answer this question; those people who know (and that’s not me) aren’t allowed to say.

Share and Enjoy

Quinn “The Eskimo!”
Apple Developer Relations, Developer Technical Support, Core OS/Hardware

let myEmail = "eskimo" + "1" + "@apple.com"

I am interested if there is a solution for this problem. My use case is a peer to peer VoIP application, when there is no server at all.

My use case is: In a remote mountainous area where there is no internet but electricity, we have a large wireless LAN with a coverage area of ​​one kilometer, peoples who live there need to make calls to each other without internet and no phone signal, that can only communicate over WiFi LAN using VoIP, but VoIP doesn't support LAN, which is frustrating to me.

  • VoIP supports LAN and works well peer to peer. The problem is only on mobile devices because a VoIP application cannot receive an incoming call while in background

Add a Comment

The bulk of this thread is very old. Since then:

  • The original VoIP architecture has been deprecated.

  • And then placed behind a restricted entitlement.

  • And finally removed from the system entirely.

We recommend that general-purpose VoIP apps transition to PushKit.

If you need to implement VoIP or messaging in an environment that doesn’t support access to the wider Internet, and so can’t use PushKit, look at the Local Push Connectivity API.

Either way, CallKit can help you manage the UI of your VoIP app [1].

Share and Enjoy

Quinn “The Eskimo!” @ Developer Technical Support @ Apple
let myEmail = "eskimo" + "1" + "@" + "apple.com"

[1] Except in an app that deploys to China, but don’t ask me to explain that or I’ll start to whimper.