> For the complete documentation index, see [llms.txt](https://dtsupport.gitbook.io/xg-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://dtsupport.gitbook.io/xg-docs/migration_guide/android_migration_guide.md).

# Android 迁移指南

为保障迁移后的正常使用，请您升级至 Android V1.1.5.4 及以上版本，以下是针对从信鸽免费版本 4.x 版本迁移到腾讯云 Android V1.1.5.4 及以上版本的变更说明。

## 自动集成方式

### 依赖变更

在【app build.gradle】>【dependencies】下，请将以下信鸽 4.x 版本依赖做相应变更。

变更前：

```
implementation 'com.tencent.xinge:xinge:4.3.5-release'
implementation 'com.tencent.wup:wup:1.0.0.E-Release'
implementation 'com.tencent.mid:mid:4.0.7-Release'
```

变更后：

```
// TPNS 推送 [VERSION] 为当前SDK版本号，版本号可在SDK下载页查看
implementation 'com.tencent.tpns:tpns:[VERSION]-release'
```

### 组件变更

若监听消息自行继承过 XGBaseReceiver 接口类，请在 AndroidManifest 文件下，将该自定义组件注册内容做相应变更。

变更前：

```
<receiver android:name="完整包名.MessageReceiver"
    android:exported="true" >
    <intent-filter>
        <!-- 接收消息透传 -->
        <action android:name="com.tencent.android.tpush.action.PUSH_MESSAGE" />
        <!-- 监听注册、反注册、设置/删除标签、通知被点击等处理结果 -->
        <action android:name="com.tencent.android.tpush.action.FEEDBACK" />
    </intent-filter>
</receiver>
```

变更后：

```
<receiver android:name="完整包名.MessageReceiver">
  <intent-filter>
      <!-- 接收消息透传 -->
      <action android:name="com.tencent.android.xg.vip.action.PUSH_MESSAGE" />
      <!-- 监听注册、反注册、设置/删除标签、通知被点击等处理结果 -->
      <action android:name="com.tencent.android.xg.vip.action.FEEDBACK" />
  </intent-filter>
</receiver>
```

> 因 XGBaseReceiver 接口类中有方法名变更和接口新增，请注意修改、新增实现对应接口。详情请参见 [接口变更说明](https://cloud.tencent.com/document/product/548/40215#.E6.8E.A5.E5.8F.A3.E5.8F.98.E6.9B.B4)。

## 手动集成方式

### 依赖包变更

请前往 [腾讯移动推送控制台](https://console.cloud.tencent.com/tpns/sdkdownload)，下载 Android SDK 压缩包、解压并按照以下步骤替换依赖包文件：

* 删除信鸽 4.x 版本所使用的全部 .jar 文件，使用 libs 目录下的所有 .jar 文件替换。
* 删除信鸽 4.x 版本所使用的全部 .so 文件，在 Other-Platform-SO 目录下，按照当前 .so 支持的平台添加 .so 文件。

### AndroidManifest 文件变更

1. 在 Android 配置文件 AndroidManifest.xml 中，删除所有信鸽 4.x 版本使用组件和权限，删除内容具体如下：

   ```
   <application>
    <!-- 【必须】 信鸽receiver广播接收 -->
    <receiver android:name="com.tencent.android.tpush.XGPushReceiver"
        android:process=":xg_service_v4" >
        <intent-filter android:priority="0x7fffffff" >
            <!-- 【必须】 信鸽SDK的内部广播 -->
            <action android:name="com.tencent.android.tpush.action.SDK" />
            <action android:name="com.tencent.android.tpush.action.INTERNAL_PUSH_MESSAGE" />
            <!-- 【必须】 系统广播：开屏和网络切换 -->
            <action android:name="android.intent.action.USER_PRESENT" />
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
            <!-- 【可选】 一些常用的系统广播，增强信鸽service的复活机会，请根据需要选择。当然，您也可以添加APP自定义的一些广播让启动service -->
            <action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
            <action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
            <action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
        </intent-filter>
    </receiver>
    <!-- 【可选】APP实现的Receiver，用于接收消息透传和操作结果的回调，请根据需要添加 -->
    <!-- YOUR_PACKAGE_PATH.CustomPushReceiver需要改为自己的Receiver： -->
    <receiver android:name="com.qq.xgdemo.receiver.MessageReceiver"
        android:exported="true" >
        <intent-filter>
            <!-- 接收消息透传 -->
            <action android:name="com.tencent.android.tpush.action.PUSH_MESSAGE" />
            <!-- 监听注册、反注册、设置/删除标签、通知被点击等处理结果 -->
            <action android:name="com.tencent.android.tpush.action.FEEDBACK" />
        </intent-filter>
    </receiver>
    <!-- 【注意】 如果被打开的activity是启动模式为SingleTop，SingleTask或SingleInstance，请根据通知的异常自查列表第8点处理-->
    <activity
        android:name="com.tencent.android.tpush.XGPushActivity"
        android:exported="false" >
            <intent-filter>
            <!-- 若使用AndroidStudio，请设置android:name="android.intent.action"-->
            <action android:name="" />
            </intent-filter>
    </activity>

    <!-- 【必须】 信鸽service -->
    <service
        android:name="com.tencent.android.tpush.service.XGPushServiceV4"
        android:exported="true"
        android:persistent="true"
        android:process=":xg_service_v4" />
    <!-- 云控相关 -->
    <receiver android:name="com.tencent.android.tpush.cloudctr.network.CloudControlDownloadReceiver">
        <intent-filter>
        <action android:name="com.tencent.android.xg.vip.action.cloudcontrol.action.DOWNLOAD_FILE_FINISH" />
        </intent-filter>
        </receiver>
    <service android:name="com.tencent.android.tpush.cloudctr.network.CloudControlDownloadService" />
    <!-- 【必须】 提高service的存活率 -->
    <service
        android:name="com.tencent.android.tpush.rpc.XGRemoteService"
        android:exported="true">
            <intent-filter>
            <!-- 【必须】 请修改为当前APP包名 .PUSH_ACTION, 如demo的包名为：com.qq.xgdemo -->
            <action android:name="当前应用的包名.PUSH_ACTION" />
        </intent-filter>
    </service>

    <!-- 【必须】 【注意】authorities修改为 包名.AUTH_XGPUSH, 如demo的包名为：com.qq.xgdemo-->
    <provider
        android:name="com.tencent.android.tpush.XGPushProvider"
        android:authorities="当前应用的包名.AUTH_XGPUSH"
        android:exported="true"/>
    <!-- 【必须】 【注意】authorities修改为 包名.TPUSH_PROVIDER, 如demo的包名为：com.qq.xgdemo-->
    <provider
        android:name="com.tencent.android.tpush.SettingsContentProvider"
        android:authorities="当前应用的包名.TPUSH_PROVIDER"
        android:exported="false" />
    <!-- 【必须】 【注意】authorities修改为 包名.TENCENT.MID.V4, 如demo的包名为：com.qq.xgdemo-->
    <provider
        android:name="com.tencent.mid.api.MidProvider"
        android:authorities="当前应用的包名.TENCENT.MID.V4"
        android:exported="true" >
    </provider>
    <!-- 【必须】 请将YOUR_ACCESS_ID修改为APP的AccessId，“21”开头的10位数字，中间没空格 -->
    <meta-data
        android:name="XG_V2_ACCESS_ID"
        android:value="YOUR_ACCESS_ID" />
    <!-- 【必须】 请将YOUR_ACCESS_KEY修改为APP的AccessKey，“A”开头的12位字符串，中间没空格 -->
    <meta-data
        android:name="XG_V2_ACCESS_KEY"
        android:value="YOUR_ACCESS_KEY" />
   </application>
   <!-- 【必须】 信鸽SDK所需权限 -->
   <uses-permission android:name="android.permission.INTERNET" />
   <uses-permission android:name="android.permission.READ_PHONE_STATE" />
   <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
   <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
   <uses-permission android:name="android.permission.WAKE_LOCK" />
   <uses-permission android:name="android.permission.VIBRATE" />
   <!-- 【常用】 信鸽SDK所需权限 -->
   <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
   <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
   <uses-permission android:name="android.permission.WRITE_SETTINGS" />
   <!-- 【可选】 信鸽SDK所需权限 -->
   <uses-permission android:name="android.permission.RESTART_PACKAGES" />
   <uses-permission android:name="android.permission.BROADCAST_STICKY" />
   <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
   <uses-permission android:name="android.permission.GET_TASKS" />
   <uses-permission android:name="android.permission.READ_LOGS" />
   <uses-permission android:name="android.permission.BLUETOOTH" />
   <uses-permission android:name="android.permission.BATTERY_STATS" />
   ```
2. 请参见新版本 [SDK 集成](https://cloud.tencent.com/document/product/548/36652) 重新添加组件和权限。

## 注销免费版本推送服务

如果 App 的推送服务是从免费集群迁移到付费集群，在两个集群同时推送，可能会出现重复消息。如需要在免费版本和 TPNS 版本都做推送，则 TPNS 版本需要增加以下配置：

* 在 AndroidManifest 上添加的 application 节点内添加以下配置，填写免费版本的 accessId

  ```markup
  <meta-data
      android:name="XG_OLD_ACCESS_ID"
      android:value="免费版本应用的accessid" />
  ```

## 接口变更

与 4.x 对比，部分 API 接口做了以下变更。

* 删除带账号注册的 API，设置账号只能通过 bindAccount 或 appendAccount 来设置。

  ```java
    // 删除以下API
    XGPushManager.registerPush(Context context, String account)
    XGPushManager.registerPush(Context context, String account, final XGIOperateCallback callback)
    XGPushManager.registerPush(Context context, String account,String url, String payload, String otherToken, final XGIOperateCallback callback)
  ```
* 账号绑定和注册推送功能分开，bindAccount 和 appendAccount 不再带有注册功能，推荐在 registerPush 成功的回调里，调用 bindAccount 或 appendAccount。
* 继承 XGPushBaseReceiver 时需要多实现以下两个函数。

  ```java
    /**
     * 设置帐号结果处理函数
     */
    public abstract void onSetAccountResult(Context context, int errorCode,
                    String operateName);
    /**
     * 删除帐号结果处理函数
     */
    public abstract void onDeleteAccountResult(Context context, int errorCode,
                    String operateName);
  ```
* 继承 XGPushBaseReceiver 的实现类，在 AndroidManifest 文件配置时，前缀命名规则为 com.tencent.android.xg.vip.action.，区别于 4.x 版本的 com.tencent.android.tpush.action.。

  TPNS 版本正确配置：

  ```
  <receiver android:name="com.tencent.android.xg.cloud.demo.MessageReceiver">
          <intent-filter>
              <!-- 接收消息透传 -->
              <action android:name="com.tencent.android.xg.vip.action.PUSH_MESSAGE" />
              <!-- 监听注册、反注册、设置/删除标签、通知被点击等处理结果 -->
              <action android:name="com.tencent.android.xg.vip.action.FEEDBACK" />
          </intent-filter>
      </receiver>
  ```

## 厂商通道集成变更

厂商通道变更只需做以下变更：

* 删除 gradle 依赖（自动集成）

  ```
  // 删除以下对应的厂商依赖
  implementation 'com.tencent.xinge:mipush:4.3.2-xiaomi-release'
  implementation 'com.tencent.xinge:xgmz:4.3.2-meizu-release'
  implementation 'com.tencent.xinge:xghw:4.3.2-huawei-release'
  // fcm
  implementation 'com.tencent.xinge:fcm:4.3.2-release'
  implementation 'com.google.firebase:firebase-messaging:17.3.1'
  ```

  替换为以下对应的厂商依赖，\[VERSION] 为当前 SDK 版本号，版本号可在 SDK 下载页查看。

  ```
  implementation 'com.tencent.tpns:xiaomi:[VERSION]-release'
  implementation 'com.tencent.tpns:meizu:[VERSION]-release'
  implementation 'com.tencent.tpns:huawei:[VERSION]-release'
  //fcm
  implementation 'com.tencent.tpns:fcm:[VERSION]-release'
  implementation  'com.google.firebase:firebase-messaging:17.6.0'
  ```
* 手动集成的方式需要替换 .jar 文件

  前往 [腾讯移动推送控制台](https://console.cloud.tencent.com/tpns/sdkdownload)，下载 Android SDK 压缩包、并解压目录 Other-Push-jar 下，找到对应厂商通道所需 .jar 文件，替换信鸽 4.x 版本使用的厂商通道 .jar 文件。

## 代码混淆保留变更

如果您的项目中使用 proguard 等工具做了代码混淆，请将以下混淆保留选项：

变更前：

```
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep class com.tencent.android.tpush.** {*;}
-keep class com.tencent.mid.** {*;}
-keep class com.qq.taf.jce.** {*;}
-keep class com.tencent.bigdata.** {*;}
```

变更后：

```
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep class com.tencent.android.tpush.** {*;}
-keep class com.tencent.bigdata.baseapi.** {*;}
-keep class com.tencent.bigdata.mqttchannel.** {*;}
-keep class com.tencent.tpns.dataacquisition.** {*;}
```


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://dtsupport.gitbook.io/xg-docs/migration_guide/android_migration_guide.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
