Uni-app 集成 IM SDK,后台运行时,如何解决收到消息没有推送通知?

您好,应用程序处于后台且活跃时,用户仍处于在线状态,SDK 仍可实时收到会话消息,消息送达过程中不会使用任何推送服务,因此用户设备不会收到来自任何推送服务的通知。

您可以在 setOnMessageReceivedListener 收到新消息后,调用 uni-app 提供的 api 弹出本地通知。

示例代码如下:

// App.vue 中记录应用是否在后台
{
  // 当 uni-app 启动,或从后台进入前台显示
  onShow: function() {
    // 记录后台状态
    uni.setStorageSync('app_background', false);
  },
  // 当 uni-app 从前台进入后台
  onHide: function() {
    // 记录后台状态
    uni.setStorageSync('app_background', true);
  }
}


// 在收消息回调中,处理是否弹出本地通知
engine.setOnMessageReceivedListener((res) => {
  // 其他业务逻辑............

  // 以下为弹出本地通知的逻辑
  // 判断是否为后台
  const background = uni.getStorageSync('app_background');
  if (background) {
    // app 处于后台,弹出本地通知
    // notification 为需要显示的消息内容,需要自行从消息 res 中解析
    let { message } = res;
    let notification;
    // messageType = 2 是文本消息
    if (message && message.messageType == 2) {
      notification = message.text;
    }
    if (notification) {
      plus.push.createMessage(notification, {}, {}); 
    }
  }
});

createMessage 接口详细的使用说明可参考链接:HTML5+ API Reference

注意
如上述接口不能满足您的业务需求,可查阅 uni-app 官方问答社区,用其他方式实现本地通知。