问答

社交平台消息通知设置?求思路

作者:admin 2021-05-11 我要评论

社交产品中的消息推送设置 1.平台所有用户默认打开接受推送通知 2.如个别用户关闭某个消息设置,则不产生跟他相关的消息推送 问: 这块业务功能怎么实现,有sf小...

在说正事之前,我要推荐一个福利:你还在原价购买阿里云、腾讯云、华为云服务器吗?那太亏啦!来这里,新购、升级、续费都打折,能够为您省60%的钱呢!2核4G企业级云服务器低至69元/年,点击进去看看吧>>>)

image
image


社交产品中的消息推送设置

1.平台所有用户默认打开接受推送通知

2.如个别用户关闭某个消息设置,则不产生跟他相关的消息推送

问:
这块业务功能怎么实现,有sf小伙伴能提下实现思路的没? 谢过 ^_^

###

假设有10个配置项,id是从1到10,数据库只存用户操作过的数据,一个id是一条数据

typeuser_idactive
110
310
610

那么查询这个用户的数据库数据得到

const userSwitches = [
    {"type": 1, "active": 0},
    {"type": 3, "active": 0},
    {"type": 6, "active": 0},
];

组装数据

const switches = Array.from({length: 10}, (v, index) => {
    const type = index + 1;
    return userSwitches.find(item => item.type === type) 
        || {type, "active": 1},
});

就能得到数据

[
    {"type": 1, "active": 0},
    {"type": 2, "active": 1},
    {"type": 3, "active": 0},
    {"type": 4, "active": 1},
    {"type": 5, "active": 1},
    {"type": 6, "active": 0},
    {"type": 7, "active": 1},
    {"type": 8, "active": 1},
    {"type": 9, "active": 1},
    {"type": 10, "active": 1},
]
###

up 置顶。

###

差不多这个思路:
notify_settings:

id (主键ID)
pid (默认为0,防止一个设置下面存在多子设置)
uid (当然用户ID了)
key (设置通知标示,确保唯一性,用户前端的硬编码具体的设置项,用key的目的是更加友好)
extra (冗余扩展字段)
status(当然status可以可以是多种状态不局限关闭和开启根据业务自动扩展)

###

其实我觉得可以建立一张用户消息提醒设置表,大概每个提醒项是一个字段,默认是开启的.

表字段大概如下

uidweek_tip_statustalk_statusfriend_request_status...
1111
2111
3111

开启状态是1,关闭是0

然后封装/定义一个模型,加上常用操作:

<?php
class TipsStatusModel
{

    const WEEK_TIP_FIELD_NAME = 'week_tip_status';
    const TALk_FIELD_NAME = 'talk_status';
    const FRIEND_REQUEST_FIELD_NAME = 'friend_request_status';
    
    /**
     * 是否可以发送指定提醒
     * 
     * @param $uid 用户id
     * @param $statusName 状态字段名
     * @return mixed
     */ 
    public function isCanSend($uid, $statusName)
    { 
        return Model::where('uid', $uid)->value($statusName);
    }
}

在发送提醒之前调用是否可以发送提醒的方法:

// 返回0表示提醒关闭 直接返回即可
if (!$this->tipsStatusModel->isCanSend(1, TipsStatusModel::WEEK_TIP_FIELD_NAME))
{
    return;
}

// todo
// 发送提醒逻辑

定义常量和字段名,其他位置调用的时候,不用写字段名.
如果字段名改变了的话,只需要修改const变量对应的值就好了.

版权声明:本文转载自网络,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本站转载出于传播更多优秀技术知识之目的,如有侵权请联系QQ/微信:153890879删除

相关文章
  •  社交平台消息通知设置?求思路

    社交平台消息通知设置?求思路

  • express搭建的服务器,运行都是使用nod

    express搭建的服务器,运行都是使用nod

  • Xdebug + phpstorm调试配置问题

    Xdebug + phpstorm调试配置问题

  • 关于无限级分类的思考

    关于无限级分类的思考

腾讯云代理商
海外云服务器