React Native Guide
Build an iOS + Android softphone with the jambonz WebRTC SDK
This guide walks you through building a voice calling app for iOS and Android using React Native.
The SDK works on both simulators/emulators and physical devices. A physical device is recommended for real call testing with audio.
Step 1: Create a React Native Project
Step 2: Install the SDK
For iOS:
Step 3: Android Permissions
Add to android/app/src/main/AndroidManifest.xml inside <manifest>:
Step 4: iOS Permissions
Add to ios/MyJambonzApp/Info.plist:
Step 5: Connect to the SBC
Run on your device:
Step 6: Make an Outbound Call
Step 7: Handle Incoming Calls
Use React Native’s Alert for a simple incoming call prompt:
Step 8: Add Call Controls
Step 9: Call Different Targets
Step 10: Using React Hooks (Alternative)
Android Notes
- JDK 17+ required — install via
brew install --cask zulu@17 - USB debugging must be enabled for physical devices
- Works on both emulator and physical device
iOS Notes
- Xcode 15+ required
- You must configure code signing in Xcode (Signing & Capabilities tab)
- Add microphone permission in Info.plist
- Works on both simulator and physical device (physical device recommended for real calls)
Run the Full Example App
The repo includes a complete softphone example with a dark theme UI, DTMF dial pad, incoming call handling, mute/hold/hangup controls.
After generating, add the required permissions:
Android — add to android/app/src/main/AndroidManifest.xml inside <manifest>:
iOS — add to ios/JambonzExample/Info.plist before </dict>:
Run on Android
Run on iOS
What the example includes
The example app has clean separation between SDK logic and UI:
src/useJambonz.ts— all SDK interactions (connect, call, mute, hold, transfer, incoming calls). Read this file to learn the SDK.src/App.tsx— wires SDK state to UI componentssrc/components/— reusable UI: ConnectionForm, DialerView, ActiveCallView, IncomingCallView, DtmfPadsrc/theme.ts— shared color palette
How to use it
- Enter your jambonz SBC WebSocket URL (e.g.
wss://sbc.example.com:8443) - Enter your SIP username and password
- Tap Connect — status dot turns green when registered
- Enter a number or SIP target and tap Call
- Use the in-call controls: mute, hold, DTMF pad, hang up
- Incoming calls show an answer/decline prompt
Source: github.com/jambonz/webrtc-sdk/tree/main/examples/react-native