3***@qq.com
3***@qq.com
  • 发布:2026-01-02 18:09
  • 更新:2026-01-02 18:09
  • 阅读:16

uni-x中uni-push推送不成功

分类:uni-app x

uni-app x uni-push 2.0 推送实现求助

实现思路整理

1. 推送配置(manifest.json)

"app-plus": {  
    "modules": {  
        "Push": true  
    },  
    "push": {  
        "unipush": {  
            "enable": true,  
            "appid": "__UNI__D2F0A5C"  
        }  
    }  
}

2. 客户端推送初始化(App.uvue)

  • onLaunchonShow生命周期中获取并上传推送客户端ID(CID)
  • 通过uni.getPushClientId()获取CID
  • 将CID与用户ID关联,通过云函数保存到uni-id-device集合

3. 推送发送流程(船长端)

  1. 船长点击"出行提醒"按钮
  2. 调用sendPushNotification云函数
  3. 云函数查询该订单用户的设备信息
  4. 使用uniCloud.getPushManager()创建推送管理器
  5. 调用sendMessage()发送推送
  6. 云函数返回推送结果

4. 云函数核心代码(sendPushNotification)

const appId = '__UNI__D2F0A5C';  
const pushManager = uniCloud.getPushManager({ appId });  
const pushResult = await pushManager.sendMessage({  
    push_clientid: finalPushClientIds,  
    title: title,  
    content: content,  
    payload: pushPayload  
});

5. 推送接收处理(App.uvue)

onPushMessage(res) {  
    // 解析推送消息  
    let title = res.title || '';  
    let content = res.content || '';  
    let payload = res.payload || {};  

    // 创建本地通知  
    uni.createPushMessage({  
        title: title,  
        content: content,  
        success: () => {  
            console.log('[推送] 本地通知创建成功');  
        },  
        fail: (err) => {  
            console.error('[推送] 本地通知创建失败:', err);  
        }  
    });  
}  

## 遇到的问题  

### 现象  
- 船长点击"出行提醒"后,云函数日志显示推送发送成功:  

[云函数推送] sendMessage调用结果: {"errCode":0,"errMsg":"success","data":{"data":{"pushClientId":"xxx","status":"successed_online"}}}


- 但客户端手机通知栏未收到任何推送提醒  

### 已排查的情况  
1. ✅ 云函数执行成功,无错误日志  
2. ✅ 云函数正确查询到用户设备的CID  
3. ✅ 推送参数格式正确  
4. ✅ 客户端已获取并上传CID到数据库  
5. ✅ 客户端已实现onPushMessage监听  
6. ✅ 用户设备处于在线状态  
7. ✅ 应用推送权限已开启  
### 1. 使用DCloud开发者中心测试  
- 登录DCloud开发者中心  
- 进入uni-push 2.0模块  
- 使用获取到的CID直接发送测试推送,CID调试成功,可以成功推送到客户端  

下面?附件中是云函数调用日志  
2026-01-02 18:09 负责人:无 分享
已邀请:
Ask小助手

Ask小助手 - Ask社区AI助手

该问题请在专业群( uni-app x技术交流群 ) 咨询,群中有相关专业的管理员和群友。

根据您描述的情况,云函数显示推送成功但客户端收不到通知,结合uni-app x特性分析如下:

核心问题:iOS平台对推送有特殊限制,即使云函数返回成功,也可能因系统级拦截导致通知不显示。

解决方案

  1. iOS证书配置检查:确保在苹果开发者中心正确配置了APNs证书,并在manifest.json中关联了正确的.p12证书和密码(参考文档

  2. 通知权限请求:iOS需在应用启动时主动请求通知权限,添加以下代码:

    // App.uvue 中  
    onLaunch() {  
    if (process.env.UNI_PLATFORM === 'ios') {  
    uni.requestIOSNotificationAuthorization({  
      success: () => console.log('通知权限已开启')  
    })  
    }  
    }
  3. 厂商通道配置:Android设备需确认已在UniPush控制台配置各厂商通道(华为/小米等),特别是离线推送场景(文档说明

  4. 调试建议

    • onPushMessage中添加详细日志,确认是否收到透传消息
    • 测试时使用payload强制指定sound: "default"避免静音问题
    • 检查手机是否开启"勿扰模式"或电池优化限制

注意:iOS推送受系统严格控制,即使服务端返回成功,若设备处于低电量模式/后台限制等情况也可能不显示。建议通过苹果推送测试工具验证证书有效性。

内容为 AI 生成,仅供参考

要回复问题请先登录注册