请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

订阅消息

订阅消息的提示为什么只有自己这里能收到提示呀,如果评论完不是应该提示楼主吗,还是我代码有问题呀
js:
onSend() {
const templateId = '0UJj5EVXsdAZ7QKdmBUVSe63BgQUk7azzxwmJu4LGk4’
wx.requestSubscribeMessage({
tmplIds: [templateId],
success(res) {
if (res[templateId] == ‘accept’) {
//用户同意了订阅,允许订阅消息
wx.showToast({
title: ‘订阅成功’
})
} else {
//用户拒绝了订阅,禁用订阅消息
wx.showToast({
title: ‘订阅失败’
})
}
},
fail(err) {
console.error(err)
}
})
//插入数据库
let content = this.data.content
if (content.trim() == ‘’) {
wx.showModal({
title: ‘评论内容不能为空’,
content: ‘’,
})
return
}
wx.showLoading({
title: ‘评价中’,
mask: true,
})
db.collection(‘blog-comment’).add({
data: {
content,
createTime: db.serverDate(),
blogId: this.properties.blogId,
nickName: userInfo.nickName,
avatarUrl: userInfo.avatarUrl
}
}).then((res) => {

    wx.cloud.callFunction({
      name: 'sendMessage',
      data: {
        content,
        blogId: this.properties.blogId
      }
    }).then((res) => {
      // console.log(res)


      wx.hideLoading()
      wx.showToast({
        title: '评论成功',
      })
      this.setData({
        modalShow: false,
        content: ''
      })
      //父元素刷新评论页面
      this.triggerEvent('refreshCommentList')
    })
  })
},

云函数:
// 云函数入口文件
const cloud = require(‘wx-server-sdk’)

cloud.init()

// 云函数入口函数
exports.main = async (event, context) => {

try {
const wxContext = cloud.getWXContext()
const templateId = ‘0UJj5EVXsdAZ7QKdmBUVSe63BgQUk7azzxwmJu4LGk4’

return await cloud.openapi.subscribeMessage.send({
  touser: wxContext.OPENID,
  page: `/pages/blog-comment/blog-comment?blogId=${event.blogId}`,
  lang: 'zh_CN',
  data: {
   
    thing4: {
      value: '您有新的评论'
    },
    thing1: {
      value: event.content
    }
  },
  templateId: templateId,
  miniprogramState: 'developer'
})
console.log(result)
return result

} catch (err) {
console.log(err)
return err
}
}
订阅消息:
模板ID 0UJj5EVXsdAZ7QKdmBUVSe63BgQUk7azzxwmJu4LGk4
模板编号 5104
标题 留言评论提醒
类目 教育信息服务

详细内容
评论结果 {{thing4.DATA}}
评论内容 {{thing1.DATA}}

正在回答

2回答

你这里填的是自己的openid,肯定就是自己收到了。

https://img1.sycdn.imooc.com/szimg/5ea2fb8e09d9a2f107160436.jpg


0 回复 有任何疑惑可以回复我~
  • 提问者 慕粉2138437036 #1
    好的,我能否把res[templateId]设置成accept,这样就不用每次都点确认了,如果设置成accept最好在哪里设置呢
    回复 有任何疑惑可以回复我~ 2020-04-25 10:09:10
  • 谢成 回复 提问者 慕粉2138437036 #2
    不可以,因为用户有可能是拒绝订阅的。
    回复 有任何疑惑可以回复我~ 2020-04-25 11:31:14
  • 提问者 慕粉2138437036 回复 谢成 #3
    好的,我修改云函数之后获取到的openid字段用不了// 云函数入口文件
    const cloud = require('wx-server-sdk')
    
    cloud.init()
    const db = cloud.database()
    let blog = {}
    // 云函数入口函数
    exports.main = async (event, context) => {
      let blogId = event.blogId
      try {
         blog = await db.collection('blog').where({
          _id: blogId
        }).get().then((res)=>{
          return res.data
        })
       
        const templateId = '0UJj5EVXsdAZ7QKdmBUVSe63BgQUk7azzxwmJu4LGk4'
        
        return await cloud.openapi.subscribeMessage.send({
          touser: blog._openid,
          page: `/pages/blog-comment/blog-comment?blogId=${event.blogId}`,
          lang: 'zh_CN',
          data: {
           
            thing4: {
              value: '您有新的评论'
            },
            thing1: {
              value: event.content
            }
          },
          templateId: templateId,
          miniprogramState: 'developer'
        })
        console.log(result)
        return result
      } catch (err) {
        console.log(err)
        return err
      }
    
      
    
    
    
    }
    
    麻烦老师给看一下
    回复 有任何疑惑可以回复我~ 2020-04-25 11:46:07
谢成 2020-04-25 22:47:49


从问的问题上看,我觉得现在的主要问题,是还没有真的明白订阅消息的意思,应该没有明白课程中的模板消息的意思。两种消息推送方式道理是一样的,都是谁订阅或者谁产生formid就给谁推送消息,不能随便给无关的人推送消息。模板消息我们就先不提了,现在也不让使用了。


订阅消息文档: https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/subscribe-message.html

1、这个是要谁订阅了这个消息,才能给谁推送,你这里应该是评论人订阅了,那么只能给评论人推送。不可能说评论人订阅的,去给作者去推送,这样会骚扰用户因为作者没有订阅,这是小程序不能允许的。

https://img1.sycdn.imooc.com//szimg/5ea44b5c09a3682507570212.jpg

2、模板中配置的一次订阅:

https://img1.sycdn.imooc.com//szimg/5ea44b7209d975de09740565.jpg

也就是说订阅一次只能推送一次消息。


所以如果你认真使用过其他小程序的话就会发现,如果是给别人推送,一般都是小程序结合公众号来推送,因为这种推送限制更宽松,这种需要企业账号来完成。

而小程序直接推送更适合比如我去订票了或者我去定外卖了,我预定成功了,给我推送。注意这里的主角都是我,不是别人。因为订票一次,相当于订阅一次,如果是模板消息的话就相当于产生了一个formid,所以可以给我推送一次,注意只是一次。


其实多看看官方文档就能清楚小程序这么限制的初衷了,就是小程序不能随意骚扰用户,所以订阅权都是在用户手里,一定要在用户授权同意的情况下才能推送。


希望通过上面的回答,可以帮助到你。



2 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信