生活随笔
收集整理的這篇文章主要介紹了
微信云开发通过定时任务,对用户进行消息推送。
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
微信云開發通過定時任務,對用戶進行消息推送。
用到的API:
wx.requestSubscribeMessage (調起客戶端小程序訂閱消息界面),文檔地址。openapi.subscribeMessage.send(向客戶端發送訂閱消息)文檔地址。定時觸發器 (在相應時間點被自動觸發)文檔地址
實現步驟
在小程序后臺 選擇模板 > 添加模板。客戶端申請用戶統一推送。
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
)}})
新建一個云函數,此云函數中存放定時推送邏輯。
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(); 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 向客戶端進行 推送。
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. 通過定時任務,觸發推送函數。
其中config代表推送的具體時間和頻次,類型為cron 表達式,可通過在線網址生成。cron在線生成
創建完成后,除了上傳并部署這個云函數外,還要記得 上傳觸發器!。可以通過 云開發控制臺中的 云函數>日志 模塊,查看此定時器的執行日志
這就是完整的設計邏輯了。
不用糾結為什么會自動執行這個定時任務。因為:
云函數入口文件為 index.js,默認執行函數的中的 index.main方法。如圖記得修改一下云函數的配置,添加一個環境變量,不然會出現時區不對的問題。如圖
體驗小程序
微信搜索 “生活紀念日助手”
總結
以上是生活随笔為你收集整理的微信云开发通过定时任务,对用户进行消息推送。的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。