XuqmGroup-RNSDK/docs/PushSDK-厂商集成.md
XuqmGroup 07b08a4f5a feat: T-B01~B04 — XuqmBundleModule + onProgress + JSBridge/厂商文档
T-B01: XuqmBundleModule 原生模块
- Android: XuqmBundleModule.java(文件读写/manifest/路径)
- iOS: XuqmBundleModule.m(对应实现)
- JS: NativeBundle.ts 封装
- 注册到 XuqmUpdatePackage

T-B02: downloadPluginBundle 添加 onProgress
- 使用 ReadableStream 实现下载进度追踪
- checkAndCachePlugin 同步支持 onProgress

T-B03: XWebView JSBridge 标准接口文档
- docs/XWebView-JSBridge.md
- H5→RN 消息协议 / RN→H5 通信
- 下载处理 / Dialog 覆盖 / 标准 Bridge 接口

T-B04: PushSDK Android 厂商集成文档
- docs/PushSDK-厂商集成.md
- 6 厂商配置步骤 / ProGuard 规则 / 调试指南
2026-06-15 02:36:11 +08:00

7.9 KiB

PushSDK Android 厂商推送集成指南

最后更新2026-06-15


概述

PushSDK 支持 Android 多厂商推送 SDK,通过反射机制自动检测设备厂商并调用对应的推送注册 API。宿主应用只需配置 AndroidManifest.xml 中的 meta-data,无需编写额外的 Java/Kotlin 代码。

支持的厂商

厂商 SDK 自动检测条件
华为 HMS Push (HmsInstanceId) Build.MANUFACTURER == "HUAWEI"
小米 MiPush (MiPushClient) Build.MANUFACTURER == "XIAOMI" | "REDMI"
OPPO Heytap Push (PushManager) Build.MANUFACTURER == "OPPO" | "REALME"
vivo PushClient Build.MANUFACTURER == "VIVO" | "IQOO"
荣耀 HonorPush Build.MANUFACTURER == "HONOR"
Google FCM (FirebaseMessaging) 其他厂商
Apple APNs iOS 自动

一、集成步骤

1.1 添加依赖

宿主应用的 android/app/build.gradle

dependencies {
    // 华为 HMS Push可选
    implementation 'com.huawei.hms:push:6.12.0.300'
    
    // 小米 MiPush可选
    implementation 'com.xiaomi.mipush:mipush-sdk:5.9.9'
    
    // OPPO Heytap Push可选
    implementation 'com.heytap.mcssdk:mcssdk:3.0.2'
    
    // vivo Push可选
    implementation 'com.vivo.push:push:3.0.0.4'
    
    // 荣耀 Push可选
    implementation 'com.hihonor.push:honor-push:7.0.3.300'
    
    // Google FCM推荐作为兜底
    implementation 'com.google.firebase:firebase-messaging:23.4.0'
}

注意只需添加目标设备对应的依赖。PushSDK 通过反射调用,不添加对应依赖时该厂商注册会静默跳过。

1.2 配置 AndroidManifest.xml

android/app/src/main/AndroidManifest.xml<application> 标签内添加 meta-data

<application>
    <!-- 小米 MiPush -->
    <meta-data
        android:name="XUQM_XIAOMI_APP_ID"
        android:value="@string/xiaomi_app_id" />
    <meta-data
        android:name="XUQM_XIAOMI_APP_KEY"
        android:value="@string/xiaomi_app_key" />
    
    <!-- OPPO Heytap Push -->
    <meta-data
        android:name="XUQM_OPPO_APP_KEY"
        android:value="@string/oppo_app_key" />
    <meta-data
        android:name="XUQM_OPPO_APP_SECRET"
        android:value="@string/oppo_app_secret" />
    
    <!-- 华为 HMS Push从 agconnect-services.json 自动读取,无需额外配置) -->
    
    <!-- vivo Push从 AndroidManifest 自动读取,无需额外配置) -->
    
    <!-- 荣耀 Push从 AndroidManifest 自动读取,无需额外配置) -->
    
    <!-- FCM从 google-services.json 自动读取,无需额外配置) -->
</application>

android/app/src/main/res/values/strings.xml 中添加:

<resources>
    <!-- 小米 -->
    <string name="xiaomi_app_id">YOUR_XIAOMI_APP_ID</string>
    <string name="xiaomi_app_key">YOUR_XIAOMI_APP_KEY</string>
    
    <!-- OPPO -->
    <string name="oppo_app_key">YOUR_OPPO_APP_KEY</string>
    <string name="oppo_app_secret">YOUR_OPPO_APP_SECRET</string>
</resources>

1.3 华为 HMS 配置

华为推送需要 agconnect-services.json 文件:

  1. 华为开发者联盟 创建应用
  2. 下载 agconnect-services.json
  3. 放置到 android/app/ 目录

1.4 Google FCM 配置

