uni-app 关于setPushChannel设置推送渠道 属性不生效的问题
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 |
测试一下云打包有没有问题
发现是什么问题了,只能是用小米那里申请到的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);
}
});
}
排查步骤
-
参数验证:
- 确保
pushChannelId
是有效的,且符合你后端或推送服务的要求。 - 检查是否有拼写错误或多余的空格。
- 确保
-
平台支持:
setPushChannel
可能在某些平台上不被支持。查阅uni-app的官方文档,确认你的目标平台(如微信小程序、App、H5等)是否支持此API。
-
调用时机:
- 确保
setPushChannel
是在应用启动或用户登录后尽早调用,因为推送权限的获取通常需要在用户交互后进行。
- 确保
-
权限检查:
- 确保应用已获取推送权限。对于原生App,这通常需要在系统设置中手动开启;对于小程序,则需要用户授权。
-
日志输出:
- 利用
console.log
和console.error
输出更多调试信息,帮助你理解API调用的结果和可能的错误原因。
- 利用
-
版本更新:
- 检查uni-app和依赖库的版本,确保你使用的是最新版本,因为老版本可能包含未修复的bug。
-
后端配置:
- 确保后端服务器已正确配置推送渠道,并且与前端传递的
pushChannelId
相匹配。
- 确保后端服务器已正确配置推送渠道,并且与前端传递的
通过上述步骤,你应该能够定位到setPushChannel
设置推送渠道属性不生效的具体原因。如果问题依然存在,建议查阅更详细的官方文档或向uni-app社区求助。