日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

微信云开发通过定时任务,对用户进行消息推送。

發布時間:2023/12/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 微信云开发通过定时任务,对用户进行消息推送。 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

微信云開發通過定時任務,對用戶進行消息推送。

用到的API:

  • wx.requestSubscribeMessage (調起客戶端小程序訂閱消息界面),文檔地址。
  • openapi.subscribeMessage.send(向客戶端發送訂閱消息)文檔地址。
  • 定時觸發器 (在相應時間點被自動觸發)文檔地址
  • 實現步驟

  • 在小程序后臺 選擇模板 > 添加模板。
  • 客戶端申請用戶統一推送。
  • wx.requestSubscribeMessage({tmplIds: ['剛剛選用的模板的ID'],success: (res) => {console.log(res);// 在res中,你的模板ID為key。if(res.你的模板ID == 'accept'){wx.showToast({title: '已開啟提醒',icon: 'success',duration: 2000});}else{wx.showToast({title: '開啟失敗',icon: 'error',duration: 2000});}},fail: (err) => {console.log("err", err)}})
  • 新建一個云函數,此云函數中存放定時推送邏輯。

    index.js作為此函數的入口文件,代碼如下,根據業務,通過日期進行比較,獲取哪些用戶需要推送
    updateTask.testFun 實現推送。
  • // 云函數入口文件 const updateTask = require('./updateTask/index');const cloud = require('wx-server-sdk')cloud.init({/* */env: cloud.DYNAMIC_CURRENT_ENV });const getNowDate = (sameDay) => {var date = new Date();if (sameDay == '2') {date.setTime(date.getTime() + 1 * 24 * 60 * 60 * 1000);}//此處添加是否為前一天推送的判斷var seperator1 = "-"; //格式分隔符var year = date.getFullYear(); //獲取完整的年份(4位)var month = date.getMonth() + 1; //獲取當前月份(0-11,0代表1月)var strDate = date.getDate(); // 獲取當前日(1-31)if (month >= 1 && month <= 9) month = '0' + month; // 如果月份是個位數,在前面補0if (strDate >= 0 && strDate <= 9) strDate = '0' + strDate; // 如果日是個位數,在前面補0let currentdate = year + seperator1 + month + seperator1 + strDate;return currentdate; }// 云函數入口函數 exports.main = async (event, context) => {//獲取需要推送的紀念日var userList = await updateTask.getJinianri(event, context);if (userList.data && userList.data.length > 0) {userList = userList.data;var needPushUserList = [];for (var p = 0; p < userList.length; p++) {let nowDate = getNowDate(userList[p].sameDay);nowDate = nowDate.slice(5);let startTime = userList[p].startTime;startTime = startTime.slice(5);if (startTime == nowDate) { //判斷當前日期是否和用戶設置的日期相等,如果相等,則推送提醒給該用戶needPushUserList.push(userList[p]);}}// return needPushUserList2;var result2 = await updateTask.testFun(needPushUserList, context);return result2;} else {return userList;} }
  • updateTask.testFun 向客戶端進行 推送。
  • const testFun = async (event, context) => {return new Promise((resolve, reject) => {//數據庫查詢結果var msgArr = event;// 循環消息列表const sendPromises = msgArr.map(async msgData => {try {// 發送訂閱消息// 其中data中的字段 thing1,time2,thing3是根據在后臺選用的模板來設置的。參照下方圖片await cloud.openapi.subscribeMessage.send({"touser": msgData.openId,"templateId": '你的模板ID',"page": 'pages/home/index',"data": {"thing1": {"value": msgData.sameDay == '2'? '明天是【' + msgData.typeName+'】' : '今天是【' + msgData.typeName+'】'},"time2": {"value": msgData.startTime},"thing3": {"value": msgData.remarks},},// "miniprogramState": 'trial',"lang": 'zh_CN',});//推送后,根據ID修改紀念日狀態return db.collection('jinianri').doc(msgData._id).update({data: {pushState: 2, //設置為已推送pushTime:+new Date()},})} catch (e) {return '推送失敗';}})// return Promise.all(sendPromises);resolve(msgArr);}); };

    模板詳情

    5. 通過定時任務,觸發推送函數。

    其中config代表推送的具體時間和頻次,類型為cron 表達式,可通過在線網址生成。cron在線生成

  • 創建完成后,除了上傳并部署這個云函數外,還要記得 上傳觸發器!
  • 可以通過 云開發控制臺中的 云函數>日志 模塊,查看此定時器的執行日志

    這就是完整的設計邏輯了。
  • 不用糾結為什么會自動執行這個定時任務。因為:

  • 云函數入口文件為 index.js,默認執行函數的中的 index.main方法。如圖
  • 記得修改一下云函數的配置,添加一個環境變量,不然會出現時區不對的問題。如圖
  • 體驗小程序

    微信搜索 “生活紀念日助手”

    總結

    以上是生活随笔為你收集整理的微信云开发通过定时任务,对用户进行消息推送。的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。