「安卓按鍵」怎么讓腳本可以領取免費測試卡

大家好,我是公眾號3分鐘學堂的郭立員~

前些天有朋友問怎么實現這個功能,如下圖所示:

這個功能就是給自己的腳本加上一個可以領免費測試卡的功能,要想實現它需要注意的內容挺多的,下面我們逐個來說一下:

(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) =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&"次領卡"Else? ? ? ? ? ? ? ? showmessage"今天3次測試卡已經領過了,明天再來"End If? ? ? ? End If? ? ? ? End If

在以上的代碼中,并沒有獲取測試卡的操作,僅僅是對測試卡需要獲取的記錄,我們寫每次寫入/修改數據庫內容都是要配合獲取測試的操作。

這其中包括建庫、當天首次使用、次數小于3等這幾種情況。

(4)讀取服務器上的文本

這一步需要一個php文件,完成讀取文本內容和刪除文本內容的操作,把php文件和存有測試卡的文本放到服務器里面,運行下面代碼就可以了。

需要這個文件可以加我微信xiaomu86119,備注【服務器文本】

Dim ip="http://192.168.1.3/file"http://我建了一個file的文件夾,不是一定有這個目錄的Dim 文件名="code"http://文本名字TracePrint url.get(ip&"/File.php?uid=6&txtid="&文件名&"&hid=1")

(5)寫入輸入框

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

=正文完=

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容