uni-app 【报Bug】un.onPushMessage无法监听消息:从前台切换到后台(等一段时间),再次从后台切换到前台时,无法监听在线消息

uni-app 【报Bug】un.onPushMessage无法监听消息:从前台切换到后台(等一段时间),再次从后台切换到前台时,无法监听在线消息

操作步骤:

  • 打开App, 将app 切换到后台,等待 2 分钟 ,再次切换到前台。 在通过 uniPush.sendMessage 发送消息。app 无法接收消息。
  • 将App 完全退出(清理后台),再次运行App。可以收到之前的消息, uniPush.sendMessage 发送消息,也可以接收。

预期结果:

  • 只要是app运行,就可以接收消息。包括之前没有接收的消息。从后台(等几分钟)切换到前台的app,发送的消息状态为 successed_offline,因该为 successed_online。

实际结果:

  • app进入后台,再次运行(切换到前台), 无法接收消息。除非完全退出,再次启动app。

bug描述:

  • 实现功能: 在app运行的时候,可以接收到消息,不需要厂商的推送。
  • app 从前台切换到后台(等一段时间),再次从后台切换到前台 。 uni.onPushMessage 无法监听消息。app完全退出(将后台也给清理),再次启动 App,可以监听到消息 (包括之前没有监听的消息)。
  • 在交流群里也无法解决

图片

Image 1 Image 2 Image 3

信息
产品分类 uniapp/App
PC开发环境 Windows
PC开发环境版本号 win10
HBuilderX类型 正式
HBuilderX版本号 4.36
手机系统 Android
手机系统版本号 Android 14
手机厂商 小米
手机机型 小米12
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

更多关于uni-app 【报Bug】un.onPushMessage无法监听消息:从前台切换到后台(等一段时间),再次从后台切换到前台时,无法监听在线消息的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app 【报Bug】un.onPushMessage无法监听消息:从前台切换到后台(等一段时间),再次从后台切换到前台时,无法监听在线消息的实战教程也可以访问 https://www.itying.com/category-93-b0.html


在uni-app中,un.onPushMessage 用于监听来自服务器的推送消息。针对你提到的从前台切换到后台,再切换回前台时无法监听在线消息的问题,这通常与消息监听的注册和管理有关。以下是一个简化的代码示例,展示如何在uni-app中正确设置和管理消息监听。

首先,确保你的项目已经正确配置了推送服务,如使用uniPush或集成其他第三方推送服务。

1. 初始化推送服务

App.vueonLaunch生命周期中初始化推送服务:

export default {
  onLaunch: function() {
    // 检查并请求用户授权接收推送消息
    #ifdef APP-PLUS
    plus.push.getClientInfo((info) => {
      if (!info.regid) {
        plus.push.createMessageChannel(); // 创建消息通道
      }
      // 监听推送消息到达事件
      plus.push.addEventListener('receive', (msg) => {
        console.log('Received message:', msg);
        // 处理消息,如更新UI等
      });
    });
    #endif
  },
  // 其他生命周期函数...
}

2. 处理应用状态变化

监听应用从前台到后台以及从后台到前台的状态变化,确保消息监听在适当的时候被注册或恢复:

export default {
  onShow: function() {
    // 应用从前台显示
    #ifdef APP-PLUS
    // 检查推送服务状态,如果需要可以重新注册监听
    plus.push.addEventListener('receive', (msg) => {
      console.log('Re-registered receive event:', msg);
    });
    #endif
  },
  onHide: function() {
    // 应用进入后台
    // 通常不需要在这里移除监听,除非有特定需求
  },
  // 其他生命周期函数...
}

注意事项

  • 推送权限:确保用户已授权接收推送消息。
  • 推送服务配置:检查uniPush或其他推送服务的配置是否正确。
  • 消息类型un.onPushMessage 适用于特定类型的推送消息(如透传消息),确保发送的消息类型与监听器匹配。
  • 平台差异:不同平台(iOS/Android)可能有不同的推送机制和行为,确保针对每个平台进行了适当的配置和测试。

如果上述代码示例仍然无法解决问题,建议检查以下几点:

  • 查看控制台日志,确认是否有错误信息。
  • 使用开发者工具的网络监控功能,检查推送消息是否成功到达客户端。
  • 确认推送服务的后台服务是否正常运行,以及是否有网络或防火墙问题阻止消息传递。
回到顶部