React Native
How do I add phone and video calls to a React Native app?
Phone calls are one line, because your app just opens the phone's dialer with a tel link. In-app video calls need a video provider's SDK, a small piece of backend code that creates call tokens, and a development build, since video SDKs include native code that Expo Go doesn't have.
Updated October 31, 2026
If you’re adding calling to your app, it helps to decide first which kind you mean, because “calling” covers two features that take very different amounts of work. A Call button that opens the phone’s dialer is one line of code, while video calls inside your app need a provider, a little backend code, and a development build.
Phone calls: open the dialer
For a Call button that rings a phone number, you don’t place the call from your app at all. You just open the phone’s dialer with the number:
import { Linking } from "react-native";
<Button title="Call" onPress={() => Linking.openURL(`tel:${phoneNumber}`)} />;
That’s all it takes on a real phone. Simulators don’t have a dialer, though, so test it on a device.
Video calls inside your app
Video calling is a much bigger job. It needs servers that connect the people on the call and relay their video, so we’d use a hosted provider for that part rather than build it. Several providers have React Native SDKs, including Daily, Stream, LiveKit, and Agora, and it’s worth comparing their pricing and limits against the number of calls you expect before you pick one.
-
Create an account with the provider and keep its secret key on a server, never in the app, because anyone can pull a key out of an app bundle.
-
Add a backend endpoint that creates a call or room and returns a short-lived token for the signed-in user. A serverless function or an edge function in your backend is enough.
-
Install the provider’s React Native SDK and its Expo config plugin, and add camera and microphone permission text, which iOS shows when it asks the user for access.
-
Make a development build. Video SDKs include native code that Expo Go and other preview apps don’t contain, so they won’t run there. A development build is your own version of the app with those libraries included.
-
Join the call with the token from step 2 using the SDK’s join method, and show the local and remote video views it provides.
How you know it works
Two real phones, signed in as two different users, can join the same call and see and hear each other. Once that works on Wi-Fi, try it again with one phone on cellular data.
If it doesn’t connect
If you can’t see or hear the other person, check the permissions first, since a denied camera or microphone can look like a blank video tile. Then check that the token hasn’t expired and that both users joined the same room name. Each provider’s dashboard shows recent calls and errors, so look there for the call that failed and any errors listed with it.
Ask the agent
If your app is in Draftbit, paste this into the agent, and it can read your code and make the change for you.
Add calling to my app. A Call button should open the phone dialer with the contact's number. For video calls, add a video provider's SDK, create call tokens in our backend so no secret key is in the app, add the camera and microphone permissions, and tell me what kind of build I need to test it.