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

前言

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

需求背景

微信小程序、其他各类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;
  }
}
相关推荐
谢尔登9 分钟前
【React】React 18 并发特性
前端·react.js·前端框架
Joker`s smile12 分钟前
使用React+ant Table 实现 表格无限循环滚动播放
前端·javascript·react.js
国家不保护废物17 分钟前
🌟 React 魔法学院入学指南:从零构建你的第一个魔法阵(项目)!
前端·react.js·架构
import_random20 分钟前
[机器学习]svm支持向量机(优势在哪里)
前端
洗澡水加冰20 分钟前
n8n搭建多阶段交互式工作流
后端·llm
国家不保护废物21 分钟前
从刀耕火种到现代框架:DOM编程 vs Vue/React 进化史
前端·vue.js·react.js
陈随易21 分钟前
Univer v0.8.0 发布,开源免费版 Google Sheets
前端·后端·程序员
不怎么爱学习的dan26 分钟前
实现 ECharts 多国地区可视化方案
前端
六月的雨在掘金27 分钟前
通义灵码 2.5 | 一个更懂开发者的 AI 编程助手
后端
嘉小华27 分钟前
Android Lifecycle 状态同步与分发机制深度解析
前端