小程序URL Scheme规则调整支持方案

小程序URL Scheme规则修支持方案

小程序 URL Scheme URL Link 规则调整如下:

1.每个 URL Scheme 或 URL Link 有效期最长 30 天,均不再支持永久有效的链接、不再区分短期有效链接与长期有效链接;
2.链接生成后,若在微信外打开,用户可以在浏览器页面点击进入小程序。每个独立的链接被用户访问后,仅此用户可以再次访问并打开对应小程序,其他用户无法再次通过相同链接打开该小程序;
3.单个小程序每天生成链接数(URL Scheme 和 URL Link 总数)上限为 50 万条。
(详见 小程序链接生成与使用规则调整公告)

简单来说即:
1.URL SchemeURL Link 方式都是30天有效
2.一人一URL Scheme(URL Link),专属其他人访问无效。
3.每天生成的数量有上限50w

业务背景

1.我们使用的是URL Scheme 的方式
2.我们投放短信的链接是静态页面,且用户无需登录。也就意味着无法将用户的登录信息和URL Scheme 关联

思考

A: 那就用户每次访问都创建新的URL Scheme 即可
A:那如果活动访问量大的时候,可能会达到50w的上限
A:那有什么方式可以标示一下当前设备的id呢
A:既然没有登录态,那我们就在页面生成uuid,持久化到本地,每次使用取出存到cookie,请求后台接口的时候携带。

流程描述

前端

1.生成uuid
2.存到localStorage中
3.存到cookie中
4.请求的时候自动带上uuid字段
5.同一设备再次打开页面。从localStorage中获取uuid 存到cookie中。如无则从新走步骤1

后台

1.从请求头中获取uuid,
2.如果无该uuid的记录则,调微信生成URL Scheme ,将 uuid scehema 和过期时间存起来。
3.如有uuid 且URL Scheme 未过期则 直接返回uuid对应的URL Scheme

流程图如下

小程序URL Scheme规则调整支持方案_第1张图片

前端代码

设置cookie 请求后台接口获取URL Scheme

const getUrlScheme = ()=>{
  const sessionCookie = getCookie('uuid');
  let uuid = '';
  if (!sessionCookie) {
    uuid = localStorage.getItem('uuid');
    if (!uuid) {
      uuid = uuidV4(); // uuid
      localStorage.setItem('uuid', 'uuid');
    }
    const effectiveTimeLen = 20 * 24 * 60 * 60 * 1000; // cookie过期时间20天
    const expiresTime = new Date(Date.now() + effectiveTimeLen);
    const cookieDomain = window.location.hostname.split('.').slice(-2).join('.');
    document.cookie = `uuid=${uuid};expires=${expiresTime};path=/;domain=.${cookieDomain}`;
  }
  // 请求后台接口获取URL Scheme
}

附1 uuidV4函数

function uuidV4() {
  var t = Date.now();
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
      var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8);
      return v.toString(16);
  }) + '-' + t;
}

附2 获取cookie的函数

const getCookie = (name) => {
  const strCookie = document.cookie;
  const arrCookie = strCookie.split('; ');
  for (let i = 0; i < arrCookie.length; i++) {
    const arr = arrCookie[i].split('=');
    if (arr[0] === name) {
      return arr[1];
    }
  }
  return '';
};

你可能感兴趣的:(问题集,微信小程序,微信开放平台,url,scheme)