From 7d63672a7a768aa297498d121cdaae9d194cfa4c Mon Sep 17 00:00:00 2001 From: XuqmGroup Date: Wed, 29 Apr 2026 17:35:52 +0800 Subject: [PATCH] =?UTF-8?q?docs(sdk):=20=E6=B7=BB=E5=8A=A0=20React=20Nativ?= =?UTF-8?q?e=20SDK=20=E6=96=87=E6=A1=A3=E5=92=8C=20Android/HarmonyOS=20?= =?UTF-8?q?=E5=8F=91=E7=89=88=E8=84=9A=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 XuqmGroup React Native SDK 使用文档,包含安装、初始化、HTTP客户端、IM模块、推送模块、版本管理等功能说明 - 添加 Android Gradle 发版任务脚本,支持构建发布 APK 并上传到更新服务 - 添加 HarmonyOS hvigorw 发版任务脚本,支持 HAP 包构建和上传功能 - 实现多平台版本检查、自动重连、灰度发布等发版流程自动化 - 集成商店提交、定时发布、Webhook 回调等发布后处理功能 --- README.md | 33 ++++++++++++++++++++----------- package.json | 8 +++++++- packages/im/package.json | 5 ++++- packages/push/package.json | 5 ++++- packages/update/package.json | 5 ++++- src/index.ts | 38 ++++++++---------------------------- 6 files changed, 49 insertions(+), 45 deletions(-) diff --git a/README.md b/README.md index 54332ee..d3ce6a1 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,22 @@ # XuqmGroup React Native SDK 文档 > TypeScript · React Native 0.76+ · 发布至 Nexus npm +> `rn-sdk` 为内部基础包,业务方正常接入时使用 `rn-common` 和各业务模块即可。 ## 安装 +`rn-common` 可以独立使用;`rn-im` / `rn-push` / `rn-update` 会自动带上 `rn-common` 和 `rn-sdk`;`rn-sdk` 是内部基础包,不建议业务方直接引用。 + ```bash -# .npmrc 已配置私有 registry,直接安装 -npm install @xuqm/rn-sdk +# 基础能力 +npm install @xuqm/rn-common # 或 -yarn add @xuqm/rn-sdk +yarn add @xuqm/rn-common + +# 单独接入某个业务模块时,`rn-common` 会作为依赖自动安装 +npm install @xuqm/rn-im +npm install @xuqm/rn-push +npm install @xuqm/rn-update # 依赖安装(peerDependencies) npm install @react-native-async-storage/async-storage @@ -37,7 +45,7 @@ XuqmGroup-RNSDK/src/ ### 1. 初始化(App 入口) ```typescript -import { XuqmSDK } from '@xuqm/rn-sdk' +import { XuqmSDK } from '@xuqm/rn-common' await XuqmSDK.init({ appKey: 'ak_your_app_key', @@ -60,11 +68,14 @@ Token 持久化存储于 `AsyncStorage`,App 重启后自动恢复。 ## HTTP 客户端 ```typescript -import { http } from '@xuqm/rn-sdk' +import { apiRequest } from '@xuqm/rn-common' // 自动附加 Bearer Token -const data = await http.get('/api/user/profile') -const result = await http.post('/api/auth/login', { account, password }) +const data = await apiRequest('/api/user/profile') +const result = await apiRequest('/api/auth/login', { + method: 'POST', + body: { account, password }, +}) ``` --- @@ -74,7 +85,7 @@ const result = await http.post('/api/auth/login', { account, password ### ImClient ```typescript -import { ImClient, MsgType, ChatType } from '@xuqm/rn-sdk' +import { ImClient, MsgType, ChatType } from '@xuqm/rn-im' const im = new ImClient() @@ -114,7 +125,7 @@ useEffect(() => { ```typescript import { useEffect, useState, useRef } from 'react' -import { ImClient, ImMessage } from '@xuqm/rn-sdk' +import { ImClient, ImMessage } from '@xuqm/rn-im' export function useIm() { const [messages, setMessages] = useState([]) @@ -182,7 +193,7 @@ enum MsgType { ## 推送模块 ```typescript -import { PushSDK } from '@xuqm/rn-sdk' +import { PushSDK } from '@xuqm/rn-push' // 在获取到设备推送 Token 后调用(如小米、华为推送回调) await PushSDK.registerToken({ @@ -200,7 +211,7 @@ await PushSDK.registerToken({ ### 检查 App 更新 ```typescript -import { UpdateSDK } from '@xuqm/rn-sdk' +import { UpdateSDK } from '@xuqm/rn-update' const result = await UpdateSDK.checkAppUpdate({ appId: 'ak_xxx', diff --git a/package.json b/package.json index 6802bba..693d8a7 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "react-native": "src/index.ts", "types": "src/index.ts", "private": true, + "files": ["src"], "workspaces": ["packages/*"], "publishConfig": { "registry": "https://nexus.xuqinmin.com/repository/npm-hosted/" @@ -20,7 +21,12 @@ "react-native": ">=0.76.0", "@react-native-async-storage/async-storage": ">=1.21.0" }, - "dependencies": {}, + "dependencies": { + "@xuqm/rn-common": ">=0.2.0", + "@xuqm/rn-im": ">=0.2.0", + "@xuqm/rn-push": ">=0.2.0", + "@xuqm/rn-update": ">=0.2.0" + }, "devDependencies": { "typescript": "^5.9.3", "@types/react": "^19.0.0", diff --git a/packages/im/package.json b/packages/im/package.json index 85b82e0..2cfe8c7 100644 --- a/packages/im/package.json +++ b/packages/im/package.json @@ -11,8 +11,11 @@ "registry": "https://nexus.xuqinmin.com/repository/npm-hosted/" }, "scripts": { "typecheck": "tsc --noEmit" }, - "peerDependencies": { + "dependencies": { "@xuqm/rn-common": ">=0.2.0", + "@xuqm/rn-sdk": ">=0.2.0" + }, + "peerDependencies": { "@nozbe/watermelondb": ">=0.27.0", "react-native": ">=0.76.0" }, diff --git a/packages/push/package.json b/packages/push/package.json index 6f1e940..f93aba8 100644 --- a/packages/push/package.json +++ b/packages/push/package.json @@ -11,8 +11,11 @@ "registry": "https://nexus.xuqinmin.com/repository/npm-hosted/" }, "scripts": { "typecheck": "tsc --noEmit" }, - "peerDependencies": { + "dependencies": { "@xuqm/rn-common": ">=0.2.0", + "@xuqm/rn-sdk": ">=0.2.0" + }, + "peerDependencies": { "react-native": ">=0.76.0" }, "devDependencies": { diff --git a/packages/update/package.json b/packages/update/package.json index 95445c4..261a059 100644 --- a/packages/update/package.json +++ b/packages/update/package.json @@ -11,8 +11,11 @@ "registry": "https://nexus.xuqinmin.com/repository/npm-hosted/" }, "scripts": { "typecheck": "tsc --noEmit" }, - "peerDependencies": { + "dependencies": { "@xuqm/rn-common": ">=0.2.0", + "@xuqm/rn-sdk": ">=0.2.0" + }, + "peerDependencies": { "react-native": ">=0.76.0", "@react-native-async-storage/async-storage": ">=1.21.0" }, diff --git a/src/index.ts b/src/index.ts index 3efe123..dae4e4b 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,31 +1,9 @@ -// @xuqm/rn-sdk — convenience meta-package re-exporting all modules. -// For tree-shaking and smaller bundles, import from individual packages: -// @xuqm/rn-common | @xuqm/rn-im | @xuqm/rn-push | @xuqm/rn-update +// @xuqm/rn-sdk — hidden core package. +// App code should import @xuqm/rn-common directly; this package is installed +// transitively by @xuqm/rn-im / @xuqm/rn-push / @xuqm/rn-update. -export { XuqmSDK } from '../packages/common/src' -export type { XuqmInitOptions, DeviceInfo } from '../packages/common/src' -export { getDeviceId, getDeviceInfo, detectPushVendor, setUserId, getUserId } from '../packages/common/src' -export { ScaledImage } from '../packages/common/src' - -export { ImSDK } from '../packages/im/src' -export { ImClient } from '../packages/im/src' -export { uploadFile } from '../packages/im/src' -export { listFriends, addFriend, removeFriend, editMessage } from '../packages/im/src' -export type { - ImMessage, ImGroup, ChatType, MsgType, MsgStatus, - ImEventListener, SendMessageParams, - ConversationData, - HistoryQuery, - PageResult, - FriendRequest, - GroupJoinRequest, - BlacklistEntry, - MessageSearchParams, - UploadResult, -} from '../packages/im/src' - -export { PushSDK } from '../packages/push/src' -export type { PushVendor } from '../packages/push/src' - -export { UpdateSDK } from '../packages/update/src' -export type { PluginMeta, AppUpdateInfo, RnUpdateInfo, CachedRnBundle } from '../packages/update/src' +export { XuqmSDK } from '@xuqm/rn-common' +export type { XuqmInitOptions, DeviceInfo } from '@xuqm/rn-common' +export { getDeviceId, getDeviceInfo, detectPushVendor, setUserId, getUserId } from '@xuqm/rn-common' +export { ScaledImage } from '@xuqm/rn-common' +export { apiRequest } from '@xuqm/rn-common'