消息通知對(duì)于某些應(yīng)用是非常有用的,APP發(fā)送消息通知基本是沒(méi)有限制的,而微信小程序是通過(guò)微信的模板消息通知實(shí)現(xiàn)的,微信模板消息目前來(lái)看還是通知非常有效,不存在垃圾信息過(guò)多的問(wèn)題,還可以通過(guò)點(diǎn)擊消息直接進(jìn)入應(yīng)用詳細(xì)。如下圖所示
但是,為了防止應(yīng)用亂發(fā)通知,小程序做了一些限制,只有兩種方法可以給用戶發(fā)送模板消息,一是用戶支付后可發(fā)送3條模板消息;二是頁(yè)面發(fā)生一次提交表單行為可發(fā)送1條模板消息,而且有個(gè)期限是7天內(nèi)。如果某些應(yīng)用需要多次發(fā)送模板消息怎么辦呢?比如最近我們做的一個(gè)項(xiàng)目,涉及到多人物物交換,如果一個(gè)人發(fā)布了一個(gè)物品,可能收到多個(gè)人的交換請(qǐng)求,而如果交換請(qǐng)求不通過(guò)模板消息推送給用戶的話,那么這個(gè)應(yīng)用就是缺失的。
7天內(nèi)無(wú)限次發(fā)送模板消息的做法很簡(jiǎn)單,就是根據(jù)“提交1次表單可推送1條模板消息,多次提交表單之間是相互獨(dú)立的”這個(gè)規(guī)則,只要在小程序前端,收集足夠多的formid就行了。比如把用戶所有的點(diǎn)擊都做成form表單提交,把想要的鏈接做成表單提交。但在實(shí)際操作中會(huì)遇到以下問(wèn)題,因?yàn)橹挥衎utton組件才能提交表單,如果要把文字鏈接和圖片按鈕做成表單提交,需要在上面套一個(gè)form和button組件,如下代碼
?
form bindsubmit="goto_index" report-submit="true">
button class="form_button" form-type="submit">
image src="/images/btn_see_auto.png" mode="aspectFit" >image>
button>
form>
而button組件在小程序里是有默認(rèn)樣式的,你會(huì)發(fā)覺(jué)樣式變得非常難看,如下圖。
本來(lái)樣式是這樣的?加了form和button組件后變成了這樣
如何解決呢?最好的方式就是通過(guò)CSS定義覆蓋原有button的樣式。于是,我們程序員寫(xiě)出了通用的代碼,適用于整個(gè)小程序。
?
button.form_button{background-color:transparent;padding:0;margin:0;display:inline;position:static;border:0;padding-left:0;padding-right:0;border-radius:0;font-size:0rpx;color:transparent;}
button.form_button::after{content:'';width:0;height:0;-webkit-transform:scale(1);transform:scale(1);display:none;background-color:transparent;}
有個(gè)小問(wèn)題需要注意一下,就是原來(lái)傳遞的data數(shù)據(jù)需要加在form上面。
然后剩下的問(wèn)題就是后臺(tái)把收集到的formid都上傳到后臺(tái)服務(wù)器保存,同時(shí)記錄過(guò)期時(shí)間。
服務(wù)器最好有個(gè)定時(shí)刪除過(guò)期formid的功能,增加查找可用formid的速度。
后臺(tái)發(fā)送模板消息的功能實(shí)現(xiàn)這里就不多說(shuō)了,可以參考官方文檔。