docs(sdk): 添加 React Native SDK 文档和 Android/HarmonyOS 发版脚本

- 新增 XuqmGroup React Native SDK 使用文档,包含安装、初始化、HTTP客户端、IM模块、推送模块、版本管理等功能说明
- 添加 Android Gradle 发版任务脚本,支持构建发布 APK 并上传到更新服务
- 添加 HarmonyOS hvigorw 发版任务脚本,支持 HAP 包构建和上传功能
- 实现多平台版本检查、自动重连、灰度发布等发版流程自动化
- 集成商店提交、定时发布、Webhook 回调等发布后处理功能
这个提交包含在:
XuqmGroup 2026-04-29 17:35:52 +08:00
父节点 67d54bf1f2
当前提交 7d63672a7a
共有 6 个文件被更改,包括 49 次插入45 次删除

查看文件

@ -1,14 +1,22 @@
# XuqmGroup React Native SDK 文档 # XuqmGroup React Native SDK 文档
> TypeScript · React Native 0.76+ · 发布至 Nexus npm > 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 ```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 # 依赖安装peerDependencies
npm install @react-native-async-storage/async-storage npm install @react-native-async-storage/async-storage
@ -37,7 +45,7 @@ XuqmGroup-RNSDK/src/
### 1. 初始化App 入口) ### 1. 初始化App 入口)
```typescript ```typescript
import { XuqmSDK } from '@xuqm/rn-sdk' import { XuqmSDK } from '@xuqm/rn-common'
await XuqmSDK.init({ await XuqmSDK.init({
appKey: 'ak_your_app_key', appKey: 'ak_your_app_key',
@ -60,11 +68,14 @@ Token 持久化存储于 `AsyncStorage`,App 重启后自动恢复。
## HTTP 客户端 ## HTTP 客户端
```typescript ```typescript
import { http } from '@xuqm/rn-sdk' import { apiRequest } from '@xuqm/rn-common'
// 自动附加 Bearer Token // 自动附加 Bearer Token
const data = await http.get<UserInfo>('/api/user/profile') const data = await apiRequest<UserInfo>('/api/user/profile')
const result = await http.post<LoginResp>('/api/auth/login', { account, password }) const result = await apiRequest<LoginResp>('/api/auth/login', {
method: 'POST',
body: { account, password },
})
``` ```
--- ---
@ -74,7 +85,7 @@ const result = await http.post<LoginResp>('/api/auth/login', { account, password
### ImClient ### ImClient
```typescript ```typescript
import { ImClient, MsgType, ChatType } from '@xuqm/rn-sdk' import { ImClient, MsgType, ChatType } from '@xuqm/rn-im'
const im = new ImClient() const im = new ImClient()
@ -114,7 +125,7 @@ useEffect(() => {
```typescript ```typescript
import { useEffect, useState, useRef } from 'react' import { useEffect, useState, useRef } from 'react'
import { ImClient, ImMessage } from '@xuqm/rn-sdk' import { ImClient, ImMessage } from '@xuqm/rn-im'
export function useIm() { export function useIm() {
const [messages, setMessages] = useState<ImMessage[]>([]) const [messages, setMessages] = useState<ImMessage[]>([])
@ -182,7 +193,7 @@ enum MsgType {
## 推送模块 ## 推送模块
```typescript ```typescript
import { PushSDK } from '@xuqm/rn-sdk' import { PushSDK } from '@xuqm/rn-push'
// 在获取到设备推送 Token 后调用(如小米、华为推送回调) // 在获取到设备推送 Token 后调用(如小米、华为推送回调)
await PushSDK.registerToken({ await PushSDK.registerToken({
@ -200,7 +211,7 @@ await PushSDK.registerToken({
### 检查 App 更新 ### 检查 App 更新
```typescript ```typescript
import { UpdateSDK } from '@xuqm/rn-sdk' import { UpdateSDK } from '@xuqm/rn-update'
const result = await UpdateSDK.checkAppUpdate({ const result = await UpdateSDK.checkAppUpdate({
appId: 'ak_xxx', appId: 'ak_xxx',

查看文件

@ -7,6 +7,7 @@
"react-native": "src/index.ts", "react-native": "src/index.ts",
"types": "src/index.ts", "types": "src/index.ts",
"private": true, "private": true,
"files": ["src"],
"workspaces": ["packages/*"], "workspaces": ["packages/*"],
"publishConfig": { "publishConfig": {
"registry": "https://nexus.xuqinmin.com/repository/npm-hosted/" "registry": "https://nexus.xuqinmin.com/repository/npm-hosted/"
@ -20,7 +21,12 @@
"react-native": ">=0.76.0", "react-native": ">=0.76.0",
"@react-native-async-storage/async-storage": ">=1.21.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": { "devDependencies": {
"typescript": "^5.9.3", "typescript": "^5.9.3",
"@types/react": "^19.0.0", "@types/react": "^19.0.0",

查看文件

@ -11,8 +11,11 @@
"registry": "https://nexus.xuqinmin.com/repository/npm-hosted/" "registry": "https://nexus.xuqinmin.com/repository/npm-hosted/"
}, },
"scripts": { "typecheck": "tsc --noEmit" }, "scripts": { "typecheck": "tsc --noEmit" },
"peerDependencies": { "dependencies": {
"@xuqm/rn-common": ">=0.2.0", "@xuqm/rn-common": ">=0.2.0",
"@xuqm/rn-sdk": ">=0.2.0"
},
"peerDependencies": {
"@nozbe/watermelondb": ">=0.27.0", "@nozbe/watermelondb": ">=0.27.0",
"react-native": ">=0.76.0" "react-native": ">=0.76.0"
}, },

查看文件

@ -11,8 +11,11 @@
"registry": "https://nexus.xuqinmin.com/repository/npm-hosted/" "registry": "https://nexus.xuqinmin.com/repository/npm-hosted/"
}, },
"scripts": { "typecheck": "tsc --noEmit" }, "scripts": { "typecheck": "tsc --noEmit" },
"peerDependencies": { "dependencies": {
"@xuqm/rn-common": ">=0.2.0", "@xuqm/rn-common": ">=0.2.0",
"@xuqm/rn-sdk": ">=0.2.0"
},
"peerDependencies": {
"react-native": ">=0.76.0" "react-native": ">=0.76.0"
}, },
"devDependencies": { "devDependencies": {

查看文件

@ -11,8 +11,11 @@
"registry": "https://nexus.xuqinmin.com/repository/npm-hosted/" "registry": "https://nexus.xuqinmin.com/repository/npm-hosted/"
}, },
"scripts": { "typecheck": "tsc --noEmit" }, "scripts": { "typecheck": "tsc --noEmit" },
"peerDependencies": { "dependencies": {
"@xuqm/rn-common": ">=0.2.0", "@xuqm/rn-common": ">=0.2.0",
"@xuqm/rn-sdk": ">=0.2.0"
},
"peerDependencies": {
"react-native": ">=0.76.0", "react-native": ">=0.76.0",
"@react-native-async-storage/async-storage": ">=1.21.0" "@react-native-async-storage/async-storage": ">=1.21.0"
}, },

查看文件

@ -1,31 +1,9 @@
// @xuqm/rn-sdk — convenience meta-package re-exporting all modules. // @xuqm/rn-sdk — hidden core package.
// For tree-shaking and smaller bundles, import from individual packages: // App code should import @xuqm/rn-common directly; this package is installed
// @xuqm/rn-common | @xuqm/rn-im | @xuqm/rn-push | @xuqm/rn-update // transitively by @xuqm/rn-im / @xuqm/rn-push / @xuqm/rn-update.
export { XuqmSDK } from '../packages/common/src' export { XuqmSDK } from '@xuqm/rn-common'
export type { XuqmInitOptions, DeviceInfo } from '../packages/common/src' export type { XuqmInitOptions, DeviceInfo } from '@xuqm/rn-common'
export { getDeviceId, getDeviceInfo, detectPushVendor, setUserId, getUserId } from '../packages/common/src' export { getDeviceId, getDeviceInfo, detectPushVendor, setUserId, getUserId } from '@xuqm/rn-common'
export { ScaledImage } from '../packages/common/src' export { ScaledImage } from '@xuqm/rn-common'
export { apiRequest } from '@xuqm/rn-common'
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'