使用推送 2.0 接入小米推送后收不到通知,XMPush 报错 register invalid

描述

使用推送 2.0 之后,小米推送一直收不到。

关键报错:

XMPush :register invalid
XMPush :Don’t send message before initialization succeeded!

分析(根因分析、需求分析)

排除初始化时序问题后,发现调用 MiPushClient.registerPush() 传入的 AppIdAppKey 出错了。

根本原因

目前小米推送SDK的 AppID、AppKey 为纯数字,在构建打包过程中,aapt 处理时会优先判断为 Number,导致写入 AndroidManifest 文件后与原值不同,产生一系列问题。

诊断方式

假设已从小米后台获取如下 App ID 与 App Key

  • XIAOMI_APP_ID : 9882303761517473625
  • XIAOMI_APP_KEY : 9451747338625

使用 Android Studio 打开您构建后的 APK 文件,检查 AndroidManifest.xml 文件(工具不限),搜索RONG_MI_PUSH_APP_IDRONG_MI_PUSH_APP_KEY 这两个 meta-data 配置,对比是否与小米推送 SDK 的 AppId、AppKey 一致。

有问题的 AndroidManifest.xml 示例,可见 value 值异常:

<meta-data
    android:name="RONG_MI_PUSH_APP_ID"
    android:value="1579155456.000000" />

<meta-data
    android:name="RONG_MI_PUSH_APP_KEY"
    android:value="1419875840.000000" />

解决方案

方案一:通过 gradle.properties 配置小米的 App ID 与 App Key。

build.gradle 文件 manifestPlaceholdersXIAOMI_APP_IDXIAOMI_APP_KEY 字段中引用 gradle.properties 属性文件中配置。

gradle.properties 属性文件配置示例:

MI_PUSH_APPID="9882303761517473625"
MI_PUSH_APPKEY="9451747338625"

build.gradle 配置示例:

android {
    defaultConfig {
        manifestPlaceholders = [
                // 小米相关应用参数
                XIAOMI_APP_ID  : "${MI_PUSH_APPID}",
                XIAOMI_APP_KEY : "${MI_PUSH_APPKEY}",
        ]
    }
    // ...其他配置
}

方案二:明确进行转义

如果希望在 App 的 build.gradle 中直接写入配置,请务必额外添加转义符,示例如下:

build.gradle 配置示例:

android {
    defaultConfig {
        manifestPlaceholders = [
                // 小米相关应用参数
                XIAOMI_APP_ID  : "\"9882303761517473625\""
                XIAOMI_APP_KEY : "\"9451747338625\"",
        ]
    }
    // ...其他配置
}

链接

追踪记录

  • 工单号:185781、185840

更多支持

如有疑问,欢迎提交工单