Unity3d C#实现调取网络时间限制程序的体验时长的功能

前言

如题的需求应该经常在开发被提到,例如给客户体验3–5天的程序,到期后使其不可使用,或者几年的使用期限。这个功能常常需要使用到usb加密狗来限制,当然这也的话就需要一定的硬件投入。很多临时提供的版本基本是要求软件来实现这种时间的限制,那就可以使用调用某个网络时间的接口来进行验证体验时间是否过期的判断,如果过期了就进行强制退出。这个接口不一定需要联网,可以让做后端的提供一个服务器时间的接口来实现也是可以的。本文实现该功能是通过某宝的时间戳调用接口,这样的话,这个功能的要求就是需要联通互联网。如果你的需要不联网也可以用本机系统时间来判断:

DateTime da = DateTime.Now;

不过这样的话,修改本机的系统时间是可以绕过这个验证的。

实现

接口地址采用了某宝的时间戳获取接口:
http://api.m.taobao.com/rest/api3.do?api=mtop.common.getTimestamp
无需任何传参,直接get请求即可。
返回结果为:
在这里插入图片描述

{"api":"mtop.common.getTimestamp","v":"*","ret":["SUCCESS::接口调用成功"],"data":{"t":"1692946147402"}}

其中data>t (1692946147402)就是时间戳,将其转换为时间后即可进行判断。

这里在打包前进行一定的配置,就是设定程序开始体验的时间,以及有效的时长(天数和小时数):

[Header("开始时间")]
    public string StTimeStr ="2023/7/4 00:00:00" ;
    [Header("有效期天数")]
    public float ValDays;

    [Header("有效期小时")]
    public float ValHours;

    DateTime StDt,EdDt;
    // Start is called before the first frame update
    void Start()
    {
        DateTime da = DateTime.Now;
        StDt = DateTime.Parse(StTimeStr);
        EdDt = StDt.AddDays(ValDays).AddHours(ValHours);
    }

如下图的设置:
在这里插入图片描述

这里的开始时间就是2023年8月26日的00点00分00秒;然后有效的时间就是15天+ 12小时(这里也可以设天数为15.5,具体看方便设置)。

接口调用成功后,具体的时间判断如下:

    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("获取网络时间失败!:" + resp["message"]);
            }
        }
        catch (Exception e)
        {
            Debug.LogWarning("获取网络时间异常:" + e);
        }
        finally
        {
            if (!isPassed)
            {
                Debug.LogWarning("程序体验时间过期,程序退出!");
                Application.Quit();
            }
            //可间隔一定时间进行验证。
            //else
            //    Invoke("PassCheck", 20f);
        }

上面的检测仅在启动的时候判定一次,如果在程序运行中时过期,程序仍能正常运行。如果想要到期后程序也会退出,则需要一定时间间隔检查一次。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十幺卜入

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值