uni-app 关于setPushChannel设置推送渠道后服务端推送问题
uni-app 关于setPushChannel设置推送渠道后服务端推送问题
操作步骤:
- 客户端setPushChannel设置通知渠道属性成功,服务端发送推送过来,又会创建一个新的,但是这两个的channelId应该是一样的。
预期结果:
- 客户端设置的通知渠道生效,会震动、会在锁屏中显示。
实际结果:
- 客户端设置的通知渠道不生效,服务端会在本地重新创建一个通知渠道。
bug描述:
在小米那边申请了一个channelId,比如是 ‘test’ setPushChannel成功设置了通知渠道,然后服务端发送推送通知,在手机通知管理中会多出一个新的通知渠道,但是这两个的channelId应该是一样的。
// 客户端设置
const manager = uni.getChannelManager()
manager.setPushChannel({
channelId: '127074',
channelDesc: '求职者已出发提醒',
enableLights: true,
enableVibration: true,
importance: 4, // 通知的重要性级别
lockscreenVisibility: 1 // 锁屏可见性
})
// 服务端推送
{
"push_clientid": "正确的客户端ID", // 填写上一步在uni-app客户端获取到的客户端推送标识push_clientid
"title": "通知栏显示的标题", // 通知栏标题,长度小于20
"content": "通知栏显示的内容", // 通知栏内容,长度小于50
"payload": { // 推送透传数据,app程序接受的数据,长度小于800字符
"text": "体验一下uni-push2.0"
},
"force_notification": true, // 无论是离线推送还是在线推送,都自创建通知栏消息
"channel": {
"XM": "127074"
}
}
// 通过getAllChannels获取的所有通知渠道的数据
[
"NotificationChannel{mId='mipush|com.dyxz.zhiyoutianxia|127074', 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='127074', 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}"
]
6 回复
小米平台离线厂商推送,不需要创建通知渠道,系统自动会默认创建。
channelDesc 字段的值不对呀,你实际填的是什么?
回复 4***@qq.com: 看一下im,沟通一下
老哥解决了没,如何实现推送播放自定义音频呀
在处理 uni-app
中关于 setPushChannel
设置推送渠道后服务端推送的问题时,我们主要关注的是如何正确配置客户端的推送渠道,并确保服务端能够基于这个配置正确地推送消息。下面是一个关于如何在 uni-app
中设置推送渠道,并在服务端进行消息推送的代码示例。
客户端代码(uni-app)
首先,在你的 uni-app
项目中,你需要调用 uni.setPushChannel
方法来设置推送渠道。这通常在应用启动时执行,例如在 App.vue
的 onLaunch
生命周期函数中:
// App.vue
export default {
onLaunch() {
// 设置推送渠道,例如设置为 "jpush"
uni.setPushChannel({
channel: 'jpush',
success: function() {
console.log('推送渠道设置成功');
},
fail: function(err) {
console.error('推送渠道设置失败', err);
}
});
}
}
服务端代码(以 JPush 为例)
假设你使用的是 JPush 作为推送服务,以下是一个简单的 Node.js 服务端示例,展示如何向特定的客户端设备推送消息:
const JPush = require('jpush-sdk');
// JPush 配置
const client = JPush.buildClient('your_app_key', 'your_master_secret');
// 推送消息
client.push()
.setPlatform('ios', 'android') // 设置推送平台
.setAudience(JPush.ALL) // 设置推送对象,这里设置为所有用户
.setNotification('Hello, JPush', {
android: {
title: 'Android Title',
extras: { key: 'value' }
},
ios: {
sound: 'default',
badge: '+1',
extras: { key: 'value' }
}
})
.send((err, res) => {
if (err) {
console.error('推送失败', err);
} else {
console.log('推送成功', res);
}
});
注意事项
- 推送渠道配置:确保在
uni-app
中正确设置了推送渠道,并且该渠道与你的服务端推送服务相匹配。 - 设备标识:在上面的服务端示例中,我们推送给了所有用户。在实际应用中,你可能需要根据设备的唯一标识(如
registrationId
)来推送消息。 - 错误处理:在客户端和服务端都要做好错误处理,确保在推送失败时能够捕获并处理错误。
- 安全性:保护好你的推送服务配置信息(如
app_key
和master_secret
),避免泄露。
通过上述代码示例,你可以在 uni-app
中设置推送渠道,并在服务端基于这个配置正确地推送消息。