uni-app plus.push.createMessage 在安卓某些机型上没有效果

uni-app plus.push.createMessage 在安卓某些机型上没有效果

开发环境 版本号 项目创建方式
Windows win10 HBuilderX

产品分类:uniapp/App

PC开发环境操作系统:Windows

PC开发环境操作系统版本号:win10

HBuilderX类型:正式

HBuilderX版本号:3.2.16

手机系统:Android

手机系统版本号:Android 6.0

手机厂商:华为

手机机型:HUAWEI VNS-AL00

页面类型:vue

vue版本:vue2

打包方式:云端

示例代码:

let options = {  
    cover: false, //是否覆盖上一次提示的消息  
    sound: 'system', //声音  
}  
let payload = {};  
let content = '测试一下'  
options.title = '测试标题' //标题  
console.log(content, payload, options)  
plus.push.createMessage(content, payload, options)

操作步骤:

  1. 创建推送plus.push.createMessage

预期结果: 2. 都显示推送信息

实际结果: 2. 有些机型没有推送信息

bug描述: 在安卓同机型上使用plus.push.createMessage,某些机型不显示推送(状态栏和横幅均没有),且为同一份代码,push功能已经开通,使用自定义基座运行到手机,手机推送等管理权限都已经打开。

  1. 可以显示推送的部分机型

    • 华为荣耀 PRA-AL00X(EMUI 8.0.0 Android 8.0.0 )可以显示推送。
    • 红米 K20 Pro(MIUI 12.5.6 Android 11.0.0 )可以显示推送。
  2. 不可以显示推送的部分机型

    • 华为 VNS-AL00 (EMUI 4.1.3 Android 6.0 )不可以显示推送
    • 华为 EP (EMUI 4.1.0 Android 6.0 )不可以显示推送
    • 华为 平板M2 (EMUI 4.0.3 Android 6.0 )不可以显示推送

更多关于uni-app plus.push.createMessage 在安卓某些机型上没有效果的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

不可显示推送的均为 ,低版本的安卓机型,是不支持plus.push.createMessage用法吗?

更多关于uni-app plus.push.createMessage 在安卓某些机型上没有效果的实战教程也可以访问 https://www.itying.com/category-93-b0.html


同问,我也遇到这种问题,苹果都可以,安卓的机型几年前的不行

请问 解决了么?老铁 我也遇到了

没有 也没有人回答

2022年了 请问这个问题解决了吗,现在部分手机没有消息推送

根据你提供的信息,这个问题很可能与Android系统的通知权限管理机制有关,尤其是在Android 8.0(API 26)以下的旧版本系统上。

核心原因分析:

  1. Android 8.0+ 的通知通道(Notification Channels)机制:从Android 8.0开始,系统强制要求应用为通知创建分类通道(Channel),用户可以对不同通道进行精细化管理(开启/关闭/静音)。你的代码中未创建通知通道,但在Android 8.0及以上的设备(如你提到的PRA-AL00X和K20 Pro)上,uni-app底层可能自动创建了默认通道或进行了兼容处理,因此通知能正常显示。

  2. Android 8.0 以下版本的权限差异:在Android 8.0之前,应用通知权限是全局开关,用户只能在“设置”中完全允许或禁止应用发送通知。你提到的无法接收通知的机型(VNS-AL00、EP、平板M2)均为Android 6.0系统,属于旧版本。虽然你说“手机推送等管理权限都已经打开”,但旧系统上可能存在更严格的系统级省电策略(如华为EMUI的“忽略电池优化”、“后台应用管理”),这些设置会阻止应用在后台创建通知。

解决方案:

  1. 显式创建通知通道(针对Android 8.0+兼容):虽然你的问题机型是Android 6.0,但为保障全机型兼容,建议在调用createMessage前,先检查并创建通知通道(仅Android 8.0以上需要):
    // 在App.vue的onLaunch中或调用通知前执行
    if (plus.os.name === 'Android' && parseInt(plus.os.version) >= 8) {
        const channel = new plus.android.importClass('android.app.NotificationChannel');
        const channelId = 'default_channel_id';
        const channelName = '默认通知';
        const importance = plus.android.importClass('android.app.NotificationManager').IMPORTANCE_HIGH;
        const notificationChannel = new channel(channelId, channelName, importance);
        const notificationManager = plus.android.runtimeMainActivity().getSystemService('notification');
        notificationManager.createNotificationChannel(notificationChannel);
    }
回到顶部