描述
使用推送 2.0 之后,小米推送一直收不到。
关键报错:
XMPush :register invalid
XMPush :Don’t send message before initialization succeeded!
分析(根因分析、需求分析)
排除初始化时序问题后,发现调用 MiPushClient.registerPush()
传入的 AppId
、AppKey
出错了。
根本原因
目前小米推送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_ID
、RONG_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
文件 manifestPlaceholders
下 XIAOMI_APP_ID
、XIAOMI_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\"",
]
}
// ...其他配置
}
链接
- 开发者文档:推送 2.0 · 集成小米推送
追踪记录
- 工单号:185781、185840
更多支持
如有疑问,欢迎提交工单。