【经验分享】支付宝小程序订阅消息功能实操(前端篇)|江海计划

简介: 【经验分享】支付宝小程序订阅消息功能实操(前端篇)|江海计划

前言

小程序的属性是即用即走,如果用户访问完你的小程序后就流失了,那么怎样让用户再次回来使用你的小程序呢?

目前的手段有:发短信召回(短信里携带scheme地址,点击直接拉起小程序)以及这篇文章将要介绍的订阅消息功能。

先看下效果图:

简单来说就是:通过官方提供的能力,实现推送你的小程序消息到用户的支付宝首页,用户查看到后点击即可跳回你的小程序。

举个例子:你在青团社进行职位投递,当你投递后,商家录取你的投递信息,通过服务通知推送到支付宝app的首页或者push推送到你的手机锁屏界面,方便你快速了解当前投递进度情况。

前面简单的说了下订阅消息是用来干嘛的,那么接下来将会带你实操如何接入订阅消息功能。

订阅消息目前有两种调用方式:一种是基础库1.x版本的订阅消息插件、一种是基础库2.7.10以上的使用api的方式调用。

基础库1.x版本的插件调用方式已经淘汰了,这里就不做赘述了,强烈推荐大家更新到基础库2.x,然后使用2.7.10基础库提供的my.requestSubscribeMessage()方法

