大家好涤姊,我是公眾號(hào)3分鐘學(xué)堂的郭立員~
前些天有朋友問怎么實(shí)現(xiàn)這個(gè)功能砂轻,如下圖所示:
這個(gè)功能就是給自己的腳本加上一個(gè)可以領(lǐng)免費(fèi)測(cè)試卡的功能斤吐,要想實(shí)現(xiàn)它需要注意的內(nèi)容挺多的和措,下面我們逐個(gè)來說一下:
(1)功能上說要實(shí)現(xiàn)兩個(gè)操作:點(diǎn)擊按鈕獲取激活碼(測(cè)試卡)+寫入輸入框
①點(diǎn)擊按鈕獲取一個(gè)激活碼
因?yàn)槟_本要給別人使用,所以激活碼不能是本地的诬留,只能是來自服務(wù)器端文兑,那么可以使用post/get方式獲取。
激活碼的來源因块,可以是預(yù)先生成好的一批激活碼籍铁,也可以是每次點(diǎn)擊按鈕生成新的激活碼,它們各有優(yōu)缺點(diǎn):
預(yù)生成的激活碼:生成的激活碼數(shù)量是固定的吩愧,用一個(gè)少一個(gè)雁佳,所以要定期補(bǔ)充同云。
新生成激活碼:這種方式要求腳本具有生成激活碼的權(quán)限,同時(shí)一旦被人破解可以無限制生成激活碼,導(dǎo)致驗(yàn)證系統(tǒng)形同虛設(shè)了武契。
選用哪種方式荡含,除了考慮它們優(yōu)缺點(diǎn)以外释液,還要看你的驗(yàn)證系統(tǒng)有沒有相關(guān)的功能,比如新生成激活碼的方式浸船,就要求驗(yàn)證系統(tǒng)支持用戶端注冊(cè)或者導(dǎo)入激活碼寝蹈。
這期文章中我會(huì)用到讀取服務(wù)器文本的方式箫老,預(yù)先把激活碼存在服務(wù)器文本,讀取一個(gè)刪除一個(gè)阔籽。
②把激活碼寫入到輸入框中
這邊是需要靜態(tài)頁面修改元素的,使用UIP.SetAttribute命令绅这,一行代碼而已君躺,稍后看源碼就行开缎。
(2)腳本中的邏輯注意事項(xiàng):
這個(gè)注意事項(xiàng)是來自于腳本的限制說明:※每天可免費(fèi)領(lǐng)取3張測(cè)試卡,測(cè)試時(shí)間為1小時(shí)
①限制每天3張測(cè)試卡奕删,那么需要有領(lǐng)取記錄俺泣,記錄可以存在腳本運(yùn)行的本地設(shè)備,也可以存在于服務(wù)器端完残,兩者對(duì)比的話伏钠,存在本地容易些。
②存儲(chǔ)的要點(diǎn):時(shí)間和張數(shù)
因?yàn)槭敲刻烊龔埥魃瑁赃^了半夜12點(diǎn)要重新更新可測(cè)試數(shù)量熟掂,記錄好當(dāng)天的日期,防止重復(fù)領(lǐng)取扎拣。
③限制1小時(shí)的測(cè)試時(shí)間赴肚,這個(gè)就是基本的網(wǎng)絡(luò)驗(yàn)證,沒啥可說的誉券。
(3)本地存儲(chǔ)的操作流程
選用的存儲(chǔ)媒介是數(shù)據(jù)(.db),因?yàn)檫@種后綴的文件普通人不常用到刊愚,沒有對(duì)應(yīng)的工具不容易打開踊跟,這樣就可以達(dá)到隱藏的效果。
存儲(chǔ)的格式如下:
在數(shù)據(jù)庫表中有兩列數(shù)據(jù)鸥诽,分別是time和num商玫,代表日期和次數(shù)。
寫這部分邏輯框架需要考慮全面牡借,大家跟著我一塊去想想這個(gè)邏輯:
第一步:判斷數(shù)據(jù)庫在手機(jī)/模擬器上是否存在
不存在:當(dāng)前設(shè)備是首次使用腳本
存在:當(dāng)前設(shè)備已經(jīng)使用過
第二步:針對(duì)上面兩種情況分別處理
首次使用:那么新建數(shù)據(jù)庫决帖,寫入日期和次數(shù)1
非首次使用:要判斷當(dāng)前表格里面的time列中有沒有今天的日期數(shù)據(jù)。
沒有:今天還沒有使用過
有:今天已經(jīng)使用蓖捶。
第三步:繼續(xù)分情況處理
沒有今天的日期數(shù)據(jù):在數(shù)據(jù)庫中寫入今天日期和次數(shù)1
有今天的日期數(shù)據(jù):讀取數(shù)據(jù)庫中當(dāng)天日期對(duì)應(yīng)的num列中的次數(shù)地回,判斷次數(shù)是否小于3次
小于3次:今天還可以繼續(xù)使用,把今天日期對(duì)應(yīng)的次數(shù)+1
不小于3次:今天免費(fèi)測(cè)試次數(shù)用完。
這部分寫成代碼是:
Import"sqlite3.lua"Dim dbpath="/sdcard/pictures/abc.db"Dim t=DateTime.Format("%Y%m%d")? ? If Dir.Exist(dbpath) =0Then? ? ? ? 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) =0Then? ? ? ? ? ? showmessage"今天首次使用"sqlite3.SQLInsert DBpath,"code", {"time":t,"num":1}? ? ? ? Else? ? ? ? ? ? showmessage encode.TableToJson(ret)? ? ? ? ? ? If cint(ret[1]["num"]) <3Then? ? ? ? ? ? ? ? sqlite3.SQLUpdate DBpath,"code", {"num":ret[1]["num"]+1},"WHERE time="& t? ? ? ? ? ? ? ? ? ? ? ? showmessage"第"&ret[1]["num"]+1&"次領(lǐng)卡"Else? ? ? ? ? ? ? ? showmessage"今天3次測(cè)試卡已經(jīng)領(lǐng)過了刻像,明天再來"End If? ? ? ? End If? ? ? ? End If
在以上的代碼中畅买,并沒有獲取測(cè)試卡的操作,僅僅是對(duì)測(cè)試卡需要獲取的記錄细睡,我們寫每次寫入/修改數(shù)據(jù)庫內(nèi)容都是要配合獲取測(cè)試的操作谷羞。
這其中包括建庫、當(dāng)天首次使用溜徙、次數(shù)小于3等這幾種情況湃缎。
(4)讀取服務(wù)器上的文本
這一步需要一個(gè)php文件,完成讀取文本內(nèi)容和刪除文本內(nèi)容的操作蠢壹,把php文件和存有測(cè)試卡的文本放到服務(wù)器里面嗓违,運(yùn)行下面代碼就可以了。
需要這個(gè)文件可以加我微信xiaomu86119图贸,備注【服務(wù)器文本】
Dim ip="http://192.168.1.3/file"http://我建了一個(gè)file的文件夾蹂季,不是一定有這個(gè)目錄的Dim 文件名="code"http://文本名字TracePrint url.get(ip&"/File.php?uid=6&txtid="&文件名&"&hid=1")
(5)寫入輸入框
Function函數(shù)名1()? ? Dim 測(cè)試卡="abc0001"uip.SetAttribute("輸入框1",{"初始文本":測(cè)試卡})EndFunction
=正文完=