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 updatevoid 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);}
上面的检测仅在启动的时候判定一次,如果在程序运行中时过期,程序仍能正常运行。如果想要到期后程序也会退出,则需要一定时间间隔检查一次。
相关文章:

Unity3d C#实现调取网络时间限制程序的体验时长的功能
前言 如题的需求应该经常在开发被提到,例如给客户体验3–5天的程序,到期后使其不可使用,或者几年的使用期限。这个功能常常需要使用到usb加密狗来限制,当然这也的话就需要一定的硬件投入。很多临时提供的版本基本是要求软件来实现…...

常静相伴:深度解析C++中的const与static关键字
个人主页:北海 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏✨收录专栏:C/C🤝希望作者的文章能对你有所帮助,有不足的地方请在评论区留言指正,大家一起学习交流!ǹ…...

Linux入门之进程信号|信号产生的方式
文章目录 一、信号入门 1.linux信号的基本概念 2.使用kill -l 命令可以查看系统定义的信号列表 3.信号处理常见方式 二、产生信号 1.通过终端按键产生信号 2.通过调用系统函数向进程发信号 3.由软条件产生信号 4.硬件异常产生信号 1. /0异常 2.模拟野指针 一、信号入门…...

Unity中的数学基础——贝塞尔曲线
一:前言 一条贝塞尔曲线是由一组定义的控制点P0到 Pn,n1为线性,n2为二次......第一个和最后一个控制点称为起点和终点,中间的控制点一般不会位于曲线上 获取两个点之间的点就是通过线性插值( Mathf.Lerp)…...

大数据平台安全主要是指什么安全?如何保障?
大数据时代已经来临,各种数据充斥着我们的生活与工作。随着数据的多样性以及复杂性以及大量性,大数据平台诞生了。但对于大数据平台大家都不是很了解,有人问大数据平台安全主要是指什么安全?如何保障? 大数据平台安全…...

Flutter的未来与趋势,23年还学吗?
随着移动应用市场的不断扩大,跨平台开发框架的需求也越来越大。Flutter框架可以帮助开发者在不同平台上快速开发高质量的移动应用程序,这种趋势将进一步推动Flutter的发展和普及。 作为一名前端开发工程师,学习Flutter框架是非常有必要的。因…...

RHCE——十三、Shell自动化运维编程基础
Shell 一、为什么学习和使用Shell编程二、Shell是什么1、shell起源2、查看当前系统支持的shell3、查看当前系统默认shell4、Shell 概念 三、Shell 程序设计语言1、Shell 也是一种脚本语言2、用途 四、如何学好shell1、熟练掌握shell编程基础知识2、建议 五、Shell脚本的基本元素…...

深入理解AMBA总线协议(AXI总结篇)
AXI总线已经是AMBA总线中最常见,使用最频繁的总线,并且没有之一。 可以说AXI总线已经成为了片上总线中最重要的协议,本篇文章打算花一些篇幅,帮大家总结一下AXI总线的学习重点、学习难点,以帮助大家更好更快的掌握AXI…...
建立无需build的react单页面应用SPA框架(2)
react-18.1.0,rc-easyui-1.2.9,babel-7.17.11 SPA还要处理的问题: (一)tabs切换事件通知 tabs切换时,自己的框架需要处理组件的生命周期,要有active/deactive,让组件能知道何时创…...

C# char曲线控件
一、char曲线显示随机数数据 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading; using Syst…...

