Video and audio by Stream
Stream's Video and Audio adds calls to a chat app: a user starts a video or audio call from a channel, and its members can join it. Chat and calls use separate SDKs, stream-chat-react-native (or stream-chat-expo) and @stream-io/video-react-native-sdk, each with its own client, and the same Stream app.
The chat with video guide adds chat to a calling app, and calls to a chat app with ringing, step by step. It's part of the Video and Audio documentation for React Native, which covers its own concepts (authentication, permissions, push notifications for incoming calls), its components, cookbook examples and tutorials.
Using the guide with v10
The guide's chat code was written for an earlier stream-chat-react-native. With v10, change these parts:
- The composer. Where the guide renders
MessageInput, renderMessageComposer. - The chat client.
useCreateChatClienttakes the token astokenOrProvider, nottokenProvider:useCreateChatClient({ apiKey, tokenOrProvider, userData }), as in the Quick start. - The attachment picker inset. Where the guide calls
setTopInset(headerHeight)fromuseAttachmentPickerContext(), pass the header height toChannelastopInsetinstead. Keyboard and insets explains the insets. - The unread count on the chat button. The guide's
useUnreadCounthook readsclient.activeChannels, whichstream-chatv10 doesn't have, and counts on its own from events. Get the channel withclient.channel("messaging", callId), and read the current user'sunread_messagesfrom thereadfield ofchannel.statewithuseStateStore, as the unread badge in Reading state in components does. The client keeps that count up to date while the channel is watched, so keep the guide's effect that watches the channel, and drop the event listeners.
The video parts of the guide don't change.
Best practices
- Use the same API key for chat and video, and sign both user tokens with the same secret. One Stream app serves both.
- Create both clients for the same user, and disconnect both when the user signs out.
- Tie each call to its channel, for example by storing the channel's
cidin the call's custom data, as the guide does, so the app can show the call in the right channel. - Plan camera and microphone permissions, and what users see when they're denied, before building the call UI.
- Test calls together with chat push notifications and unread counts, since both change while a call rings.