uni-app 关于setPushChannel设置推送渠道后服务端推送问题

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

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}"
]

Image Image Image Image


6 回复

小米平台离线厂商推送,不需要创建通知渠道,系统自动会默认创建。


channelDesc 字段的值不对呀,你实际填的是什么?

实际是这样channelDesc: ‘求职者已出发提醒’,和小米后台那么一致

回复 4***@qq.com: 看一下im,沟通一下

老哥解决了没,如何实现推送播放自定义音频呀

在处理 uni-app 中关于 setPushChannel 设置推送渠道后服务端推送的问题时,我们主要关注的是如何正确配置客户端的推送渠道,并确保服务端能够基于这个配置正确地推送消息。下面是一个关于如何在 uni-app 中设置推送渠道,并在服务端进行消息推送的代码示例。

客户端代码(uni-app)

首先,在你的 uni-app 项目中,你需要调用 uni.setPushChannel 方法来设置推送渠道。这通常在应用启动时执行,例如在 App.vueonLaunch 生命周期函数中:

// 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);
    }
  });

注意事项

  1. 推送渠道配置:确保在 uni-app 中正确设置了推送渠道,并且该渠道与你的服务端推送服务相匹配。
  2. 设备标识:在上面的服务端示例中,我们推送给了所有用户。在实际应用中,你可能需要根据设备的唯一标识(如 registrationId)来推送消息。
  3. 错误处理:在客户端和服务端都要做好错误处理,确保在推送失败时能够捕获并处理错误。
  4. 安全性:保护好你的推送服务配置信息(如 app_keymaster_secret),避免泄露。

通过上述代码示例,你可以在 uni-app 中设置推送渠道,并在服务端基于这个配置正确地推送消息。

回到顶部