Files
zhini_im/开发文档/野火消息推送(小米手机厂商通道)/离线消息问题排查指南.md
rw0067680 c01808ac21 first commit
Change-Id: Ib7c2ab10a2562044fcaf9879388a6cbc1db6ac61
2025-12-23 10:00:49 +08:00

6.0 KiB
Raw Permalink Blame History

离线消息问题排查指南

问题描述

应用进程未启动时收不到离线消息,厂商通道推送消息无法正确处理。

问题根因分析

1. 主要问题DefaultPushMessageHandler 空实现

问题: DefaultPushMessageHandler.handleIMPushMessage() 方法是空实现 影响: 厂商通道推送消息无法触发应用启动和消息拉取 修复: 添加应用启动和消息拉取逻辑

2. 厂商通道推送流程

厂商推送服务 → 应用推送进程 → DefaultPushMessageHandler → 应用启动 → 消息拉取

已修复的问题

1. DefaultPushMessageHandler 修复

@Override
public void handleIMPushMessage(Context context, AndroidPushMessage pushMessage, int pushServiceType) {
    Log.d(TAG, "handleIMPushMessage: " + pushMessage);
    
    // 启动主进程
    PushService.showMainActivity(context);
    
    // 强制连接服务器拉取消息
    try {
        ChatManager.Instance().forceConnect();
        Log.d(TAG, "forceConnect called successfully");
    } catch (Exception e) {
        Log.e(TAG, "forceConnect failed", e);
    }
}

2. 推送消息数据处理修复

@Override
public void handlePushMessageData(Context context, String pushData) {
    Log.d(TAG, "handlePushMessageData: " + pushData);
    
    // 启动主进程
    PushService.showMainActivity(context);
    
    // 强制连接服务器拉取消息
    try {
        ChatManager.Instance().forceConnect();
        Log.d(TAG, "forceConnect called successfully");
    } catch (Exception e) {
        Log.e(TAG, "forceConnect failed", e);
    }
}

排查步骤

步骤1: 检查推送消息处理日志

# 监控推送消息处理日志
adb logcat | grep "DefaultPushMessageHandler\|handleIMPushMessage\|handlePushMessageData"

关键日志:

  • handleIMPushMessage: xxxxx - 推送消息处理
  • handlePushMessageData: xxxxx - 推送数据处理
  • forceConnect called successfully - 消息拉取成功

步骤2: 检查应用启动日志

# 监控应用启动日志
adb logcat | grep "showMainActivity\|forceConnect"

关键日志:

  • showMainActivity: started via action - 应用启动成功
  • forceConnect called successfully - 消息拉取成功

步骤3: 检查厂商推送消息接收

# 监控厂商推送消息接收
adb logcat | grep "MiPush\|HMS\|VIVO\|OPPO\|FCM"

关键日志:

  • onNotificationMessageArrived - 通知消息到达
  • onReceivePassThroughMessage - 透传消息到达
  • onMessageReceived - FCM消息到达

步骤4: 检查推送服务初始化

# 监控推送服务初始化
adb logcat | grep "PushService\|推送服务\|setDeviceToken"

关键日志:

  • 开始初始化小米推送服务 - 推送服务初始化
  • 小米推送注册成功RegID: xxxxx - 推送注册成功
  • 设备Token设置成功: xxxxx - 设备Token设置成功

测试验证

测试1: 完整离线消息测试

  1. 清除应用数据
  2. 重新安装应用
  3. 启动应用并登录
  4. 检查推送注册日志
  5. 完全关闭应用
  6. 发送测试消息
  7. 观察推送消息日志

测试2: 分步测试

  1. 推送注册测试: 检查推送服务是否正确注册
  2. 消息接收测试: 检查推送消息是否正确接收
  3. 消息处理测试: 检查推送消息是否正确处理
  4. 应用启动测试: 检查应用是否正确启动
  5. 消息拉取测试: 检查消息是否正确拉取

常见问题及解决方案

问题1: 推送消息到达但应用未启动

症状: 看到推送消息日志但没有应用启动日志 可能原因:

  • showMainActivity 方法有问题
  • 应用启动逻辑有问题

解决方案:

  1. 检查 PushService.showMainActivity() 方法
  2. 检查应用启动权限
  3. 检查系统权限设置

问题2: 应用启动但消息未拉取

症状: 看到应用启动日志但没有消息拉取日志 可能原因:

  • ChatManager 未初始化
  • 网络连接问题
  • forceConnect 方法有问题

解决方案:

  1. 检查 ChatManager 初始化
  2. 检查网络连接
  3. 检查 forceConnect 方法

问题3: 推送消息完全收不到

症状: 没有任何推送相关日志 可能原因:

  • 推送服务未初始化
  • 系统权限被禁用
  • 厂商推送服务异常

解决方案:

  1. 检查推送服务初始化日志
  2. 检查系统权限设置
  3. 重启厂商推送服务

系统权限检查

小米手机MIUI设置

  • 自启动管理: 开启
  • 后台运行权限: 开启
  • 通知权限: 开启
  • 电池优化: 关闭

华为手机EMUI设置

  • 自启动管理: 开启
  • 后台运行权限: 开启
  • 通知权限: 开启
  • 电池优化: 关闭

VIVO手机FuntouchOS设置

  • 自启动管理: 开启
  • 后台运行权限: 开启
  • 通知权限: 开启
  • 电池优化: 关闭

OPPO手机ColorOS设置

  • 自启动管理: 开启
  • 后台运行权限: 开启
  • 通知权限: 开启
  • 电池优化: 关闭

调试技巧

1. 使用详细日志

adb logcat -v time | grep "DefaultPushMessageHandler\|showMainActivity\|forceConnect"

2. 监控特定进程

adb shell ps | grep "com.xunpaisoft.social"

3. 检查系统状态

adb shell dumpsys package com.xunpaisoft.social

预期效果

修复后应该能够:

  • 应用进程未启动时收到推送通知
  • 点击推送通知正确启动应用
  • 应用启动后立即显示新消息
  • 后台运行时正常接收推送
  • 开机后正常接收推送

注意事项

  1. 推送消息类型: 确保服务器发送的是透传消息,不是通知消息
  2. 推送消息格式: 确保消息格式符合厂商推送要求
  3. 系统权限: 确保所有必要的系统权限都已授予
  4. 网络连接: 确保设备有网络连接
  5. 推送服务: 确保推送服务正常运行

联系支持

如果问题仍然存在,请提供以下信息:

  1. 完整的日志输出
  2. 设备型号和系统版本
  3. 应用版本信息
  4. 测试步骤和结果