# im_pro_native **Repository Path**: yuefb/im_pro_native ## Basic Information - **Project Name**: im_pro_native - **Description**: rectNative 代码 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-14 - **Last Updated**: 2026-08-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RainbowRN · im_pro_native > 双端共享的 React Native 代码仓库(RN 0.80.3 + TypeScript)。 > 同时服务 `im_rain_android`(原生 Android)与 `rainbow-chat-i`(原生 iOS),一份 JS 代码两处复用。 > 本仓库可**独立运行**(RN 模板壳 + mock 数据),也可**嵌入**两个原生工程(真实 IM 数据)。 ## 快速开始(独立运行) ```bash # 首次 npm install # 类型检查 / 单测 / lint npx tsc --noEmit npm test npm run lint # 模拟器运行(需 Metro) npm run android # 或先 npm start 再另开终端执行 ``` 模拟器启动后可见 4 个 Tab:**会话 / 通讯录 / 我的 / 桥接调试**。 ## 目录结构 ``` src/ # 共享 TS 代码(两个原生工程复用的核心) ├── App.tsx # 入口:底部 4 Tab + 新消息横幅 ├── bridge/ # 桥接兼容层(核心) │ ├── types.ts # 桥接协议数据类型 │ ├── RainbowBridge.ts # 能力探测 + standalone 回退(嵌入原生走原生,独立运行走 mock) │ ├── RainbowEvents.ts # NativeEventEmitter 事件订阅(onNewMessage 等) │ └── LocalEventEmitter.ts ├── logic/ # 纯 JS 业务逻辑(可单测、双端一致) ├── mock/ # 独立运行模式 mock 数据 └── screens/ # 会话列表 / 通讯录 / 我的 / 桥接调试 native/ ├── android/ # 桥接参考实现(拷入 im_rain_android 用,含 TODO 替换点) └── ios/ # 桥接参考实现(拷入 rainbow-chat-i 用) scripts/build-bundles.sh # 生成双端 JS bundle docs/ # 整合方案 + Android/iOS 接入文档 android/ ios/ # RN 0.80.3 模板壳(仅独立调试用) ``` ## 桥接协议 JS 通过 `NativeModules.RainbowBridge` 访问原生能力(`src/bridge/RainbowBridge.ts`): | 方向 | API / 事件 | 说明 | |---|---|---| | JS→Native | `getAppInfo()` | appId / 平台 / 版本 / 是否嵌入 | | JS→Native | `getLoginUser()` | 当前登录用户 | | JS→Native | `getServerConfig()` | 服务器地址 / 端口 / 登录状态 | | JS→Native | `getSessionList()` / `getContactList()` | 会话 / 通讯录 | | JS→Native | `showNativeToast(title, msg)` | 原生提示 | | JS→Native | `openNativePage(pageKey, params)` | 跳转原生页面 | | Native→JS | `onNewMessage` | 新消息推送 → 未读角标 + 顶部横幅实时更新 | | Native→JS | `onLoginStateChanged` | 登录状态变化 | 嵌入原生时桥模块存在 → 走原生实现;独立运行时桥模块缺失 → 自动回退 mock + Alert。**业务代码无分支**。 ## 打包双端 bundle ```bash ./scripts/build-bundles.sh --release ``` 产物: - `android/app/src/main/assets/index.android.bundle` → 拷入 `im_rain_android` - `main.jsbundle` → 拷入 `rainbow-chat-i` ## 接入原生工程 - 总方案:`docs/01-integration-plan.md` - Android(im_rain_android):`docs/02-android-integration.md` - iOS(rainbow-chat-i):`docs/03-ios-integration.md` > ⚠️ 接入要求三个仓库保持 `im_mobile/` 同级目录布局;Android 侧需 `compileSdk 35 / minSdk 24 / targetSdk 35`(minSdk 提升会放弃 Android 7.0 以下设备,属业务决策点)。