tencent cloud

即时通信 IM

React Native

Download
聚焦模式
字号
最后更新时间: 2026-08-10 14:41:01

chat-uikit-react-native 介绍

chat-uikit-react-native 是一款基于腾讯云 IM 的 React Native UI 组件库,提供了一些通用的 UI 组件,包含会话、聊天、群组等功能。基于这些精心设计的 UI 组件,您可以快速构建优雅的、可靠的、可扩展的 Chat 应用。基于 React Native 开发的 UIKit 界面风格更契合海外客户的使用习惯,而且支持国际化,欢迎接入。
chat-uikit-react-native 界面效果如下图所示:


开发环境要求

React Native 版本: ≥ 0.80
Node.js 版本: ≥ 22
iOS 版本:≥ iOS 16.0
Android 版本:≥ 24

集成 chat-uikit-react-native

步骤1:创建项目(本示例是通过 expo 创建项目)

npx create-expo-app@latest my-app --template blank-typescript

步骤2:集成 chat-uikit-react-native

1. 安装 uikit,chat-uikit-react-native 安装到项目中。
npm
yarn
npm install @tencentcloud/chat-uikit-react-native tuikit-atomicx-react-native
yarn add @tencentcloud/chat-uikit-react-native
2. 安装第三方依赖chat-uikit-react-native 依赖语音录制、图片选择件选择、国际化等 native module,需要手动安装。
npm
yarn

npm install react-i18next i18next react-native-nitro-modules react-native-nitro-sound react-native-video react-native-create-thumbnail react-native-image-picker @react-native-documents/picker @react-native-async-storage/async-storage react-native-safe-area-context react-native-screens
yarn add react-i18next i18next react-native-nitro-modules react-native-nitro-sound react-native-video react-native-create-thumbnail react-native-image-picker @react-native-documents/picker @react-native-async-storage/async-storage react-native-safe-area-context react-native-screens
3. 安装导航。chat-uikit-react-native Screen 使用 @react-navigation/native 进行路由管理。
npx expo install @react-navigation/native @react-navigation/native-stack

步骤3:权限配置

app.json 中配置 androidiOS 的相关权限。

{
"expo": {
"ios": {
"infoPlist": {
"NSCameraUsageDescription": "需要使用相机来拍照发送图片和视频",
"NSPhotoLibraryUsageDescription": "需要访问相册来选择图片和视频发送",
"NSPhotoLibraryAddUsageDescription": "需要保存图片到相册",
"NSMicrophoneUsageDescription": "需要使用麦克风来录制语音消息",
"NSDocumentsFolderUsageDescription": "需要访问文件来选择文档发送"
}
},
"android": {
"permissions": [
"CAMERA",
"RECORD_AUDIO",
"READ_EXTERNAL_STORAGE",
"WRITE_EXTERNAL_STORAGE",
"READ_MEDIA_IMAGES",
"READ_MEDIA_VIDEO",
"READ_MEDIA_AUDIO",
"ACCESS_NETWORK_STATE",
"ACCESS_WIFI_STATE",
"VIBRATE",
"WAKE_LOCK"
]
}
}
}


步骤4:集成 chat-uikit-react-native

1. 集成 uikit: 将 @tencentcloud/chat-uikit-react-native/src/screens 拷贝到 ./src/screens 下(方便自定义 / 调整路由等)。
Mac
Windows
cp -R node_modules/@tencentcloud/chat-uikit-react-native/src/screens ./src/screens/
xcopy /E /I /Y "node_modules\\@tencentcloud\\chat-uikit-react-native\\src\\screens" ".\\src\\screens"
2. 配置页面路由:替换 app.tsx 内容为如下内容。
说明:
示例中的路由使用的是 @react-navigation/native 如需替换,需要同步替换 ./src/screens 中的相关路由。
import React, { useState } from 'react'
import { StatusBar, StyleSheet, useColorScheme, View } from 'react-native'
import { SafeAreaProvider } from 'react-native-safe-area-context'
import { NavigationContainer } from '@react-navigation/native'
import { createNativeStackNavigator } from '@react-navigation/native-stack'
import {
LoginScreen,
ChatScreen,
ChatSettingScreen,
ConversationListScreen,
ContactListScreen,
SearchScreen,
AddFriendScreen,
AddGroupScreen,
ApplicationVerifyScreen,
BlackListScreen,
ContactInfoScreen,
FriendApplicationListScreen,
GroupApplicationListScreen,
GroupListScreen,
SetRemarkScreen,
GroupManagementScreen,
GroupMemberListScreen,
GroupTypeInfoScreen,
CreateGroupScreen,
SearchInConversationScreen,
UserFilterScreen,
UserPickerScreen,
BottomTabBar,
type BottomTabKey,
} from './src/screens'

import { ToastRoot } from '@tencentcloud/chat-uikit-react-native'

const Stack = createNativeStackNavigator()

const MainScreen: React.FC = () => {
const [activeTab, setActiveTab] = useState<BottomTabKey>('message')
return (
<View style={styles.mainScreen}>
{activeTab === 'message' ? (
<ConversationListScreen />
) : (
<ContactListScreen />
)}
<BottomTabBar current={activeTab} onChange={setActiveTab} />
</View>
)
}

