消息通知對于某些應用是非常有用的,APP發(fā)送消息通知基本是沒有限制的,而微信小程序是通過微信的模板消息通知實現(xiàn)的,微信模板消息目前來看還是通知非常有效,不存在垃圾信息過多的問題,還可以通過點擊消息直接進入應用詳細。如下圖所示
但是,為了防止應用亂發(fā)通知,小程序做了一些限制,只有兩種方法可以給用戶發(fā)送模板消息,一是用戶支付后可發(fā)送3條模板消息;二是頁面發(fā)生一次提交表單行為可發(fā)送1條模板消息,而且有個期限是7天內。如果某些應用需要多次發(fā)送模板消息怎么辦呢?比如最近我們做的一個項目,涉及到多人物物交換,如果一個人發(fā)布了一個物品,可能收到多個人的交換請求,而如果交換請求不通過模板消息推送給用戶的話,那么這個應用就是缺失的。
7天內無限次發(fā)送模板消息的做法很簡單,就是根據(jù)“提交1次表單可推送1條模板消息,多次提交表單之間是相互獨立的”這個規(guī)則,只要在小程序前端,收集足夠多的formid就行了。比如把用戶所有的點擊都做成form表單提交,把想要的鏈接做成表單提交。但在實際操作中會遇到以下問題,因為只有button組件才能提交表單,如果要把文字鏈接和圖片按鈕做成表單提交,需要在上面套一個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組件在小程序里是有默認樣式的,你會發(fā)覺樣式變得非常難看,如下圖。
本來樣式是這樣的?加了form和button組件后變成了這樣
如何解決呢?最好的方式就是通過CSS定義覆蓋原有button的樣式。于是,我們程序員寫出了通用的代碼,適用于整個小程序。
?
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;}
有個小問題需要注意一下,就是原來傳遞的data數(shù)據(jù)需要加在form上面。
然后剩下的問題就是后臺把收集到的formid都上傳到后臺服務器保存,同時記錄過期時間。
服務器最好有個定時刪除過期formid的功能,增加查找可用formid的速度。
后臺發(fā)送模板消息的功能實現(xiàn)這里就不多說了,可以參考官方文檔。