close
大家好,我是郭立員~
前些天有朋友問怎麼實現這個功能,如下圖所示:
這個功能就是給自己的腳本加上一個可以領免費測試卡的功能,要想實現它需要注意的內容挺多的,下面我們逐個來說一下:
(1)功能上說要實現兩個操作:點擊按鈕獲取激活碼(測試卡)+寫入輸入框
①點擊按鈕獲取一個激活碼
因為腳本要給別人使用,所以激活碼不能是本地的,只能是來自服務器端,那麼可以使用post/get方式獲取。
激活碼的來源,可以是預先生成好的一批激活碼,也可以是每次點擊按鈕生成新的激活碼,它們各有優缺點:
預生成的激活碼:生成的激活碼數量是固定的,用一個少一個,所以要定期補充。
新生成激活碼:這種方式要求腳本具有生成激活碼的權限,同時一旦被人破解可以無限制生成激活碼,導致驗證系統形同虛設了。
選用哪種方式,除了考慮它們優缺點以外,還要看你的驗證系統有沒有相關的功能,比如新生成激活碼的方式,就要求驗證系統支持用戶端註冊或者導入激活碼。
這期文章中我會用到讀取服務器文本的方式,預先把激活碼存在服務器文本,讀取一個刪除一個。
②把激活碼寫入到輸入框中
這邊是需要靜態頁面修改元素的,使用UIP.SetAttribute命令,一行代碼而已,稍後看源碼就行。

(2)腳本中的邏輯注意事項:
這個注意事項是來自於腳本的限制說明:※每天可免費領取3張測試卡,測試時間為1小時
①限制每天3張測試卡,那麼需要有領取記錄,記錄可以存在腳本運行的本地設備,也可以存在於服務器端,兩者對比的話,存在本地容易些。
②存儲的要點:時間和張數
因為是每天三張,所以過了半夜12點要重新更新可測試數量,記錄好當天的日期,防止重複領取。
③限制1小時的測試時間,這個就是基本的網絡驗證,沒啥可說的。

(3)本地存儲的操作流程
選用的存儲媒介是數據(.db),因為這種後綴的文件普通人不常用到,沒有對應的工具不容易打開,這樣就可以達到隱藏的效果。
存儲的格式如下:

在數據庫表中有兩列數據,分別是time和num,代表日期和次數。
寫這部分邏輯框架需要考慮全面,大家跟着我一塊去想想這個邏輯:
第一步:判斷數據庫在手機/模擬器上是否存在
不存在:當前設備是首次使用腳本
存在:當前設備已經使用過
第二步:針對上面兩種情況分別處理
首次使用:那麼新建數據庫,寫入日期和次數1

非首次使用:要判斷當前表格裡面的time列中有沒有今天的日期數據。
沒有:今天還沒有使用過
有:今天已經使用。
第三步:繼續分情況處理
沒有今天的日期數據:在數據庫中寫入今天日期和次數1
有今天的日期數據:讀取數據庫中當天日期對應的num列中的次數,判斷次數是否小於3次
小於3次:今天還可以繼續使用,把今天日期對應的次數+1
不小於3次:今天免費測試次數用完。

這部分寫成代碼是:
Import "sqlite3.lua" Dim dbpath="/sdcard/pictures/abc.db" Dim t=DateTime.Format("%Y%m%d") If Dir.Exist(dbpath) = 0 Then showmessage "首次使用" sqlite3.SQLCreate(dbpath, "code", {"time","num"}) sqlite3.SQLInsert DBpath, "code", {"time":t, "num":1} Else dim ret=sqlite3.SQLSelect(DBpath, "code", "num", "WHERE time="&t) If Len(ret) = 0 Then showmessage "今天首次使用" sqlite3.SQLInsert DBpath, "code", {"time":t, "num":1} Else showmessage encode.TableToJson(ret) If cint(ret[1]["num"]) < 3 Then sqlite3.SQLUpdate DBpath, "code", {"num":ret[1]["num"]+1}, "WHERE time=" & t showmessage "第"&ret[1]["num"]+1&"次領卡" Else showmessage "今天3次測試卡已經領過了,明天再來" End If End If End If

在以上的代碼中,並沒有獲取測試卡的操作,僅僅是對測試卡需要獲取的記錄,我們寫每次寫入/修改數據庫內容都是要配合獲取測試的操作。
這其中包括建庫、當天首次使用、次數小於3等這幾種情況。

(4)讀取服務器上的文本
這一步需要一個php文件,完成讀取文本內容和刪除文本內容的操作,把php文件和存有測試卡的文本放到服務器裡面,運行下面代碼就可以了。
需要這個文件可以加我微信xiaomu86119,備註【服務器文本】
Dim ip="http://192.168.1.3/file" //我建了一個file的文件夾,不是一定有這個目錄的Dim 文件名="code" //文本名字TracePrint url.get(ip&"/File.php?uid=6&txtid="&文件名&"&hid=1")

(5)寫入輸入框
Function 函數名1() Dim 測試卡="abc0001" uip.SetAttribute("輸入框1",{"初始文本":測試卡})End Function

=正文完=
我個人微信


----------------------------------
推薦:
關注公眾號,回復「教程」獲取我的基礎教程。

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()