使用该能力需要挂载 消息(商家消息功能包、个人、企业主体都可调用

注意点

  • 调用消息订阅接口,一次性最多传入三个模板 id。
  • 基础库 v2.x 从 2.7.10 开始支持,(个人建议在小程序后台设置里,设置小程序线上最低基础库版本为2.7.10,同时观察影响人数,设置后低于该基础库的用户会提示更新支付宝App,如果不设置线上最低基础库版本,那么调用时会提示该api is not a function)
  • 基础库版本低于 2.7.15,不能和 web-view 组件共用,会被遮盖。
  • 可主动触发、可手动触发,即:可在onLoad里调用直接弹出提醒订阅,也可点击按钮后再触发订阅弹窗,支付宝官方未做限制。这里建议大家让用户手动触发,小程序首页onLoad里不要主动触发,在用户未做任何操作的情况下弹出,打断了用户的操作行为大概率审核不过
订阅消息分长期订阅消息,以及一次性订阅消息

长期订阅消息:订阅一次可以推送多次(单天推送有频率限制,比如一天只能推一次),不用每次都弹窗

一次性订阅消息:订阅一次推送一次,每次都会有订阅弹窗。

接下来实操如何使用:

通过选取配置了该小程序的订阅消息ID(https://opendocs.alipay.com/mini/01rnqx)。

这里吐槽一下:订阅消息入口在运营管理里,开发者查看时需要注意,初次使用以为在开发管理页面。

首先先写一个弹窗,引导用户点击订阅


目前模板ID我们是配置在数据库,使用不同的key去获取,没写死在代码里,方便替换:
// 获取订阅消息id并唤起订阅消息弹窗
handleSubscribe() {
   let postData = {
     key: 'ZFB_XXX_XXX_LIST'
   }
   this.$request.post('xxx', postData).then((res) => { // this.$request为封装的request请求方法。
     if (res.success) {
       my.requestSubscribeMessage({
         entityIds: res.data, // 这里获取到模板id数组,格式为['xxxxx', 'xxxxx']
         success: (res) => {
           const { result: { subscribeEntityIds = [] } = {} } = res // 返回已订阅的模板id,会将历史已订阅一起返回
           if (subscribeEntityIds.length) {
             const templateIds = subscribeEntityIds.join(',') // 将数组格式转为字符串格式,用于提交给服务端
             console.log('templateIds---->', templateIds)
             my.showToast({  // 提示用户订阅成功,也可用my.showToast
               content: `消息订阅成功`,
               type: 'success'
             })
             this.pushMerChant(templateIds) // 将用户选择的ID提交给服务端
           }
         },
         fail: err => { // 错误提示
           console.log(err)
         }
       })
     } else {
       util.toast(res.msg || '服务器错误,请稍后重试')
     }
   })
 },
 // 上报用户订阅的模版id
 pushMerChant(templateIds) {
   const aliUserId = util.getStorageSync('aliUserId') || '' // 获取缓存里的userid
   let postData = {
     aliUserId, // 用户的userId,用于给该用户推送模板消息
     templateIds  // 用户订阅的模板id
   }
   this.$request.post('/xxx/subscribe', postData)
 },
 
 // 以上为我们业务内的实现方式,而你们可以直接这样使用:
 my.requestSubscribeMessage({
   entityIds: ['xxxxx', 'xxxxx'],
   success: (res) => {
   const { result: { subscribeEntityIds = [] } = {} } = res // 返回已勾选的模板id
   if (subscribeEntityIds.length) {
      my.showToast({  // 提示用户订阅成功
        content: `消息订阅成功`,
        type: 'success'
      })
     }
  },
  fail: err => { // 错误提示
    console.log(err)
  }
})

调试时需要注意
  • IDE里订阅成功后,无法清除订阅授权记录,即:允许订阅后IDE里无法再弹出弹窗(目前该需求已反馈IDE产品童鞋,正在排期支持中~)
  • 真机清除授权数据:点击右上角三个点 > 点击弹窗里的设置 > 找到消息管理 点击你已订阅的该模板前的小icon即可解除授权。
为了不打扰到用户:

长期订阅消息:建议未订阅或者拒绝的用户弹窗一天一次,已订阅的就不再弹窗。

一次性订阅消息在用户有操作后按实际情况判断是否弹窗。

如果用户拒绝订阅怎么唤醒订阅:

用户拒绝并且点了不再提醒,大概率是不希望你打扰到TA,对于该类用户你可尝试:

通过订阅关系查询接口(https://opendocs.alipay.com/mini/02s1fd)查询用户用户是拒绝订阅还是保持拒绝订阅(拒绝订阅,不再提醒), 通过弹窗的方式引导用户开启订阅。(不建议使用

后语

至于大家发现的我的订阅弹窗里没有 “拒绝,不再提醒”,这是因为我们使用的是客户端渲染的消息订阅组件,这种方式官方不推荐。

因为客户端消息订阅组件小程序框架提供的消息订阅组件 是两套独立开发维护的,不保证 小程序的订阅消息新能力/新样式 在客户端消息订阅组件上提供,也不保证客户端订阅组件的更新率或者及时的bugfix。

我们使用该api是为了盖住小程序的tabbar,否则tabbar+订阅弹窗一起显示,达不到UI想要的效果。因未对外开放,所以这里就不赘述客户端渲染的消息订阅组件了。

欢迎大家有问题的反馈问题,有不懂的评论留言或钉钉私信。

目录
相关文章
|
22小时前
|
移动开发 小程序 前端开发
小程序的前端插件都有哪些?
【10月更文挑战第16天】小程序的前端插件都有哪些?
11 1
|
5天前
|
存储 自然语言处理 小程序
微信小程序多语言切换神器:简繁体切换功能完全指南
随着全球化的发展,支持多种语言的应用程序愈发重要。本文介绍了如何在微信小程序中实现简体与繁体字体之间的切换功能,以满足不同地区用户的需求。通过创建utils文件夹并编写相应的转换函数,开发者可以方便地实现语言切换,从而提升用户体验。文章中还附带了示例代码和效果图,帮助读者更好地理解和应用这一功能。
29 0
微信小程序多语言切换神器:简繁体切换功能完全指南
|
18天前
|
小程序 Linux Python
查找首字母与Python相关的的英文词汇小程序的续篇---进一步功能完善
查找首字母与Python相关的的英文词汇小程序的续篇---进一步功能完善
14 1
|
28天前
|
前端开发 API
(WEB前端编辑DWG)在线CAD如何实现图形识别功能
mxcad 提供的图形识别功能可帮助用户快速识别和提取 CAD 图纸中的各种图形,如直线、多段线、弧线、圆及图块,显著提升设计效率。此功能不仅适用于图形分类,还能进行数量统计和快速定位,减少手动操作。用户可通过 API 进行二次开发,自定义识别逻辑。具体步骤包括打开在线示例、选择识别功能、设置识别参数并开始识别。更多开发文档请关注公众号:梦想云图网页 CAD。
|
5天前
|
Web App开发 存储 前端开发
前端开发必备:requestAnimationFrame、setInterval、setTimeout——功能解析与优劣对比
前端开发必备:requestAnimationFrame、setInterval、setTimeout——功能解析与优劣对比
15 0
|
5天前
|
移动开发 前端开发 JavaScript
前端开发实战:利用Web Speech API之speechSynthesis实现文字转语音功能
前端开发实战:利用Web Speech API之speechSynthesis实现文字转语音功能
29 0
|
7天前
|
前端开发 JavaScript
前端中的“+”连接符,居然有鲜为人知的强大功能!
前端中的“+”连接符,居然有鲜为人知的强大功能!
29 0
|
9天前
|
前端开发 JavaScript Shell
深入解析前端构建利器:webpack核心概念与基本功能全览
深入解析前端构建利器:webpack核心概念与基本功能全览—
13 0
|
1月前
|
存储 JSON 前端开发
node使用token来实现前端验证码和登录功能详细流程[供参考]=‘很值得‘
本文介绍了在Node.js中使用token实现前端验证码和登录功能的详细流程,包括生成验证码、账号密码验证以及token验证和过期处理。
36 0
node使用token来实现前端验证码和登录功能详细流程[供参考]=‘很值得‘
|
1月前
|
前端开发 开发者
在前端开发中,webpack 作为一个强大的模块打包工具,为我们提供了丰富的功能和扩展性
【9月更文挑战第1天】在前端开发中,Webpack 作为强大的模块打包工具,提供了丰富的功能和扩展性。本文重点介绍 DefinePlugin 插件,详细探讨其原理、功能及实际应用。DefinePlugin 可在编译过程中动态定义全局变量,适用于环境变量配置、动态加载资源、接口地址配置等场景,有助于提升代码质量和开发效率。通过具体配置示例和注意事项,帮助开发者更好地利用此插件优化项目。
75 13