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

前言

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

需求背景

微信小程序、其他各类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;
  }
}
相关推荐
吃杠碰小鸡5 分钟前
commitlint校验git提交信息
前端
monkey_meng24 分钟前
【遵守孤儿规则的External trait pattern】
开发语言·后端·rust
虾球xz36 分钟前
游戏引擎学习第20天
前端·学习·游戏引擎
Estar.Lee39 分钟前
时间操作[计算时间差]免费API接口教程
android·网络·后端·网络协议·tcp/ip
我爱李星璇41 分钟前
HTML常用表格与标签
前端·html
疯狂的沙粒1 小时前
如何在Vue项目中应用TypeScript?应该注意那些点?
前端·vue.js·typescript
小镇程序员1 小时前
vue2 src_Todolist全局总线事件版本
前端·javascript·vue.js
野槐1 小时前
前端图像处理(一)
前端
程序猿阿伟1 小时前
《智能指针频繁创建销毁:程序性能的“隐形杀手”》
java·开发语言·前端
疯狂的沙粒1 小时前
对 TypeScript 中函数如何更好的理解及使用?与 JavaScript 函数有哪些区别?
前端·javascript·typescript