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

前言

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

需求背景

微信小程序、其他各类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;
  }
}
相关推荐
大怪v1 小时前
AI抢饭?前端佬:我要验牌!
前端·人工智能·程序员
新酱爱学习1 小时前
字节外包一年,我的技术成长之路
前端·程序员·年终总结
小兵张健1 小时前
开源 playwright-pool 会话池来了
前端·javascript·github
IT_陈寒4 小时前
Python开发者必知的5大性能陷阱:90%的人都踩过的坑!
前端·人工智能·后端
codingWhat4 小时前
介绍一个手势识别库——AlloyFinger
前端·javascript·vue.js
Lee川4 小时前
深度拆解:基于面向对象思维的“就地编辑”组件全模块解析
javascript·架构
勤劳打代码4 小时前
Flutter 架构日记 — 状态管理
flutter·架构·前端框架
代码老中医4 小时前
2026年CSS彻底疯了:这6个新特性让我删掉了三分之一JS代码
前端
不会敲代码14 小时前
Zustand:轻量级状态管理,从入门到实践
前端·typescript
踩着两条虫4 小时前
VTJ.PRO 双向代码转换原理揭秘
前端·vue.js·人工智能