有做網(wǎng)站設(shè)計(jì)的嗎引擎優(yōu)化seo是什么
前言
如題的需求應(yīng)該經(jīng)常在開發(fā)被提到,例如給客戶體驗(yàn)3–5天的程序,到期后使其不可使用,或者幾年的使用期限。這個(gè)功能常常需要使用到usb加密狗來限制,當(dāng)然這也的話就需要一定的硬件投入。很多臨時(shí)提供的版本基本是要求軟件來實(shí)現(xiàn)這種時(shí)間的限制,那就可以使用調(diào)用某個(gè)網(wǎng)絡(luò)時(shí)間的接口來進(jìn)行驗(yàn)證體驗(yàn)時(shí)間是否過期的判斷,如果過期了就進(jìn)行強(qiáng)制退出。這個(gè)接口不一定需要聯(lián)網(wǎng),可以讓做后端的提供一個(gè)服務(wù)器時(shí)間的接口來實(shí)現(xiàn)也是可以的。本文實(shí)現(xiàn)該功能是通過某寶的時(shí)間戳調(diào)用接口,這樣的話,這個(gè)功能的要求就是需要聯(lián)通互聯(lián)網(wǎng)。如果你的需要不聯(lián)網(wǎng)也可以用本機(jī)系統(tǒng)時(shí)間來判斷:
DateTime da = DateTime.Now;
不過這樣的話,修改本機(jī)的系統(tǒng)時(shí)間是可以繞過這個(gè)驗(yàn)證的。
實(shí)現(xiàn)
接口地址采用了某寶的時(shí)間戳獲取接口:
http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp
無需任何傳參,直接get請求即可。
返回結(jié)果為:
{"api":"mtop.common.getTimestamp","v":"*","ret":["SUCCESS::接口調(diào)用成功"],"data":{"t":"1692946147402"}}
其中data>t (1692946147402)就是時(shí)間戳,將其轉(zhuǎn)換為時(shí)間后即可進(jìn)行判斷。
這里在打包前進(jìn)行一定的配置,就是設(shè)定程序開始體驗(yàn)的時(shí)間,以及有效的時(shí)長(天數(shù)和小時(shí)數(shù)):
[Header("開始時(shí)間")]public string StTimeStr ="2023/7/4 00:00:00" ;[Header("有效期天數(shù)")]public float ValDays;[Header("有效期小時(shí)")]public float ValHours;DateTime StDt,EdDt;// Start is called before the first frame updatevoid Start(){DateTime da = DateTime.Now;StDt = DateTime.Parse(StTimeStr);EdDt = StDt.AddDays(ValDays).AddHours(ValHours);}
如下圖的設(shè)置:
這里的開始時(shí)間就是2023年8月26日的00點(diǎn)00分00秒;然后有效的時(shí)間就是15天+ 12小時(shí)(這里也可以設(shè)天數(shù)為15.5,具體看方便設(shè)置)。
接口調(diào)用成功后,具體的時(shí)間判斷如下:
try{string str = Encoding.UTF8.GetString(bytes);JsonData resp = JsonMapper.ToObject(str);if (resp != null && resp.ContainsKey("data") && resp["data"].ContainsKey("t")){DateTime nowdt = GetDateTimeMilliseconds(long.Parse(resp["data"]["t"].ToString()));if (nowdt < EdDt)isPassed= true;}else {Debug.LogWarning("獲取網(wǎng)絡(luò)時(shí)間失敗!:" + resp["message"]);}}catch (Exception e){Debug.LogWarning("獲取網(wǎng)絡(luò)時(shí)間異常:" + e);}finally{if (!isPassed){Debug.LogWarning("程序體驗(yàn)時(shí)間過期,程序退出!");Application.Quit();}//可間隔一定時(shí)間進(jìn)行驗(yàn)證。//else// Invoke("PassCheck", 20f);}
上面的檢測僅在啟動的時(shí)候判定一次,如果在程序運(yùn)行中時(shí)過期,程序仍能正常運(yùn)行。如果想要到期后程序也會退出,則需要一定時(shí)間間隔檢查一次。