wx小程序客户端订阅消息

文章目录

    • 文章参考
    • 问题描述
    • 过程描述
    • 案例描述

文章参考

  1. 小程序订阅消息
  2. wx小程序订阅消息概念和应用场景理解(一次性消息一定要人手动触发)
  3. wx小程序开发工具模拟订阅消息进入小程序
  4. wx.requestSubscribeMessage
  5. wx兼容处理

问题描述

  1. 需求是要做一个拜访预约流程,预约审核通过之后,就需要依托微信的推送能力,向微信客户端推送一条消息,告知用户审核已经通过,可以访问了
  2. 由于微信官方宣布小程序模板消息接口将于2020年1月10日下线,原因参考wx小程序订阅消息概念和应用场景理解(一次性消息一定要人手动触发)
  3. 因此只能选择订阅消息实现消息提醒

过程描述

  1. 用户手动主动触发同意推送的方法(wx.requestSubscribeMessage),代码自动执行该方法不起作用
  2. 调用一次wx.requestSubscribeMessage方法,后台就只能推送一次该消息,点击多也只有次生效
  3. wx.requestSubscribeMessage(Object object)基础库 2.8.2 开始支持,低版本需做兼容处理。

案例描述

// 发送订阅请求
requestSubscribeMessageAction: function(callback, typeStr, urlStr) {
	const that = this;				
	uni.requestSubscribeMessage({
		// 访问申请成功的消息提醒
		tmplIds: ['1234567890-=wsrftgyhujikolxcvbnm,'],
		success: function(res) {
			console.log('订阅成功');
			// 如果有回调函数,则调用回调函数
			if (callback) {
				callback(typeStr, urlStr)
			}
		}
	});
},
// 页面跳转
goPage: function (eventObj) {
	let version = this.getWxVersion()
	// var urlStr = eventObj.currentTarget.dataset.url
	// console.log(urlStr);
	// 如果已经发生了订阅,则不用再次订阅了
	if (this.isSubMessage) {
		this.jumpProtocolPage(typeStr, urlStr)
	} else {
		// console.log(hikTools.wxCompareVersion(this.version, '2.8.2 '));
		// 如果当前SDK 版本大于2.8.2, 则发送订阅,如果没有,则直接跳转
		if (hikTools.wxCompareVersion(this.version, '2.8.2 ') >= 0) {
			this.requestSubscribeMessageAction(this.jumpProtocolPage, typeStr, urlStr)
		} else {
			this.jumpProtocolPage(typeStr, urlStr)
		}
	}
},
/**
 * 微信版本比较, v1 大于 v2,返回1,否则返回 0
 * @param {Object} v1
 * @param {Object} v2
 */
function wxCompareVersion(v1, v2) {
  v1 = v1.split('.')
  v2 = v2.split('.')
  const len = Math.max(v1.length, v2.length)

  while (v1.length < len) {
    v1.push('0')
  }
  while (v2.length < len) {
    v2.push('0')
  }

  for (let i = 0; i < len; i++) {
    const num1 = parseInt(v1[i])
    const num2 = parseInt(v2[i])

    if (num1 > num2) {
      return 1
    } else if (num1 < num2) {
      return -1
    }
  }

  return 0
},

/**
 * 获取wx的版本号
 */
function getWxVersion () {
	return wx.getSystemInfoSync().SDKVersion
}

注意点:

  1. 要用户手动点击触发 goPage 方法
  2. 需要考虑sdk 兼容的版本
  3. 获取sdk版本的方法 wx.getSystemInfoSync().SDKVersion

你可能感兴趣的:(微信小程序,uni-app,hbuildx)