Video calls for Signal out of beta

moxie0 on 13 Mar 2017

We recently released encrypted video calling as an opt-in beta. We’ve spent the past month collecting feedback and addressing the issues that the Signal community found in order to get it ready for production. Today’s Signal release for Android and iOS enables support for end-to-end encrypted video calls by default, which also greatly enhances the quality of Signal voice calls as well.

We think it’s a big improvement, and hope you will to.

CallKit

CallKit is an iOS 10 feature that brings apps like Signal to the same level as the native iOS calling experience. It makes Signal calls answerable with one touch directly from the lock screen, allows initiating Signal calls through the native contacts app, and displays Signal calls in the system’s “recent calls” list.

Integrating Signal that tightly with iOS can dramatically improve the experience, but it does have some potential downsides. Having Signal calls mixed with normal calls in the “recent calls” list could be of concern for some users, since the “recent calls” list is synced to iCloud by iOS if iCloud is enabled.

To balance these concerns, CallKit is enabled by default, but Signal calls are displayed as being to/from “Signal user.” This means that, by default, it’s possible to answer Signal calls with one touch directly from the lock screen, but only “Signal user” will appear in the “recent calls” list (which is what could be synced to iCloud).

It is easy to opt in to displaying the name/number of an incoming Signal call if having that information in the “recent calls” list is not an issue, or it is also possible to disable CallKit entirely if even having “Signal user” in the call log is not desirable.

Location privacy

In the past, Signal calls always relayed the client media streams through the Signal service. With these updates, Signal can attempt to establish a “peer-to-peer” connection for the call. This has the advantage of reducing call latency, but also has the potential disadvantage of exposing your IP address to the remote calling peer.

Since IP addresses can often be used to determine rough location (such as a metro area), we want to prevent the ability for anyone to discover your location information simply by initiating a Signal call with you. By default, Signal will only attempt to establish a P2P connection if you are initiating the call or if you are receiving a call from someone in your contacts. If you are receiving a call from someone not in your address book, Signal will relay that call through the Signal service.

Additionally, there is a setting which will relay all calls through the Signal service if enabled.

View source

You can check out any of these changes in more detail (or get involved with development) at our GitHub repositories.