uni-app uniPush.sendMessage参数配置为user_id则无法推送

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

uni-app uniPush.sendMessage参数配置为user_id则无法推送

示例代码:

'use strict';  
const uniPush = uniCloud.getPushManager({  
    appId: '__UNI__027487A'  
})  

exports.main = async (event, context) => {  
    return await sendMessage2(event);  
};  

async function sendMessage2(event) {  
    return await uniPush.sendMessage({  
        user_id: ['user_idxxx'],  
        // push_clientid: 'user-id-device表user_idxxx对应的push_clientid',  
        title: '1',  
        content: '2',  
        payload: '3'  
    })  
}  

操作步骤:

在云函数内,根据user-id-device表记录中任意一条记录配置好对应的user_id和push_clientid
当向uniPush.sendMessage传递的user_id时,报错:{“errCode”:“uni-push-user-invalid”,“errMsg”:“推送失败,没有符合条件的消息接收者”}

预期结果:

推送消息

实际结果:

报错{“errCode”:“uni-push-user-invalid”,“errMsg”:“推送失败,没有符合条件的消息接收者”}

bug描述:

在云函数中,测试推送命令:
uniPush.sendMessage
参数配置push_client可正常推送,配置为user_id则无法推送,
报错:{“errCode”:“uni-push-user-invalid”,“errMsg”:“推送失败,没有符合条件的消息接收者”}


| 开发环境         | 版本号                         | 项目创建方式 |
|------------------|-------------------------------|--------------|
| PC开发环境操作系统 | Windows                       |              |
| PC开发环境操作系统版本号 | windows10企业版LTSC 21H2      |              |
| 手机系统           | Android                       |              |
| 手机系统版本号     | Android 7.1.1                 |              |
| 手机厂商           | 模拟器                        |              |
| 手机机型           | 华为LIO-AN00                  |              |
| 页面类型           | vue                           |              |
| vue版本            | vue2                          |              |
| 打包方式           | 云端                          |              |
| 项目创建方式       | HBuilderX                     |              |

1 回复

在使用 uni-app 的 uniPush.sendMessage 进行消息推送时,如果配置参数为 user_id 但无法推送,这通常意味着 user_id 的配置或用户绑定存在问题。uniPush 是 DCloud 提供的推送服务,支持向特定用户或标签推送消息。下面是一个示例代码,展示如何正确配置 user_id 推送,并检查可能的问题点。

示例代码

首先,确保你的项目中已经集成了 uniPush 服务,并且已经配置了推送的相关权限和证书。

// 假设你已经登录并获取了用户的 user_id
const userId = 'your_user_id_here'; // 替换为实际用户ID

// 配置推送消息内容
const message = {
    title: '通知标题',
    content: '这是推送消息的内容。',
    payload: {
        key1: 'value1',
        key2: 'value2' // 可选,用于传递自定义数据
    },
    _platform: 'all' // 指定推送平台,'all' 表示所有平台,也可以指定 'ios' 或 'android'
};

// 发送推送消息
uniPush.sendMessage({
    to: userId, // 使用 user_id 推送
    data: message,
    success: function (res) {
        console.log('推送成功', res);
    },
    fail: function (err) {
        console.error('推送失败', err);
        // 检查错误原因
        if (err.code === 10001) {
            console.error('用户未绑定或 user_id 错误');
        } else if (err.code === 10002) {
            console.error('证书配置错误或推送服务未启用');
        } else {
            console.error('其他错误', err);
        }
    }
});

排查问题

  1. 检查 user_id:确保 user_id 是有效的,并且该用户已经绑定到推送服务。用户登录后,应在服务器端将其 user_id 与推送服务进行绑定。

  2. 检查推送服务配置:在 DCloud 后台检查推送服务的配置,包括证书、密钥等是否正确无误。

  3. 日志和错误码:利用返回的错误码和日志信息,定位具体问题。例如,错误码 10001 通常表示用户未绑定或 user_id 错误。

  4. 测试环境:在开发环境中测试推送功能,确保推送服务能够正常工作。生产环境中可能涉及更多的权限和配置。

  5. 网络问题:检查设备网络连接,确保设备能够正常访问推送服务。

通过上述代码和排查步骤,你应该能够定位并解决 uniPush.sendMessage 配置为 user_id 时无法推送的问题。如果问题依然存在,建议联系 DCloud 官方技术支持获取进一步帮助。

回到顶部