uni-app 关于setPushChannel设置推送渠道 属性不生效的问题

发布于 1周前 作者 phonegap100 来自 Uni-App

uni-app 关于setPushChannel设置推送渠道 属性不生效的问题

操作步骤:

  • 通过上面代码设置推送渠道

预期结果:

  • 属性设置生效

实际结果:

  • 属性设置没有生效

bug描述:

通过下面的代码设置推送渠道成功了,在手机的通知管理可以看到,但是里面的enableLights、enableVibration、importance、lockscreenVisibility都没有生效

const manager = uni.getChannelManager()  
manager.setPushChannel({  
  channelId: 'test',  
  channelDesc: '通知渠道描述',  
  enableLights: true,  
  enableVibration: true,  
  importance: 3, // 通知的重要性级别  
  lockscreenVisibility: 1 // 锁屏可见性  
})
信息类别 详情
产品分类 uniapp/App
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 11
HBuilderX类型 Alpha
HBuilderX版本号 4.26
手机系统 Android
手机系统版本号 Android 14
手机厂商 小米
手机机型 小米10至尊纪念版
页面类型 vue
vue版本 vue3
打包方式 离线
项目创建方式 HBuilderX

13 回复

测试一下云打包有没有问题


发现是什么问题了,只能是用小米那里申请到的channelId,setPushChannel里面的enableLights、enableVibration、importance、lockscreenVisibility才会生效。

现在又有一个问题了,setPushChannel里面enableLights、enableVibration、importance、lockscreenVisibility的属性都生效了,但是服务端用这个channelId发送推送,又会创建一个新的通知渠道,这个setPushChannel的通知渠道根本没响应。

回复 4***@qq.com: 你用getAllChannels获取一下服务端发送而创建的通知渠道,对比一下你本地创建的渠道,channelid是否一致。

回复 DCloud_Android_THB: 不一致,本地设置的通知渠道的mId=‘test’,服务端推送创建的通知渠道的是mId=‘mipush|com.包名.包名|test’。然后我刚刚测试本地设置通知渠道channelId='mipush|com.包名.包名|test’是创建不了的,卸载了重新安装的前提下。

回复 DCloud_Android_THB: 具体值是这样(我把包名隐藏), [ “NotificationChannel{mId=‘mipush|com.包名.包名|test’, mName=求职者已出发提醒, mDescription=hasDescription , mImportance=3, mBypassDnd=false, mLockscreenVisibility=-1000, mSound=android.resource://com.dyxz.zhiyoutianxia/raw/employer-departed, mLights=false, mLightColor=0, mVibration=null, mUserLockedFields=0, mUserVisibleTaskShown=false, mVibrationEnabled=true, mShowBadge=true, mDeleted=false, mDeletedTimeMs=-1, mGroup=‘null’, mAudioAttributes=AudioAttributes: usage=USAGE_NOTIFICATION content=CONTENT_TYPE_SONIFICATION flags=0x800 tags= bundle=null, mBlockableSystem=false, mAllowBubbles=-1, mImportanceLockedDefaultApp=false, mOriginalImp=3, mParent=null, mConversationId=null, mDemoted=false, mImportantConvo=false}”, “NotificationChannel{mId=‘test’, mName=求职者已出发提醒, mDescription=, mImportance=4, mBypassDnd=false, mLockscreenVisibility=-1000, mSound=content://settings/system/notification_sound, mLights=true, mLightColor=0, mVibration=null, mUserLockedFields=0, mUserVisibleTaskShown=false, mVibrationEnabled=true, mShowBadge=true, mDeleted=false, mDeletedTimeMs=-1, mGroup=‘null’, mAudioAttributes=null, mBlockableSystem=false, mAllowBubbles=-1, mImportanceLockedDefaultApp=false, mOriginalImp=4, mParent=null, mConversationId=null, mDemoted=false, mImportantConvo=false}”, ]

回复 4***@qq.com: 你在小米后台申请的channelid是test么?

回复 DCloud_Android_THB: test只是我举例,实际用的就是小米后台申请的channelId

回复 4***@qq.com: 从你发的数据上看 channelid就是test,你后台应该也是test才对

回复 DCloud_Android_THB: 我发的数据是我改过发出来的,我怕发真实数据出来,被别人拿去用来攻击。还是说我没明白你的意思吗

回复 DCloud_Android_THB: 你可以看看我新发的这个帖,https://ask.dcloud.net.cn/question/198518

回复 4***@qq.com: 好的

关于uni-app中setPushChannel设置推送渠道属性不生效的问题,这通常涉及到几个方面的检查:确保API调用正确、参数传递无误、平台支持情况以及检查可能的代码逻辑错误。以下是一个基本的代码案例和一些可能的排查步骤,帮助你定位和解决问题。

代码案例

首先,确保你正确调用了setPushChannel方法。以下是一个简单的示例代码:

// 在页面或组件的onLoad或mounted生命周期中调用
onLoad() {
    // 假设你有一个确定的推送渠道ID
    const pushChannelId = 'your_push_channel_id';
    
    // 调用uni-app的setPushChannel方法
    uni.setPushChannel({
        channel: pushChannelId,
        success: function() {
            console.log('推送渠道设置成功');
        },
        fail: function(err) {
            console.error('推送渠道设置失败', err);
        }
    });
}

排查步骤

  1. 参数验证

    • 确保pushChannelId是有效的,且符合你后端或推送服务的要求。
    • 检查是否有拼写错误或多余的空格。
  2. 平台支持

    • setPushChannel可能在某些平台上不被支持。查阅uni-app的官方文档,确认你的目标平台(如微信小程序、App、H5等)是否支持此API。
  3. 调用时机

    • 确保setPushChannel是在应用启动或用户登录后尽早调用,因为推送权限的获取通常需要在用户交互后进行。
  4. 权限检查

    • 确保应用已获取推送权限。对于原生App,这通常需要在系统设置中手动开启;对于小程序,则需要用户授权。
  5. 日志输出

    • 利用console.logconsole.error输出更多调试信息,帮助你理解API调用的结果和可能的错误原因。
  6. 版本更新

    • 检查uni-app和依赖库的版本,确保你使用的是最新版本,因为老版本可能包含未修复的bug。
  7. 后端配置

    • 确保后端服务器已正确配置推送渠道,并且与前端传递的pushChannelId相匹配。

通过上述步骤,你应该能够定位到setPushChannel设置推送渠道属性不生效的具体原因。如果问题依然存在,建议查阅更详细的官方文档或向uni-app社区求助。

回到顶部