生活随笔
收集整理的這篇文章主要介紹了
微信云开发通过定时任务,对用户进行消息推送。
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
微信云開發(fā)通過定時(shí)任務(wù),對(duì)用戶進(jìn)行消息推送。
用到的API:
wx.requestSubscribeMessage (調(diào)起客戶端小程序訂閱消息界面),文檔地址。openapi.subscribeMessage.send(向客戶端發(fā)送訂閱消息)文檔地址。定時(shí)觸發(fā)器 (在相應(yīng)時(shí)間點(diǎn)被自動(dòng)觸發(fā))文檔地址
實(shí)現(xiàn)步驟
在小程序后臺(tái) 選擇模板 > 添加模板。客戶端申請(qǐng)用戶統(tǒng)一推送。
wx
.requestSubscribeMessage({tmplIds: ['剛剛選用的模板的ID'],success: (res) => {console
.log(res
);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
)}})
新建一個(gè)云函數(shù),此云函數(shù)中存放定時(shí)推送邏輯。
index.js作為此函數(shù)的入口文件,代碼如下,根據(jù)業(yè)務(wù),通過日期進(jìn)行比較,獲取哪些用戶需要推送
updateTask.testFun 實(shí)現(xiàn)推送。
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(); var month
= date
.getMonth() + 1; var strDate
= date
.getDate(); if (month
>= 1 && month
<= 9) month
= '0' + month
; if (strDate
>= 0 && strDate
<= 9) strDate
= '0' + strDate
; let 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
]);}}var result2
= await updateTask
.testFun(needPushUserList
, context
);return result2
;} else {return userList
;}
}
updateTask.testFun 向客戶端進(jìn)行 推送。
const testFun = async (event, context) => {return new Promise((resolve, reject) => {var msgArr
= event
;const sendPromises
= msgArr
.map(async msgData => {try {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
},},"lang": 'zh_CN',});return db
.collection('jinianri').doc(msgData
._id
).update({data: {pushState: 2, pushTime:+new Date()},})} catch (e
) {return '推送失敗';}})resolve(msgArr
);});
};
模板詳情
5. 通過定時(shí)任務(wù),觸發(fā)推送函數(shù)。
其中config代表推送的具體時(shí)間和頻次,類型為cron 表達(dá)式,可通過在線網(wǎng)址生成。cron在線生成
創(chuàng)建完成后,除了上傳并部署這個(gè)云函數(shù)外,還要記得 上傳觸發(fā)器!。可以通過 云開發(fā)控制臺(tái)中的 云函數(shù)>日志 模塊,查看此定時(shí)器的執(zhí)行日志
這就是完整的設(shè)計(jì)邏輯了。
不用糾結(jié)為什么會(huì)自動(dòng)執(zhí)行這個(gè)定時(shí)任務(wù)。因?yàn)?#xff1a;
云函數(shù)入口文件為 index.js,默認(rèn)執(zhí)行函數(shù)的中的 index.main方法。如圖記得修改一下云函數(shù)的配置,添加一個(gè)環(huán)境變量,不然會(huì)出現(xiàn)時(shí)區(qū)不對(duì)的問題。如圖
體驗(yàn)小程序
微信搜索 “生活紀(jì)念日助手”
總結(jié)
以上是生活随笔為你收集整理的微信云开发通过定时任务,对用户进行消息推送。的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。