关于使用uni-push实现消息推送--云函数url化

首先需要了解的:

  1. uni-push2统一推送 | uni-app官网【如何通过云函数去进行消息推送,1.0也需要了解】
  2. 使用场景 | uniCloud 【云函数url化】
  3. 开发者中心 【配置各厂商证书,通过开发者后台测试推送】
  4. uni-push2.0 常见问题 - DCloud问答 【涉及到最多的应该是获取cid的状态】
  5. 开发者中心 【检查cid状态】

  6. 开通 | uni-app官网 【设置推送图标--需要在正式包上测试,真机(基座)测试可能不太行】
  7. uniCloud 【各厂商消息推送的参数】

  8. 厂商通道限额&QPS说明-个推文档中心 【各厂商消息推送的限制的说明】

由于业务需要在管理后台进行相应的配置,然后进行消息推送,也就是说要服务端配合,所以就需要uniapp云函数的url。

云函数编写起来其实也就是普通的js,要查看云函数打印的语句或者参数什么的,要去云控制台进行查看:

在云函数列表中,找到你自己创建的云函数;

下面这篇文章介绍的也算详细,十有八九都有:

unipush2.0实现APP消息推送(1)_unipush.sendmessage-CSDN博客

创建云函数的例子:

// 简单的使用示例
'use strict';
const uniPush = uniCloud.getPushManager({
   // 换成自己小程序的appid,应该manifest.json中找到,hbuilderx创建的项目应该好找一点
   appId: 'xxx',
});

function getRandomString(minLength, maxLength) {
   const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';
   const charactersLength = characters.length;
   const length = Math.floor(Math.random() * (maxLength - minLength + 1)) + minLength;
   let result = '';
   for (let i = 0; i < length; i++) {
      result += characters.charAt(Math.floor(Math.random() * charactersLength));
   }
   return result;
}

//注意这里需要传入你的应用appId,用于指定接收消息的客户端
exports.main = async (event, context) => {
   console.log('推送事件', event.body);

   const obj = JSON.parse(event.body);

   const newData = {
      push_clientid: obj?.push_clientid,
      title: obj?.title,
      content: obj?.content,
      platform: obj?.platform,
      payload: obj?.payload,
      badge: Number(obj?.badge) >= 0 ? obj?.badge : '+0',
      // 这些可以前端自己写死
      settings: {
         ttl: 3600000,
      },
      options: {
         // 小米消息分类相关分类
         XM: {
            // 这是一个实例 换成自己实际申请的
            '/extra.channel_id': '1230xx',
         },
      },
      // 服务端(云函数)创建消息推送(离线的--通知栏消息),一定要带上这个属性
      force_notification: true,
      request_id: new Date().valueOf() + '',
   };
   console.log('拼装的数据', newData);

   const data = await uniPush.sendMessage(newData);

   console.log('data的数据', data);

   if (data.errCode === 0 && data.errMsg === 'success') {
      return {
         ...data,
      };
   } else {
      return {
         data,
         event,
      };
   }
};

关于离线推送还需要注意的:

获取cid:

还有一点,虽然使用的是2.0版本的消息推送,但是获取cid还是要通过1.0的方式去实现,否则获取到的cid是有问题的,不能接收到离线推送的消息

获取到的正确的cid的状态:

获取cid相关的代码:【建议放在app.vue中的onLaunch方法中,还有就是用户登录成功的地方

       // 获取个推id
       try {
         // #ifdef APP-PLUS
         plus.push.getClientInfoAsync(async (info) => {
            let cid = info['clientid'];
            console.log('获取的手机信息', info);
            const lifeData = uni.getStorageSync('lifeData') || null;
            const data = await getUserCid();
            console.log('获取的cid', data);
            if (lifeData && cid !== data?.data?.cid) {
               // 请求服务端接口
               await putUserCid(cid);
            }
         });
         // #endif
      } catch (err) {
         throw new Error(JSON.stringify(err));
      }

点击通知栏,获取推送的信息:

在这里可以进行页面的跳转等;

经过实践,接收推送的内容时,1.0版本的方法不管用,还是使用2.0版本的方法

uni.onPushMessage((res) => {
         console.log('获取到的推送消息', res);
         uni.navigateTo({
            url: res?.data?.payload?.appPushPath,
            fail() {
               uni.switchTab({
                  url: res?.data?.payload?.appPushPath,
               });
            },
         });
      });

以上就是使用uni-push实现消息推送需要了解的内容以及可能遇见的坑,但愿能够帮助到可爱的你们~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值