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的實現。
相關文章
相關標籤/搜索