SDK React Native (Expo)
Le même hook que sur le web, sur iOS et Android. lunion_react-native s'appuie sur react-native-webrtc et le même protocole que le SDK web.
Le flux
Votre serveur émet un jeton avec@lunionlab/meet-server-sdk(voir « Jetons d'accès »). Votre app mobile reçoit url, room et token, puis rejoint avec useLunionRoom.1. Installer
terminal
npx expo install @lunionlab/meet-react-native react-native-webrtcDevelopment build requis
react-native-webrtc contient du code natif : utilisez un development build (npx expo prebuild puis npx expo run:ios / run:android). Il ne fonctionne pas dans Expo Go.Permissions (app.json)
app.json
{ "expo": { "plugins": [ ["react-native-webrtc", { "cameraPermission": "Pour les appels vidéo", "microphonePermission": "Pour les appels audio" }] ] }}2. Récupérer un jeton (côté serveur)
Le jeton est émis par votre backend. Ne mettez jamais votre clé d'API dans l'app.
server.ts
import { RoomServiceClient } from "@lunionlab/meet-server-sdk"; const rooms = new RoomServiceClient( "https://meet.lunion-lab.com/api/v1", process.env.LUNION_API_KEY!,); const room = await rooms.createRoom("Réunion produit");const access = await rooms.createToken(room.slug, "user-42", { name: "Awa" });// → renvoyez access.url, access.room, access.token à votre app mobile3. Rejoindre la salle
Le hook useLunionRoom gère la connexion, la caméra/micro et les participants. Affichez chaque flux avec le composant VideoTrack.
CallScreen.tsx
import { View } from "react-native";import { useLunionRoom, VideoTrack } from "@lunionlab/meet-react-native"; export function CallScreen({ url, room, token }: { url: string; room: string; token: string }) { const { localStream, participants, toggleMic, toggleCamera, leave } = useLunionRoom({ sfuUrl: url, room, name: "Awa", token, }); return ( <View style={{ flex: 1, flexDirection: "row", flexWrap: "wrap" }}> <VideoTrack stream={localStream} mirror style={{ width: "50%", aspectRatio: 3 / 4 }} /> {participants.map((p) => ( <VideoTrack key={p.id} stream={p.stream} style={{ width: "50%", aspectRatio: 3 / 4 }} /> ))} </View> );}Contrôles
toggleMic()/toggleCamera(): couper ou activer le micro et la caméra.switchCamera(): basculer entre caméra avant et arrière.status:idle·connecting·waiting·connected·reconnecting·error.leave(): quitter et libérer la caméra et le micro.
Fonctionnalités avancées
Toutes optionnelles et rétro-compatibles (options de useLunionRoom, ou contrôle bas niveau via LunionMeetClient).
- Reconnexion réseau automatique (option
reconnect, activée par défaut) : bascule 4G↔wifi, mise en arrière-plan, perte de porteuse. Le statut passe àreconnectingpuisconnected, le flux local est re-publié. - Réception de la modération: la coupure décidée par l'hôte est appliquée localement (micro/caméra). Option
autoApplyModeration(défauttrue) + callbackonModerated(op)pour l'afficher. - Mode récepteur pur (
receiveOnly) : rejoint sans publier — mur d'images, spectateur, écran de projection. - Partage d'écran :
shareScreen()/stopScreenShare()/isScreenSharing/screenStream(aperçu local, à passer à unRTCView). L'arrêt depuis la notification Android ou la fin du broadcast iOS met l'état à jour automatiquement. Prérequis natifs obligatoires (AndroidMediaProjection+ service au premier plan ; iOS Broadcast Upload Extension + App Group) — sans euxshareScreen()échoue au runtime : guide de configuration native. - Modération & présence :
isHost,admit/deny/moderate/setRole/transferHost, locuteur actif (activeSpeaker+onActiveSpeaker), enregistrement (startRecording/stopRecording+onRecordingStatus). - Scalabilité : qualité par couche
setVideoLayerPolicyet abonnement sélectif (LunionMeetClient.setSubscribed) pour les grandes réunions. - Chat & réactions :
sendChat/sendReaction(envoi). La réception via le hook n'est pas encore exposée — utilisez les callbacksonChat/onReactiondeLunionMeetClientsi besoin.
Chiffrement de bout en bout (E2EE) : indisponible sur React Native
L'E2EE média par frame n'est pas supportée parreact-native-webrtc standard (ni insertable streams, ni FrameCryptor natif). Le SDK Flutter, lui, propose l'E2EE. Détails et voie de contournement dans le README du paquet.Même protocole que le web et Flutter
Le SDK React Native réutilise@lunionlab/meet-client-js : web et mobile se rejoignent dans la même salle.