远程访问本地jupyter notebook服务 - 无公网IP端口映射
文章目录 前言1. Python环境安装2. Jupyter 安装3. 启动Jupyter Notebook4. 远程访问4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5. 固定公网地址 前言 Jupyter Notebook,它是一个交互式的数据科学和计算环境,支持多种编程语言,如…...
flume系列之:记录一次消费大量Debezium数据,数据包含dml语句比较大,造成数据堆积在channel的解决方法
flume系列之:记录一次消费大量Debezium数据,数据包含dml语句比较大,造成数据堆积在channel的解决方法 一、背景二、相关技术博客三、flume层面解决方法四、debezium数据采集层面解决方法一、背景 Debezium采集了大量的数据,数据包含DMl语句,数据本身比较大。flume消费了大…...
Could not find artifact com.pageOffice:pageOffice:pom:4.3.0.2 in aliyunmaven
Could not find artifact com.pageOffice:pageOffice:pom:4.3.0.2 in aliyunmaven (https://maven.aliyun.com/repository/public) 仓库服务 阿里云云效 Maven 是什么 阿里云Maven中央仓库为 阿里云云效 提供的公共代理仓库,帮助研发人员提高研发生产效率&#x…...

2023年9月数据治理/项目管理/产品管理/商务礼仪企业内训定制
在节奏飞驰、风起云涌的企业世界中,为了企业的蓬勃发展,可以在内部或者外部挑选有经验的老师进行培训和学习。简而言之,任何一个企业想要发展,都少不了进行内训。 企业内训的好处 提高员工的技能和知识水平 通过不断地学习和培训…...
后端面试话术集锦第 九 篇:Activiti工作流面试话术
这是后端面试集锦第九篇博文——Activiti工作流面试话术❗❗❗ 1. 工作流话术 工作流这块儿,实际在工作中使用的时候,Activiti用的居多,当然还有一些其他的工作流引擎。 在网上看了也大概看了一下,其他的像JBPM以及workflow等用的情况来讲不是很多。 所以说Activiti目前…...

JS中方法、函数、属性是一个东西吗
在 JavaScript 中,方法、函数和属性是相关但不完全相同的概念。 方法(Method):在对象中,方法是对象的属性,但它的值是一个函数。方法可以通过对象来调用,并且可以访问对象的属性和其他方法。 …...

面经:微服务
文章目录 参考资料一. 微服务概述1. CAP理论2. BASE理论3. SpringBoot 与 SpringCloud对比 二. 服务注册:Zookeeper,Eureka,Nacos,Consul1. Nacos两种健康检查方式?2. nacos中负责负载均衡底层是如何实现的3. Nacos原理4. 临时实例和持久化(非临时)实例 …...

K8s 持久化存储有几种方式?一文了解本地盘/CSI 外接存储/K8s 原生存储的优缺点
当今云原生环境中,Kubernetes(K8s)已成为既定的容器编排工具。随着 K8s 的普及,存储也成为 K8s 用户关注的一个重要问题:为了满足不同的场景需求,K8s 可以支持基于不同架构的多种存储方案。这些方案间有什么…...

【MySQL】3、MySQL的索引、事务、存储引擎
create table class (id int not null,name char(10),score decimal(5,2)); insert into class values (1,zhangsan,80.5); update class set namewangwu,passwd123 where id2; select * from class where id2; drop 索引的概念 是一种帮助系统,能够更快速的查询信…...
【Hello Algorithm】链表相关算法题
本篇博客介绍: 介绍下链表相关的算法题 链表相关算法题 快慢指针回文结构链表将单向链表按某值划分为左边小,中间相等,右边大的形式复制带随机指针的链表 链表相关的算法题其实都算不上难 我们真正要考虑的是一些边界问题 事实上链表题就是在…...

阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践
6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...

用docker来安装部署freeswitch记录
今天刚才测试一个callcenter的项目,所以尝试安装freeswitch 1、使用轩辕镜像 - 中国开发者首选的专业 Docker 镜像加速服务平台 编辑下面/etc/docker/daemon.json文件为 {"registry-mirrors": ["https://docker.xuanyuan.me"] }同时可以进入轩…...

在WSL2的Ubuntu镜像中安装Docker
Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包: for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)
上一章用到了V2 的概念,其实 Fiori当中还有 V4,咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务),代理中间件(ui5-middleware-simpleproxy)-CSDN博客…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA
浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求,本次涉及的主要是收费汇聚交换机的配置,浪潮网络设备在高速项目很少,通…...

MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...