圍欄描述
在設備滿足特定場景前提下,當用戶手持安裝應用的設備進入/離開勘察工作區(qū)域時,程序需要給用戶進行響應及提醒蹄梢。
實際情況中,由于工作場景的不同富俄,圍欄個數不確定禁炒。比如地鐵項目、(跨區(qū)的)園區(qū)建設項目霍比。
針對某個工程幕袱,要求程序的提示不能太過頻繁。即當用戶在項目圍欄邊界區(qū)域連續(xù)觸發(fā)進入/離開工作區(qū)域時悠瞬,不能重復提醒们豌。且需要考慮用戶多設備的情況。
-
進入圍欄
- 程序未啟動 -> 打開程序浅妆,直接打開項目操作詳情頁望迎,方便用戶操作。
- 若參與項目的狀態(tài)處于「工作中」狀態(tài)下
- 檢查用戶針對該項目的最新操作狀態(tài)狂打,處理異常擂煞。
- 若參與項目的狀態(tài)處于「空閑中」狀態(tài)下,給用戶提示趴乡。用戶可選擇交互動作包括:
- 刷新工程操作頁面对省。
- 進入項目操作頁蝗拿。
-
離開
- 若參與項目的狀態(tài)處于「工作中」狀態(tài)下,程序在后臺進行「簽退」操作蒿涎。
方案
地理圍欄借助于 高德地圖 配合后臺模式來實現哀托。
程序的提醒頻次控制借助于 SQLite 數據庫緩存來實現。
后續(xù)相關操作借助于 觀察者 模式實現劳秋。
此處重點說明下程序提醒頻次控制的實現思路及流轉次序仓手。
緩存數據庫中主要存儲以下幾點信息:
- 標識:用于工程和地理圍欄的掛鉤。
- 工作狀態(tài):用于判斷用戶針對該工程的操作玻淑。
- 觸發(fā)時機:用于頻次控制嗽冒。
- 其他:用于組織提醒用戶內容等。
流轉次序如下:
- 若用戶是外業(yè)見證人員补履,則在程序啟動時添坊,獲取用戶所參與的項目的總覽信息(特別說明包括外業(yè)工作狀態(tài))。
- 構建并監(jiān)聽項目的地理圍欄箫锤。
- 觸發(fā)進入圍欄操作時
- 根據地理圍欄標識(移動端自行約定)贬蛙,在本地SQLite數據庫中進行碰撞,查找緩存中的工程谚攒。
- 若能找到工程阳准,則進行以下操作。以兼容用戶多設備操作的情況馏臭。
- 獲取該工程的概況野蝇,根據用戶對應該工程的操作狀態(tài)進行響應。
- 更新緩存數據位喂。
- 若不能找到工程浪耘,則通知前臺可進入項目操作頁(針對打開程序時乱灵,直接進入項目操作頁)塑崖。
- 觸發(fā)離開圍欄操作時
- 等待60秒后執(zhí)行以下操作,防止邊界上因為GPS不準確導致提醒不準確痛倚。
- 根據地理圍欄標識规婆,在本地SQLite數據庫中查找緩存中的工程。
- 若能找到工程蝉稳,則進行以下操作
- 查看設備是否處于該工程下的其他地理圍欄中(針對工程多區(qū)域現象)抒蚜。
- 如果設備不處于工程的地理圍欄中。則在后臺進行「簽退」操作耘戚。
- 更新緩存數據嗡髓。