FCM 需要 google-services.json 文件:

  1. Firebase Console 创建项目
  2. 下载 google-services.json
  3. 放置到 android/app/ 目录
  4. 确保 android/build.gradle 添加了 Google Services 插件:
buildscript {
    dependencies {
        classpath 'com.google.gms:google-services:4.4.0'
    }
}

二、工作流程

App 启动
  → PushSDK.onPushToken(callback)    ← 注册监听器
  → PushSDK.requestNativeRegistration()
    → XuqmPushModule.registerPush()
      → 检测厂商 (detectVendor)
      → 调用对应厂商 SDK 注册
      → 厂商 SDK 返回 token
      → emitToken(token, vendor)     ← 通过事件发送给 JS
  → callback(token, vendor) 被调用
    → PushSDK.setDeviceToken(token, vendor)
      → 注册到服务器

用户登录
  → PushSDK.initialize(userId)
    → 将 pending token 绑定到 userId

用户登出
  → PushSDK.logout(userId)
    → 从服务器注销 token

三、厂商 SDK 详细说明

3.1 华为 HMS Push

注册方式HmsInstanceId.getInstance(context).getToken(appId, "HCM")

AppID 来源AGConnectServicesConfig.fromContext(context).getString("client/app_id")

Token 事件HMS 6.x 版本 token 通过 getToken() 同步返回。如果返回空,需要实现 HmsMessageService.onNewToken() 异步接收。

ProGuard 规则

-keep class com.huawei.hms.** { *; }
-dontwarn com.huawei.hms.**

3.2 小米 MiPush

注册方式MiPushClient.registerPush(context, appId, appKey)

配置来源AndroidManifest.xml 中的 XUQM_XIAOMI_APP_IDXUQM_XIAOMI_APP_KEY

Token 事件:通过 MiPushMessageReceiver.onReceiveRegisterResult() 回调。PushSDK 通过反射监听。

ProGuard 规则

-keep class com.xiaomi.mipush.** { *; }
-dontwarn com.xiaomi.mipush.**

3.3 OPPO Heytap Push

注册方式PushManager.getInstance().register(context, appKey, appSecret, pushCallback)

配置来源AndroidManifest.xml 中的 XUQM_OPPO_APP_KEYXUQM_OPPO_APP_SECRET

Token 事件:通过 PushCallback.onRegister(regId) 回调。PushSDK 使用 Proxy.newProxyInstance 动态代理。

ProGuard 规则

-keep class com.heytap.mcssdk.** { *; }
-dontwarn com.heytap.mcssdk.**

3.4 vivo Push

注册方式PushClient.getInstance().initialize(context)

配置来源AndroidManifest.xml 中的 com.vivo.push.api_keycom.vivo.push.app_id

Token 事件:通过 PushClientReceiver.onReceiveRegId() 回调。

ProGuard 规则

-keep class com.vivo.push.** { *; }
-dontwarn com.vivo.push.**

3.5 荣耀 Honor Push

注册方式HonorPushClient.getInstance().getToken()

配置来源AndroidManifest.xml 中的 com.hihonor.push.app_id

Token 事件:通过 HonorPushService.onNewToken() 回调。

ProGuard 规则

-keep class com.hihonor.push.** { *; }
-dontwarn com.hihonor.push.**

3.6 Google FCM

注册方式FirebaseMessaging.getInstance().getToken()

配置来源google-services.json

Token 事件:通过 FirebaseMessagingService.onNewToken() 回调。

ProGuard 规则

-keep class com.google.firebase.** { *; }
-dontwarn com.google.firebase.**

四、iOS APNs 配置

iOS 推送使用原生 APNs,无需额外 SDK 依赖。

// ios/YourApp/AppDelegate.mm
#import <UserNotifications/UserNotifications.h>

- (void)application:(UIApplication *)application
    didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    // PushSDK 自动处理
}

在 Xcode 中:

  1. 打开 Capabilities → Push Notifications
  2. 启用 Push Notifications
  3. 配置 APNs Auth Key在 Apple Developer Portal

五、调试

5.1 检查厂商检测

import { PushSDK } from '@xuqm/rn-push';
// 或通过 NativeModules
const vendor = await NativeModules.XuqmPushModule.detectVendor();
console.log('Detected vendor:', vendor);

5.2 检查 Token 注册

PushSDK.onPushToken((token, vendor) => {
  console.log('Push token:', token);
  console.log('Vendor:', vendor);
});

await PushSDK.requestNativeRegistration();

5.3 常见问题

问题 原因 解决方案
Token 为空 厂商 SDK 未正确配置 检查 meta-data / json 文件
注册失败 网络问题或 SDK 版本不兼容 检查 Logcat 错误日志
华为 token 获取失败 HMS Core 版本过低 更新 HMS Core 到最新版
小米注册无反应 appId/appKey 错误 检查 strings.xml 配置