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