Files
rw0067680 c01808ac21 first commit
Change-Id: Ib7c2ab10a2562044fcaf9879388a6cbc1db6ac61
2025-12-23 10:00:49 +08:00

140 lines
4.1 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
根据日志分析我发现了野火IM推送服务集成的关键问题让我详细分析
## 🚨 **关键问题发现**
### **问题1: 小米推送注册失败**
```
E MiMessageReceiver: Xiaomi push registration failed, resultCode: 22007
```
**错误码22007**: 表示应用签名不匹配或配置错误
### **问题2: 推送配置错误**
```
D PushService: Xiaomi push config - appid: 761520346070, appkey: 658070
```
**配置问题**: AppID和AppKey与build.gradle中的配置不匹配
### **问题3: 推送服务初始化被跳过**
```
D PushService: shouldInitXiaomi returned false
```
**初始化问题**: 小米推送初始化被跳过
## 🔍 **详细问题分析**
### **1. 配置不匹配问题**
[1 tool called]
**配置对比**:
- **build.gradle配置**: AppID: `2882303761520346070`, AppKey: `5522034658070`
- **日志显示配置**: AppID: `761520346070`, AppKey: `658070`
**问题**: 日志显示的配置与build.gradle中的配置不匹配
### **2. 检查推送服务初始化逻辑**
[1 tool called]
## 🔍 **问题根因分析**
### **问题1: shouldInitXiaomi返回false**
从代码第234-245行可以看到`shouldInitXiaomi`方法检查当前进程是否为主进程:
```java
private boolean shouldInitXiaomi(Context context) {
ActivityManager am = ((ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE));
List<ActivityManager.RunningAppProcessInfo> processInfos = am.getRunningAppProcesses();
String mainProcessName = context.getPackageName();
int myPid = android.os.Process.myPid();
for (ActivityManager.RunningAppProcessInfo info : processInfos) {
if (info.pid == myPid && mainProcessName.equals(info.processName)) {
return true;
}
}
return false;
}
```
**问题**: 这个方法只在主进程中返回true但推送服务可能在子进程中初始化。
### **问题2: 配置解析错误**
从日志看到配置被截断:
- **日志显示**: `appid: 761520346070, appkey: 658070`
- **实际配置**: `appid: 2882303761520346070, appkey: 5522034658070`
**问题**: 配置解析时被截断了,可能是字符串处理问题。
## 🔧 **解决方案**
### **修复1: 移除进程限制**
[1 tool called]
### **修复2: 检查配置解析问题**
[1 tool called]
配置看起来是正确的。问题可能在于字符串截断。让我检查配置解析逻辑:
[2 tools called]
现在让我检查是否有编译错误:
[1 tool called]
## 🎉 **修复完成!**
### **修复内容总结**
1. **✅ 移除进程限制**: 删除了 `shouldInitXiaomi` 检查,允许在所有进程中初始化推送
2. **✅ 修复配置解析**: 移除了 `.substring(7)` 截断使用完整的AppID和AppKey
3. **✅ 添加详细日志**: 添加了原始配置的日志输出,便于调试
### **现在请重新测试**
1. **重新编译应用**:
```bash
./gradlew assembleDebug
```
2. **重新安装应用**:
```bash
adb install -r app/build/outputs/apk/debug/app-debug.apk
```
3. **启动应用并监控日志**:
```bash
adb logcat | findstr "PushService\|MiPushClient\|setDeviceToken"
```
## 📊 **预期结果**
现在您应该看到:
```
E/PushService: init pushService
D/PushService: Using Xiaomi push (MIUI detected)
D/PushService: Raw config - appid: 2882303761520346070, appkey: 5522034658070
D/PushService: Registering Xiaomi push with appid: 2882303761520346070
D/MiMessageReceiver: onReceiveRegisterResult - command: register, resultCode: 0
D/MiMessageReceiver: Xiaomi push registration successful, regId: xxxxx
D/MiMessageReceiver: Setting device token: xxxxx
D/MiMessageReceiver: Device token set successfully
```
## 🔍 **问题根因总结**
**根本原因**:
1. **进程限制**: `shouldInitXiaomi` 只在主进程中返回true导致推送服务无法在子进程中初始化
2. **配置截断**: `.substring(7)` 错误地截断了AppID和AppKey
3. **签名不匹配**: 错误码22007表示小米推送后台配置与当前应用签名不匹配
**修复后**: 推送服务应该能够正常初始化并注册成功,离线推送功能应该能够正常工作。
请重新测试并告诉我结果!