uni-app unipush2.0 在荣耀系统上后台时点击通知栏离线消息卡白屏

uni-app unipush2.0 在荣耀系统上后台时点击通知栏离线消息卡白屏

操作步骤:

  1. 在不插电源的情况下,锁屏或把app切到后台,此时推送就会是离线通道(如果插电的情况下app会长时间保持在线通道,在线通道的消息不会有这个问题)
  2. 后台推送一条离线消息
  3. 通过锁屏或通知栏点击离线消息跳转app
  4. 此时在荣耀上就会卡在白屏

预期结果:

正常进入app首页

实际结果:

卡在白屏,并且原来处于后台的app会卡死

bug描述:

unipush2.0 在荣耀的系统,app处于后台并推送离线消息时,点击通知栏的消息跳转app会卡白屏,每点击一个离线消息,任务列表中都会多一个任务,并且原来处于后台的app也会卡死
在magicOS 6.0和magicOS 7.2 上都有这个问题,但是在一加,小米,华为的系统上不会出现这个问题
app处于后台时,如果是在线消息也不会有这个问题


更多关于uni-app unipush2.0 在荣耀系统上后台时点击通知栏离线消息卡白屏的实战教程也可以访问 https://www.itying.com/category-93-b0.html

4 回复

荣耀工单那边说要改点击通知的启动模式 unipush有改这个东西的地方吗

更多关于uni-app unipush2.0 在荣耀系统上后台时点击通知栏离线消息卡白屏的实战教程也可以访问 https://www.itying.com/category-93-b0.html


你好,请问问题解决了吗?这边也出现同样问题了

没有 想了个歪招 在荣耀上每次切后台就主动干掉进程 下次通过通知进入app的话就不会卡白屏了 不过进程列表会出现很多个app 唉 unipush的人让我在这提工单 提了也没人管

在使用 UniApp 的 UniPush 2.0 时,如果在荣耀系统(或其他 Android 系统)上,点击通知栏的离线消息后出现白屏问题,可能是由于以下原因导致的。以下是一些可能的解决方案和排查步骤:


1. 检查 App 的生命周期

  • 当 App 处于后台时,点击通知栏消息会触发 onLaunchonShow 生命周期函数。
  • 确保在 onLaunchonShow 中正确处理了通知栏消息的跳转逻辑。
  • 如果逻辑处理不当,可能会导致页面无法正常加载,从而出现白屏。

示例代码:

export default {
  onLaunch(options) {
    if (options.payload) {
      // 处理通知栏消息的跳转逻辑
      this.handlePushMessage(options.payload);
    }
  },
  onShow(options) {
    if (options.payload) {
      // 处理通知栏消息的跳转逻辑
      this.handlePushMessage(options.payload);
    }
  },
  methods: {
    handlePushMessage(payload) {
      // 根据 payload 跳转到指定页面
      uni.navigateTo({
        url: `/pages/targetPage?data=${JSON.stringify(payload)}`
      });
    }
  }
};

2. 检查页面加载逻辑

  • 如果目标页面在加载时依赖某些异步数据(如网络请求),可能会导致页面渲染延迟或失败。
  • 确保页面加载逻辑是健壮的,即使数据未及时加载,页面也不应白屏。

示例代码:

export default {
  data() {
    return {
      messageData: null
    };
  },
  onLoad(options) {
    if (options.data) {
      this.messageData = JSON.parse(options.data);
    } else {
      // 处理无数据的情况
      uni.showToast({
        title: '未接收到消息数据',
        icon: 'none'
      });
    }
  }
};

3. 检查 UniPush 配置

  • 确保 UniPush 2.0 的配置正确,特别是 manifest.json 中的推送配置。
  • 检查是否在 manifest.json 中正确配置了 pushoauth 相关参数。

示例配置:

{
  "app-plus": {
    "distribute": {
      "android": {
        "permissions": [
          "<uses-permission android:name=\"android.permission.INTERNET\"/>",
          "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>"
        ]
      }
    },
    "push": {
      "unipush": {
        "appid": "your-appid",
        "appkey": "your-appkey"
      }
    }
  }
}

4. 检查荣耀系统的后台限制

  • 荣耀系统(以及其他一些 Android 系统)可能会对后台运行的 App 进行限制,导致 App 无法正常启动或加载页面。
  • 确保 App 在荣耀系统的后台管理中被允许后台运行,并且没有被系统强制关闭。

解决方法:

  • 在荣耀系统的设置中,找到 App 的后台管理选项,设置为“允许后台运行”。
  • manifest.json 中配置 androidlaunchModestandard,避免 App 被系统回收。

示例配置:

{
  "app-plus": {
    "distribute": {
      "android": {
        "launchMode": "standard"
      }
    }
  }
}

5. 调试和日志

  • onLaunchonShow 中添加日志,检查是否正常接收到通知栏消息的 payload
  • 使用 console.loguni.showToast 输出调试信息,帮助定位问题。

示例代码:

onLaunch(options) {
  console.log('App launched with options:', options);
  if (options.payload) {
    console.log('Received push payload:', options.payload);
  }
}
回到顶部