felixyan
felixyan
  • 发布:2023-02-23 04:39
  • 更新:2024-07-08 22:53
  • 阅读:666

unipush2.0 通过user_id推送报错

分类:uniCloud

用了uni-im,发送消息后一直无法推送,然后自己写了测试的推送函数,还是提示
{
"data": {
"uni-push-err-res": {
"errCode": "uni-push-user-invalid",
"errMsg": "推送失败,没有符合条件的消息接收者"
},
"create_time": 1677082758790,
"_id": "63f64086f5cf3ae5104f9686"
},
"errCode": 0
}

2023-02-23 04:39 负责人:DCloud_uniCloud_JSON 分享
已邀请:
DCloud_uniCloud_JSON

DCloud_uniCloud_JSON

检查:登录成功后,是否有把客户端的push_clientid,上报到服务器端的uni-id-device表。

  • felixyan (作者)

    测试的2台设备都在device表里了。没问题呀。它自动添加的。

    2023-02-23 16:39

  • DCloud_uniCloud_JSON

    回复 felixyan: 另外检查看看是不是准备的token已经过期,或者check_token设置为false试试看

    2023-02-23 17:46

  • 2***@qq.com

    使用 uni-id-co 的 setPushCid 方法

    2024-07-08 22:54

coderhyh

coderhyh

你好 请问楼主解决了吗 我也遇到了呜呜呜

2***@qq.com

2***@qq.com

我也遇到了同样的问题,但是通过查找源码解决了。说一下我的认识:应该是我们没有更新 uni-device 和 uni-id-device 这两张表。导致系统不能活动道 clientid和user_id之间的映射。所以可以在系统登录成功的时候,利用 uni-id-co 云对象的 setPushCid 方法传入 client_id;

const uniIdCo = uniCloud.importObject('uni-id-co');     
uni.getPushClientId({  
                success: async res=>{  
                    console.log(res);   
                    console.log("设备的cid是", res.cid);   
                    var pushClientId = res.cid;  
                    console.log("尝试更新cid");   
                    let result = await uniIdCo.setPushCid({  
                        pushClientId  
                    })  
                    console.log(result);   
                }  
            })

通过这一个操作,你应该可以在数据库里面发现新添加的数据。这样就可以用了。

参考文献:麻烦大家看下官方文档,看完就知道怎么解决了。
https://doc.dcloud.net.cn/uniCloud/uni-cloud-push/mate.html
https://doc.dcloud.net.cn/uniCloud/uni-id/cloud-object.html#set-push-cid

要回复问题请先登录注册