Skip to content

UniPush2.0 消息推送

开通

登录 DCloud 开发者中心,在左侧菜单栏找到 uni-push 2.0(支持全端推送) 选择要操作的应用,开通 uniPush 服务即可

需要填写的就是 Android 包名、Android 应用签名、iOS 应用 BundleID 和 选择关联云服务空间

配置

需要配置各手机应用厂商的消息推送(比较麻烦)

客户端接收

manifest.json 中的 App 模块配置需要开启 Push 消息推送,选择 uniPush 2.0

  • 在线推送
  • 离线推送(需要各手机应用市场支持)

image.png

区别:

  • 当应用在线时,不会创建“通知栏消息”,此时客户端会立即监听到消息内容
  • 如果你希望当应用在线时,也通过“通知栏消息”来提醒用户;可以通过以下两种方式实现
    • 手动调用创建本地消息 API uni.createPushMessage 创建通知栏消息
    • 服务端执行推送时,传递参数 force_notification:true,客户端就会自动创建“通知栏消息”(此时你监听不到消息内容),当用户点击通知栏消息后,APP才能监听到消息内容

客户端要监听推送消息

vue
<script>
export default {
  onLaunch: function () {
    // 监听消息通知
    uni.onPushMessage((res) => {
      console.log('收到推送消息:', res); //监听推送消息
    });
  },
};
</script>

获取客户端用户推送标识,如果我们需要指定给某些用户发送推送消息,就需要知道该设备的客户端推送标识。

javascript
uni.getPushClientId({
  success: (res) => {
    let push_clientid = res.cid;
    console.log('客户端推送标识:', push_clientid);
  },
  fail(err) {
    console.log(err);
  },
});

服务端推送

通过uniCloud云函数来实现推送,创建一个新的云函数并且依赖 uni-cloud-push 扩展库

云函数中调用 uni-cloud-push扩展库的 sendMessage 方法,向客户端推送消息。

后续可以将这个云函数URL化,供其他服务使用HTTP形式调用推送接口

javascript
'use strict';

//注意这里需要传入你的应用appId,用于指定接收消息的客户端
const uniPush = uniCloud.getPushManager({
  appId: '__UNI__805D8DE',
});

exports.main = async (event, context) => {
  console.log('event->>>>', event);
  // QueryParams -> event.queryStringParameters
  // Body -> JSON.parse(event.body)
  return await uniPush.sendMessage({
    // 填写上一步在uni-app客户端获取到的客户端推送标识push_clientid
    push_clientid: ['49bedf77cd89dd2d5b058dd03a1fb9e5', '5ca73311443a1d14a91365f52be82345'],
    title: '系统通知',
    content: '系统通知内容',
    payload: {
      id: 61,
      type: 0,
    },
    // 强制推送,无论是离线推送还是在线推送都自创建通知栏消息
    force_notification: true,
  });
};

离线推送

华为推送(可以不用上架应用市场就可以进行推送)

根据个推提供的文档配置相关参数

在华为推送服务后台配置中申请自分类权益(不然会有推送限制)https://docs.getui.com/getui/mobile/vendor/qps/

在 options HW 配置 /message/android/category: 'xx',具体的值就根据自分类权益来看 https://developer.huawei.com/consumer/cn/doc/HMSCore-Guides/message-classification-0000001149358835#section1085395991513

其他:在测试离线推送之前可以先设置 /message/android/target_user_type': 1,(华为用于发送测试推送消息,生产不要设置)

踩坑文章1:https://ask.dcloud.net.cn/question/181496