APP首页弹屏实现

在实际开发过程中,我们经常能遇到App首页弹屏的需求,今天这篇文章记录一下自己在这个需求中实现的技术方案,文章所用语言为lua。
通常,每当我们登陆App后,需要从服务器请求弹屏数据,从业务类型上划分包括活动的通知,App运营的公告等,从频率上划分包括每次登陆弹出、每天弹出一次、仅弹出一次等。我们分别从这两个方面介绍:
* 首先,我们需要实现一个个的弹屏view,当然每个弹屏view能够复用最好,不能复用就乖乖搭界面吧,这里就不细说了,每种前端框架基本都能实现,由于笔者使用的是公司自研框架,通用性就不强了,这里就不展开说明。
* 关于业务类型:这一块难点在于活动的数据结构和公告的数据结构不尽相同,最为明显的差别是活动的弹屏往往需要跳转不同场景进行操作,而公告则关闭即可,在这里需要重点实现活动的重定向跳转,其大致结构如下:
-- 重定向配置表
local CONFIG = {
    ACTIVITY_1 = "func1",
    ...
}
local REDIR = {}
function REDIR:init( )
end
--活动一重定向方法
function REDIR:func1( ... )
    -- body
end
然后我们还需要定义一个noticeManager管理,在manager中我们需要实例化我们的弹出view,同时弹屏需要监听用户登入登出等事件,统一在manager中处理:
-- 导入重定向配置文件
local Redirect = require(".redirect")
local Events = g_Config.Events
local EventBindMap = {
    [Events.LOGIN]   = "onLoginIn",
    [Events.LOGOUT]  = "onLoginOut",
    ...
}

local NoticeManager = {}
function NoticeManager:init( )
    -- 监听事件
    for k,v in pairs(EventBindMap) do
        EventSystem:on( k, self[v], {target = self})
    end
end
--deinit
function NoticeManager:deinit( )
end
function NoticeManager:onLoginOut(  )
    ...
end
function NoticeManager:onLoginIn(  )
    ...
end
* 关于弹屏频率,对于不同产品来说,要求高的需要将每一个活动的弹屏频率等相关数据保存到服务器,这样保证数据最大的准确性,而要求不高的可以直接在客户端实现,我们来看看客户端实现的方法:
-- 读取弹屏次数配置
--[[
{
    day = "",
    today = {
        id = time
    },
    once = {
         id = time
    }
}
]]
function readRecorder( )
    ActivityPopRecorder = json.decode(Dict.ACTIVITY_POP_RECORDER)
    if not ActivityPopRecorder.today then ActivityPopRecorder.today = {} end
    if not ActivityPopRecorder.once then ActivityPopRecorder.once = {} end
    local dayStr = os.date("%Y-%m-%d", os.time())
    if ActivityPopRecorder.day ~= dayStr then
        ActivityPopRecorder.today = {}
        ActivityPopRecorder.day = dayStr
        saveRecorder()
    end
end
function saveRecorder( )
    Dict.ACTIVITY_POP_RECORDER = json.encode(ActivityPopRecorder)
end
readRecorder()
对于代码需要说明的是Dict为读写本地文件的对象,保存的value为string对象,这样我们就在本地记录下了每一个活动弹屏的频率,当我们从服务端获取到数据之后,与本地记录对比,判断其是否需要弹屏,同时,在弹出后修改本地记录,当一天过去后,记录被重新归0,重新开始记录。需要注意的一点是,如果我们删除本地Dict文件,记录也将重新归0,因此在可靠性上不如将数据存放在服务器。
利用以上几点,我们基本能搭建出一个弹屏的开发框架,其扩展性和可读性都不错,下一章,我们来讲讲弹屏的view具体如何实现更复杂的功能和Dict的实现。

你可能感兴趣的:(lua,框架,客户端)