React Native 适配器
概览
React Native 适配器是云开发为 React Native / Expo 框架提供的专用适配器,让开发者能够在 React Native 项目中无缝使用云开发的完整功能。通过该适配器,您可以轻松实现移动端的云端数据存储、用户认证、文件管理和云函数调用等。
支持平台
目前已适配以下平台:
- iOS 13+
- Android 6+
环境要求
- Node.js >= 18
- React Native 0.76+
- Expo SDK 52+
效果展示
完整示例项目请参考:CloudBase React Native Demo




安装
使用 npm 安装:
npm install @cloudbase/js-sdk @cloudbase/adapter-rn react-native-mmkv
注意
react-native-mmkv 用于高性能持久化存储,建议使用 v3.x 版本,v4.x 需要 NitroModules 配置较复杂。
iOS 原生依赖
cd ios && pod install && cd ..
快速开始
适配器配置
import cloudbase from "@cloudbase/js-sdk";
import adapter from "@cloudbase/adapter-rn";
// 注册适配器
cloudbase.useAdapters(adapter);
const app = cloudbase.init({
env: "your-env-id", // 替换为您的环境 ID
region: "ap-shanghai", // 地域
accekey: "your-app-access-key", // Publishable Key
});
export default app;
重要提示
adapter必须在cloudbase.init()之前调用
图形验证码机制说明
在某些安全敏感的操作场景下(如用户登录),腾讯云开发会要求进行图形验证码验证。适配器内部已集成验证码处理流程:
captchaOptions: {
openURIWithCallback: async (url: string): Promise<CaptchaToken> => {
const urlObj = new URL(url);
const captchaData = urlObj.searchParams.get("captcha_data") || "";
const state = urlObj.searchParams.get("state") || "";
const token = urlObj.searchParams.get("token") || "";
return new Promise((resolve) => {
if (captchaHandler) {
captchaHandler({ captchaData, state, token, resolve });
} else {
console.warn("No captcha handler registered");
resolve({ error: "no_handler" } as any);
}
});
},
}
开发者需注册验证码处理器,参考 图形验证码处理流程:
import { setCaptchaHandler } from '@cloudbase/adapter-rn';
setCaptchaHandler(async ({ captchaData, state, token, resolve }) => {
// 显示 captchaData (Base64编码的验证码图片) 给用户
// 用户输入验证码后调用 verifyCaptchaData 校验
const captchaToken = await auth.verifyCaptchaData({ token, key: "user-input-captcha-key" });
resolve(captchaToken);
});
项目结构
主要依赖
| 依赖 | 版本 | 说明 |
|---|---|---|
| @cloudbase/js-sdk | ^2.24.9 | 腾讯云开发 SDK |
| @cloudbase/adapter-rn | ^1.0.0 | React Native 适配器 |
| react-native-mmkv | ^3.3.3 | 高性能持久化存储 |
常见问题
Q: 为什么要在 init 之前调用 useAdapters?
A: 适配器需要在 SDK 初始化之前注册,以确保 SDK 能够正确识别当前运行环境并使用相应的适配器。
Q: 为什么推荐使用 react-native-mmkv v3.x?
A: v4.x 版本需要 NitroModules 配置,配置较为复杂。v3.x 版本配置简单,性能稳定。
Q: 文件上传为什么需要使用 base64 编码?
A: React Native 环境下,文件系统访问与 Web 环境不同,使用 base64 编码是最兼容的方式。上传时需设置 contentEncoding: 'base64'。