首页 » 产品日记 » 正文

微信小程序订阅消息前端篇(5.4)

前面说过了,小程序订阅消息的前提是需要根据小程序的类目选择消息模版,拿到模版ID。

先贴用户授权消息唤起的代码:

tosubscribe() {
                //触发订阅消息,此处模板ID要与后端同步
                uni.requestSubscribeMessage({
                    tmplIds: [
                        //这里是从小程序后台获取的模版ID
                                                       ],
                    success(res) {
                        console.log('成功')
                    },
                    fail(res) {
                        console.log('失败')
                    },
                    complete(res) {
                        // 授权不管成功还是取消、失败都跳转
                        uni.reLaunch({
                            url: '/pages/index/index'
                        })

                    }
                })
            },

这里用到的api是uni.requestSubscribeMessage,可以发起订阅授权申请,如果有多个消息模版,就要把多个模版ID都放到tmplIds里,这时用户界面显示的将是多个需要用户同意的模版消息选项。这里我把授权申请放到了一个方法里,然后在添加物品完成的时候调用。

注意,官方的说法是用户发生点击行为或者发起支付回调后,才可以调起订阅消息界面,非支付回调有可能无法唤起,普通的请求回调也将无法唤起,经过我测试,不是无法唤起,是经常会唤起失败,有时候微信开发工具和真机调试也会有差异。

用户的点击事件代码:

          add(){
            //  点击保存按钮
                var _this = this

                var rule = [{
                        name: "name",
                        checkType: "string",
                        checkRule: "2,8",
                        errorMsg: "商品名称应为2-8个字"
                    },
                    {
                        name: "id",
                        checkType: "reg",
                        checkRule: "^[1-9][0-9]*$",
                        errorMsg: "请选择商品分类"
                    }
                ];
                var checkRes = graceChecker.check(_this.data, rule);
                if (checkRes) {
                    //本地验证通过,添加操作
                        let url = 添加接口
                        _this.uploadpic(url) //数据保存方法
                        // 仅添加物品时发起用户订阅消息授权
                        // 注意用户授权需要主动触发,丢到回调里面有可能会失败
                        _this.tosubscribe()
                        //这里把授权放到数据保存的后面,然后把跳转丢到tosubscribe里面,不管成功与否都跳

                } else {
                    uni.showToast({
                        title: graceChecker.error,
                        icon: "none",
                        duration: 1000
                    })

                }
            }

到这里订阅消息的前端部分完成了,明天写后端部分。

发表评论