function App(): React.JSX.Element {
const isDarkMode = useColorScheme() === 'dark'

return (
<SafeAreaProvider>
<StatusBar barStyle={isDarkMode ? 'light-content' : 'dark-content'} />
<ToastRoot />
<NavigationContainer>
<Stack.Navigator
initialRouteName="Login"
screenOptions={{ headerShown: false }}
>
<Stack.Screen name="Login" component={LoginScreen} />
<Stack.Screen name="Main" component={MainScreen} options={{ freezeOnBlur: true }} />
<Stack.Screen name="Chat" component={ChatScreen} />
<Stack.Screen name="Search" component={SearchScreen} />
<Stack.Screen name="ChatSetting" component={ChatSettingScreen} options={{ freezeOnBlur: true }} />
<Stack.Screen name="AddFriend" component={AddFriendScreen} />
<Stack.Screen name="AddGroup" component={AddGroupScreen} />
<Stack.Screen name="ApplicationVerify" component={ApplicationVerifyScreen} />
<Stack.Screen name="BlackList" component={BlackListScreen} />
<Stack.Screen name="ContactInfo" component={ContactInfoScreen} />
<Stack.Screen name="FriendApplicationList" component={FriendApplicationListScreen} />
<Stack.Screen name="GroupApplicationList" component={GroupApplicationListScreen} />
<Stack.Screen name="GroupList" component={GroupListScreen} />
<Stack.Screen name="SetRemark" component={SetRemarkScreen} />
<Stack.Screen name="GroupManagement" component={GroupManagementScreen} />
<Stack.Screen name="GroupMemberList" component={GroupMemberListScreen} />
<Stack.Screen name="GroupTypeInfo" component={GroupTypeInfoScreen} />
<Stack.Screen name="CreateGroup" component={CreateGroupScreen} />
<Stack.Screen name="SearchInConversation" component={SearchInConversationScreen} />
<Stack.Screen name="UserFilter" component={UserFilterScreen} />
<Stack.Screen name="UserPicker" component={UserPickerScreen} />
</Stack.Navigator>
</NavigationContainer>
</SafeAreaProvider>
)
}

const styles = StyleSheet.create({
mainScreen: {
flex: 1,
backgroundColor: '#F5F5F5',
},
})

export default App


运行和测试

1. 登录。在 src/screens/LoginScreen.tsx 中,填入 SDKAppIDuserIDuserSig,点击登录。
参数
类型
说明
SDKAppID
Number
SDKAppID. 可通过 Chat 概览 中获取。



SecretKey
String
SecretKey 是即时通信 Chat 客户应用的密钥。您可以在 Chat 概览 获取。
userID
String
用户的唯一标识符,由您定义,只能包含大小写字母(a-z,A-Z)、数字(0-9)、下划线和连字符。
userSig
String
用户登录即时通信 IM 的密码,其本质是对 UserID 等信息加密后得到的密文。您可以在 即时通信 Chat 控制台 > 开发工具 > UserSig 工具,填写创建的 UserID,即可生成 UserSig。
安全提示:
示例支持通过 genTestUserSig 函数生成 userSig。该方法中 SecretKey 很容易被反编译逆向破解,一旦您的密钥泄露,攻击者就可以盗用您的腾讯云流量。该方法仅适合本地跑通功能调试。 正确的 UserSig 签发方式请参见 服务端生成 UserSig
示例代码中的 UserSig 仅供测试使用,生产环境请通过 服务端生成
敏感信息(UserSig/SecretKey)仅用于 Demo 测试,不可提交到代码仓库或用于生产环境。
import React, { useEffect, useState } from 'react'
import { useNavigation } from '@react-navigation/native'
import type { NativeStackNavigationProp } from '@react-navigation/native-stack'
import { useLoginState } from 'tuikit-atomicx-react-native'
import { genTestUserSig } from './debug/GenerateTestUserSig'

type RootStackParamList = {
Login: undefined
Main: undefined
}

type Nav = NativeStackNavigationProp<RootStackParamList, 'Login'>

export const LoginScreen: React.FC = () => {
const navigation = useNavigation<Nav>()
const [loading, setLoading] = useState(false)
const { login, logout, loginStatus, loginUserInfo } = useLoginState()
const [userID, setUserID] = useState('') // userID
const SDKAppID = 0 // SDKAppID
const SecretKey = '' // SecretKey
useEffect((): void => {
if (loading && loginStatus === 1) {
navigation.reset({ index: 0, routes: [{ name: 'Main' }] })
}
}, [loading, loginStatus, navigation])

const doLogin = async (): Promise<void> => {
setLoading(true)
try {
await login({
sdkAppID: Number(SDKAppID),
userID: userID.trim(),
userSig: genTestUserSig({
SDKAppID: SDKAppID,
userID: userID.trim(),
SecretKey: SecretKey
}).userSig,
})
} catch (error: any) {
console.error(error)
} finally {
setLoading(false)
}
}

return /* UI */;
}
2. 运行项目:编译并运行项目您需要使用真机或模拟器,推荐使用真机运行。您可以参见 React Native 官网 running-on-device 连接真机进行调试。
Android
iOS
1. 手机开启开发者模式,打开 USB 调试开关。
2. 用 USB 连接手机,推荐选择 传输文件 选项,不要选择 仅充电 选项
3. 确认手机连接成功后,执行 npm run android 编译运行项目。
npm run android
1. 用 USB 连接手机,用 Xcode 打开工程的 ios 目录。
2. 按照 React Native 官网 running-on-device 配置签名信息。
3. 进入 ios 目录下安装依赖。
cd ios
pod install
4. 回退到根目录,执行 npm run ios 编译运行项目。
cd ../
npm run ios

交流与反馈

加入 Telegram 技术交流群组WhatsApp 交流群,享有专业工程师的支持,解决您的难题。

常见问题

运行时环境报错怎么办?

可以执行以下命令,进行环境诊断。
npx react-native doctor

帮助和支持

本页内容是否解决了您的问题?

填写满意度调查问卷,共创更好文档体验。

文档反馈