- Android: correct version header 0.5.x→0.4.x, add sdk-license to module table, update artifact versions to 0.4.10 - iOS: correct min version iOS 14→16, bump version to 0.2.0, update SPM ref to from: "0.2.0" - RN: fix version 0.3.x→0.2.x, standardize npm registry URL, add @xuqm/rn-license to module table - Flutter: update git ref to v0.2.2, add xuqm_flutter_license to module tables - Add new docs: ios/license, rn/push, rn/license, flutter/push, flutter/update, flutter/license - tenant-platform: make appKey a computed ref in Push/VersionManagementView to fix service gating reactivity on route change - tenant-platform: add requestActivation API endpoint - tenant-platform: add IM service gating UI (checkServiceEnabled + activation dialog) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
139 行
3.0 KiB
Markdown
139 行
3.0 KiB
Markdown
# React Native 推送接入指南
|
||
|
||
**包名**:`@xuqm/rn-push` · **支持**:华为、小米、OPPO、vivo、荣耀、APNs(iOS)
|
||
|
||
---
|
||
|
||
## 1. 安装
|
||
|
||
```bash
|
||
yarn add @xuqm/rn-push
|
||
```
|
||
|
||
iOS 需要执行 `pod install`:
|
||
|
||
```bash
|
||
cd ios && pod install
|
||
```
|
||
|
||
---
|
||
|
||
## 2. Android 厂商推送集成
|
||
|
||
各厂商推送 SDK 需在原生 Android 层集成。在 `android/app/build.gradle` 中按需添加:
|
||
|
||
```gradle
|
||
dependencies {
|
||
// 华为 HMS Push
|
||
implementation 'com.huawei.hms:push:6.9.0.300'
|
||
// 小米 Push
|
||
implementation 'com.xiaomi.mipush:sdk:5.0.6'
|
||
// OPPO Push
|
||
implementation 'com.heytap.msp:push:3.5.0'
|
||
// vivo Push
|
||
implementation 'com.vivo.push:sdk:3.0.0.4_484'
|
||
// 荣耀 Push
|
||
implementation 'com.hihonor.mcs:push:7.0.41.301'
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 3. 请求原生推送权限并注册
|
||
|
||
```ts
|
||
import { PushSDK } from '@xuqm/rn-push'
|
||
|
||
// 触发原生推送注册(Android 请求厂商 token;iOS 请求 APNs 权限)
|
||
await PushSDK.requestNativeRegistration()
|
||
```
|
||
|
||
---
|
||
|
||
## 4. 监听推送 Token
|
||
|
||
```ts
|
||
import { PushSDK } from '@xuqm/rn-push'
|
||
|
||
// 在 App 启动时监听 token 回调,并向服务端注册
|
||
const unsubscribe = PushSDK.onPushToken(async (token, vendor) => {
|
||
console.log('获取到 Token:', token, '厂商:', vendor)
|
||
// 登录后调用注册接口
|
||
await PushSDK.setDeviceToken(token, vendor as PushVendor)
|
||
})
|
||
|
||
// 在组件卸载时取消监听
|
||
unsubscribe()
|
||
```
|
||
|
||
---
|
||
|
||
## 5. 手动注册 Token
|
||
|
||
```ts
|
||
import { PushSDK } from '@xuqm/rn-push'
|
||
import type { PushVendor } from '@xuqm/rn-push'
|
||
|
||
// 登录成功后,将 token 注册到服务端
|
||
await PushSDK.registerToken('user_001', 'device_token_here', 'HUAWEI')
|
||
```
|
||
|
||
---
|
||
|
||
## 6. 登出时注销 Token
|
||
|
||
```ts
|
||
await PushSDK.unregisterToken('user_001')
|
||
// 或简写
|
||
await PushSDK.logout('user_001')
|
||
```
|
||
|
||
---
|
||
|
||
## 7. 多模块统一登录
|
||
|
||
Push 模块与 IM、Update 模块共享同一套登录态:
|
||
|
||
```ts
|
||
import { XuqmSDK } from '@xuqm/rn-common'
|
||
import { PushSDK } from '@xuqm/rn-push'
|
||
|
||
await XuqmSDK.initialize({ appKey: 'your_app_key' })
|
||
await XuqmSDK.login({ userId: 'user_001', userSig: 'your_user_sig' })
|
||
// ↓ 登录后调用 PushSDK.initialize() 完成 token 注册
|
||
await PushSDK.initialize('user_001')
|
||
```
|
||
|
||
---
|
||
|
||
## 8. iOS APNs 配置
|
||
|
||
在 `AppDelegate.m` 或 `AppDelegate.swift` 中:
|
||
|
||
```objc
|
||
// AppDelegate.m
|
||
- (void)application:(UIApplication *)application
|
||
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
|
||
// 转发 token,由 rn-push 原生模块处理
|
||
[RCTEventEmitter ...] // 通过 Bridge 传至 JS
|
||
}
|
||
```
|
||
|
||
> 使用 `PushSDK.requestNativeRegistration()` 会自动触发 iOS APNs 注册流程,无需额外原生代码(前提是 RN 0.76+ 自动链接)。
|
||
|
||
---
|
||
|
||
## 9. 厂商渠道自动检测
|
||
|
||
`@xuqm/rn-common` 的 `detectPushVendor` 会根据 `device.brand` 自动识别厂商:
|
||
|
||
| 品牌关键字 | 识别厂商 |
|
||
|-----------|---------|
|
||
| xiaomi / redmi | XIAOMI |
|
||
| huawei | HUAWEI |
|
||
| honor | HONOR |
|
||
| oppo / realme | OPPO |
|
||
| vivo / iqoo | VIVO |
|
||
| iOS | APNS |
|
||
| 其他 | FCM |
|