小米通道接入

最后更新时间:2021-07-14 15:34:22

    操作场景

    小米推送通道是由小米官方提供的系统级推送通道。在小米手机上,推送消息能通过小米的系统通道抵达终端,并且无需打开应用就能够收到推送。

    注意:

    • 小米通道支持抵达回调,不支持点击回调。
    • 在测试小米通道推送消息时,应尽量避免使用“test”、“测试”等字眼,否则可能会被小米拦截进入“非重要消息”中。

    操作步骤

    开启小米推送服务

    前往 小米开放平台 >【推送运营平台】,开启应用的消息推送服务。

    获取密钥

    1. 进入 小米开放平台 ,开通小米开发者账号,并获取 AppId、AppKey、AppSecret 三个密钥参数,详情请参见 快速接入指南
    2. 复制应用的 AppId、AppKey 和 AppSecret 参数填入 【移动推送 TPNS 控制台】>【配置管理】>【基础配置】>【小米官方推送通道】栏目中。

    配置内容

    使用 jcenter 依赖接入

    AS 开发建议使用 jcenter 依赖接入。引入小米推送的 jar 包。

    implementation 'com.tencent.tpns:xiaomi:[VERSION]-release'//小米推送 [VERSION] 为当前 SDK 版本号,版本号可在 Android SDK 发布动态查看
    
    说明:

    小米推送 [VERSION] 为当前 SDK 版本号,版本号可在 Android SDK 发布动态 查看。

    使用 Eclipse 开发接入

    1. 下载 SDK 安装包

    2. 打开 Other-Push-jar 文件夹, 导入小米推送相关 jar 包,将 xm4tpns1.1.2.1.jar 导入项目工程中。

    3. 在配置好移动推送 TPNS 的基础上 ,新增小米推送的配置:

      <application>
      <service
          android:name="com.xiaomi.push.service.XMPushService"
          android:enabled="true"
          android:process=":pushservice" />
      <service
          android:name="com.xiaomi.push.service.XMJobService"
          android:enabled="true"
          android:exported="false"
          android:permission="android.permission.BIND_JOB_SERVICE"
          android:process=":pushservice" />
      <!-- 注:此service必须在3.0.1版本以后(包括3.0.1版本)加入 -->
      <service
          android:name="com.xiaomi.mipush.sdk.PushMessageHandler"
          android:enabled="true"
          android:exported="true" />
      <service
          android:name="com.xiaomi.mipush.sdk.MessageHandleService"
          android:enabled="true" />
      <!-- 注:此service必须在2.2.5版本以后(包括2.2.5版本)加入 -->
      <receiver
          android:name="com.xiaomi.push.service.receivers.NetworkStatusReceiver"
          android:exported="true" >
          <intent-filter>
              <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
              <category android:name="android.intent.category.DEFAULT" />
          </intent-filter>
      </receiver>
      <receiver
          android:name="com.xiaomi.push.service.receivers.PingReceiver"
          android:exported="false"
          android:process=":pushservice" >
          <intent-filter>
              <action android:name="com.xiaomi.push.PING_TIMER" />
          </intent-filter>
      </receiver>
      </application>
      <!-- 注:小米push 需要的权限 begin -->
      <permission
      android:name="应用包名.permission.MIPUSH_RECEIVE"
      android:protectionLevel="signature" />
      <!-- 这里 应用包名 改成app的包名 -->
      <uses-permission android:name="应用包名.permission.MIPUSH_RECEIVE" />
      <!-- 这里 应用包名 改成app的包名 -->
      <!-- 注:小米push 需要的权限 end -->
      
    4. AndroidManifest.xml 增加 Receiver ,配置如下:

      <receiver
      android:exported="true"
      android:name="com.tencent.android.mipush.XMPushMessageReceiver">
      <intent-filter>
          <action android:name="com.xiaomi.mipush.RECEIVE_MESSAGE" />
      </intent-filter>
      <intent-filter>
          <action android:name="com.xiaomi.mipush.MESSAGE_ARRIVED" />
      </intent-filter>
      <intent-filter>
          <action android:name="com.xiaomi.mipush.ERROR" />
      </intent-filter>
      </receiver>
      

    开启小米推送

    设置小米 AppID 和 AppKey。

    XGPushConfig.setMiPushAppId(getApplicationContext(), "APPID");
    XGPushConfig.setMiPushAppKey(getApplicationContext(), "APPKEY");
    //打开第三方推送
    XGPushConfig.enableOtherPush(getApplicationContext(), true);
    
    //注册成功的日志如下
    I/TPush: [OtherPushClient] handleUpdateToken other push token is : 3CvDLfyPRArAGnv****dvQ7rYko+OthWo90rW+Edeqn53RUudp6U1dhySpV35 other push type: xiaomi
    I/TPush: [PushServiceBroadcastHandler] >> bind OtherPushToken success ack with [accId = 1500001048  , rsp = 0]  token = 03be2036762f******33bce72d40eb5e677a otherPushType = xiaomi otherPushToken = 3CvDLfyPRArAGnv****dvQ7rYko+OthWo90rW+Edeqn53RUudp6U1dhySpV35G
    

    如需通过点击回调获取参数或者跳转自定义页面,可以通过使用 Intent 来实现,详情请参见 Android 常见问题

    代码混淆

    -keep class com.xiaomi.**{*;}
    -keep public class * extends com.xiaomi.mipush.sdk.PushMessageReceiver
    
    说明:

    混淆规则需要放在 App 项目级别的 proguard-rules.pro 文件中。

    常见问题排查

    小米推送注册失败错误码查询方法

    若您观察到如下类似日志则说明小米厂商通道注册失败,开发者可以通过以下方式获取小米推送注册错误码:

    [OtherPushClient] handleUpdateToken other push token is :  other push type: xiaomi
    

    推送服务 debug 模式下,过滤关键字 “OtherPush”,查看相关返回码日志(例如 [OtherPush_XG_MI] register failed, errorCode: 22022, reason: Invalid package name: com.xxx.xxx),并前往 厂商通道注册失败排查指南 查找对应原因,获取解决办法。