微信小程序分享活动技术方案

前言

到头来还是不想找工作,继续折腾吧,看看还能瞎折腾多久。 最近有一个感悟,自己做事情之后所有杂七杂八的事情全都要自己去推动,如果自己不推,那么事情就不会有进展,就算你躺在那里也不会有人管你。 长期工作之后在创业,会有个弊病,就是我把这件事情做完了,然后呢?之前工作的时候,我负责开发我的需求,从代码的设计思路,到实现需求,这个事情好像就结束了,但是自己创业就会衍生出一个问题,你实现了这个需求,然后呢?真心建议正在工作人,特别是毕业三五年内的年轻人,别把自己当成一个工具人,多思考业务价值,和多跟进业务的后续发展,要去搞清楚你做的需求的整个业务链路,并跟进下去。

需求背景

微信小程序、其他各类APP以及网站平台,普遍会举办分享活动,旨在吸引新用户并提升平台内部的互动与曝光度。这些活动通过鼓励用户分享内容至社交圈,有效扩大了平台的传播范围,增加了潜在用户的接触机会,同时也提升了现有用户的参与度和粘性。分享活动不仅有助于平台的用户增长,还能够提升品牌的知名度和影响力,实现用户与平台之间的双赢。

业务流程

技术方案

据库设计

分享(share)

用于记录所有分享的数据

字段 类型 说明
_id string 主键,唯一标识
createTime int 创建时间戳
sourceId string 来源id,分享人的用户id
sourceTag string 来源渠道
sourceType string 来源类型
userId string 用户Id,接收分享消息的的用户的Id,可以用于拉新活动判断是否是新用户
shareStatus int 1:未接收;2:接收成功;3:接收成功,但是已经注册过;4:接收成功并注册
contentId string 分享的内容id

分享反馈(share-notice)

用户查看分享的反馈信息

字段 类型 说明
_id string 主键,唯一标识
createTime int 创建时间戳
userId string 用户Id
title string 提示标题
content string 提示内容
isRead int 1 已读 2 未读

接口设计

更新分享信息(share/update)

csharp 复制代码
const {
  dbUpdate,
  getFilterParams,
} = require("../../utils");
// 更新提示消息
const updateNotice = require('../../notice/update')

exports.main = async (data) => {
  const params = {
    _id: data?._id || "",
    contentId: data?.contentId || "",
    sourceId: data?.sourceId || '', // 来源ID 分享人ID
    sourceTag: data?.sourceTag || '', // 渠道类型
    sourceType: data?.sourceType || '', // 来源类型
    userId: data?.userId || '',
    shareStatus: data?.shareStatus || 1, // 1:未接收;2:接收成功;3:接收成功,但是已经注册过;4:接收成功并注册
  }

  const res = await dbUpdate("share", getFilterParams(params));
  
  // 发起分享时,不传userId
  if (params?._id && params?.userId) {
    const contentMap = {
      3: '不是新用户的提示文案',
      4: '新用户的提示文案'
    }

    
    const noticeParams = {
      userId: params.userId,
      title: '转发成功',
      content: contentMap?.[noticeParams.shareStatus] || `提示的文案,`,
      shareStatus: params.shareStatus
    }
    
    updateNotice.main(getFilterParams(noticeParams));
  }
  return res
};

更新分享通知接口(notice/update)

kotlin 复制代码
const {
  dbUpdate,
  getFilterParams
} = require("../../utils");

exports.main = async (data) => {
  const params = {
    _id: data?._id || "",
    userId: data?.userId || '',
    title: data?.title || '',
    isRead: data?.isRead || 2,
    content: data?.content || "",
  }

  return await dbUpdate("notice", getFilterParams(params));
};

前端发起分享

javascript 复制代码
export async function onShare(params) {
  const {
    title = '', path = '', contentId = ''
  } = params;

  const res = await fetchShareUpdate(params);
  console.log('share res', res)

  if (res?.code === 0) {
    const shareId = res?.data?.data?._id || '';
    const sharePath = `${path}?_id=${contentId}&shareId=${shareId}`;
    const promise = new Promise(resolve => {
      setTimeout(() => {
        resolve({
          title,
          path: sharePath,
        })
      })
    })
    return {
      title,
      path: sharePath,
      promise
    }
  } else {
    return res;
  }
}
相关推荐
Victor3566 分钟前
MongoDB(95)如何在MongoDB中使用加密存储引擎?
后端
Victor3566 分钟前
MongoDB(96)如何使用MongoDB的高级聚合功能?
后端
IT利刃出鞘1 小时前
Spring工具类--ObjectUtils的使用
java·后端·spring
aXin_ya1 小时前
微服务 第四天
微服务·云原生·架构
2601_949816681 小时前
Spring boot启动原理及相关组件
数据库·spring boot·后端
还有你Y5 小时前
Shell 脚本语法
前端·语法·sh
踩着两条虫7 小时前
如何评价VTJ.PRO?
前端·架构·ai编程
GetcharZp7 小时前
告别 jq 噩梦!这款 JSON 神器 fx 让你在终端体验“丝滑”的数据操作
后端
张忠琳8 小时前
【vllm】vLLM v1 KV Offload — 模块超深度逐行分析之一(七)
ai·架构·vllm
Mh8 小时前
鼠标跟随倾斜动效
前端·css·vue.js