Skip to Content
Dial v1 live 🎉
SdkReact Native SDK

React Native SDK

Native mobile SDK for React Native applications on iOS and Android.

Status

🔄 Coming Q2 2025 - Currently in development

Join the waitlist  to be notified when available.

Planned Features

Core Features

  • âś… Wallet-to-wallet calls (audio/video)
  • âś… Push notifications
  • âś… Messaging
  • âś… Voicemail
  • âś… Call history
  • âś… Background call support

Mobile-Specific

  • âś… CallKit integration (iOS)
  • âś… ConnectionService integration (Android)
  • âś… Picture-in-Picture mode
  • âś… Native audio routing
  • âś… Bluetooth headset support
  • âś… Proximity sensor support

Planned Installation

npm install @dial/react-native # or yarn add @dial/react-native # iOS specific cd ios && pod install

Planned API

Setup

import { DialClient } from '@dial/react-native'; const dial = new DialClient({ apiKey: process.env.DIAL_API_KEY, walletAddress: '0x...' });

Making Calls

const call = await dial.calls.start({ to: '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb', type: 'video', displayName: 'Alice.eth' });

React Hooks

import { useDialCall, useDialMessages } from '@dial/react-native'; function CallScreen() { const { call, answer, decline, end } = useDialCall(); if (!call) return null; return ( <View> <Text>Incoming call from {call.from}</Text> <Button title="Answer" onPress={answer} /> <Button title="Decline" onPress={decline} /> </View> ); }

Push Notifications

import { DialNotifications } from '@dial/react-native'; // Setup push notifications await DialNotifications.requestPermissions(); await DialNotifications.register(); // Handle incoming call notifications DialNotifications.onIncomingCall((call) => { // Show call UI });

CallKit Integration (iOS)

import { DialCallKit } from '@dial/react-native'; // Automatic CallKit integration // Calls will appear in native iOS call UI await DialCallKit.enable({ appName: 'MyApp', ringtoneSound: 'ringtone.mp3' });

Planned Example App

import React, { useEffect } from 'react'; import { View, Text, Button } from 'react-native'; import { DialProvider, useDial, useDialCall } from '@dial/react-native'; function App() { return ( <DialProvider apiKey={process.env.DIAL_API_KEY}> <MainScreen /> </DialProvider> ); } function MainScreen() { const { dial, isConnected } = useDial(); const { call, answer, decline, end } = useDialCall(); const makeCall = async () => { await dial.calls.start({ to: '0x742d35Cc6634C0532925a3b844Bc9e7595f0bEb', type: 'video' }); }; if (call) { return ( <View> <Text> {call.status === 'ringing' ? `Incoming call from ${call.from}` : 'In call' } </Text> {call.status === 'ringing' ? ( <> <Button title="Answer" onPress={answer} /> <Button title="Decline" onPress={decline} /> </> ) : ( <Button title="End Call" onPress={end} /> )} </View> ); } return ( <View> <Button title="Make Call" onPress={makeCall} disabled={!isConnected} /> </View> ); }

Requirements

iOS

  • iOS 13.0 or higher
  • Xcode 14 or higher
  • CocoaPods

Android

  • Android 8.0 (API 26) or higher
  • Kotlin 1.8 or higher

Permissions

iOS (Info.plist)

<key>NSCameraUsageDescription</key> <string>We need camera access for video calls</string> <key>NSMicrophoneUsageDescription</key> <string>We need microphone access for calls</string> <key>NSPhotoLibraryUsageDescription</key> <string>We need photo library access to share images</string>

Android (AndroidManifest.xml)

<uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

Platform-Specific Features

iOS-Specific

  • CallKit integration
  • Siri shortcuts
  • App Clips support
  • CarPlay integration (planned)

Android-Specific

  • ConnectionService integration
  • Android Auto support (planned)
  • Material Design components

Roadmap

Q2 2025 - Alpha Release

  • Core calling features
  • Messaging
  • Push notifications
  • CallKit/ConnectionService integration

Q3 2025 - Beta Release

  • Video conferencing
  • Group calls
  • Screen sharing
  • Performance optimizations

Q4 2025 - Stable Release

  • Full feature parity with web SDK
  • Production-ready
  • Complete documentation

Get Notified

Want early access? Join the waitlist:

Contributing

We’re looking for contributors! If you’re interested in helping build the React Native SDK:

Current Alternative

While the React Native SDK is in development, you can use our TypeScript SDK in React Native with WebView for web-based calling:

import { WebView } from 'react-native-webview'; function DialWebView() { return ( <WebView source={{ uri: 'https://dial.wtf/embed/call' }} mediaPlaybackRequiresUserAction={false} allowsInlineMediaPlayback={true} /> ); }

Next Steps

Last updated on