C# 在unity中,top exe如何在特定日期时间后过期
我正在开发unity build(exe)并尝试实现这样一种算法,该算法会在特定时间后(例如,一周或一个月后)使我的播放器过期。下面是完整的测试代码,但有一个小问题(实际上是大问题):C# 在unity中,top exe如何在特定日期时间后过期,c#,unity3d,C#,Unity3d,我正在开发unity build(exe)并尝试实现这样一种算法,该算法会在特定时间后(例如,一周或一个月后)使我的播放器过期。下面是完整的测试代码,但有一个小问题(实际上是大问题): public类locallimiteddaysicense:monobhavior { 浮动天数=3; 公共字符串currentDate; 布尔信息; 无效唤醒() { 字符串playerPrefKeyName=“PlayerStartDateKey”; currentDate=DateTime.Now.ToSt
public类locallimiteddaysicense:monobhavior
{
浮动天数=3;
公共字符串currentDate;
布尔信息;
无效唤醒()
{
字符串playerPrefKeyName=“PlayerStartDateKey”;
currentDate=DateTime.Now.ToString();
字符串playerStartDate=PlayerPrefs.GetString(playerPrefKeyName,“”);
如果(!PlayerPrefs.HasKey(playerPrefKeyName))
{
Log(“播放器开始日期设置”);
PlayerPrefs.SetString(playerPrefKeyName,currentDate);
}
其他的
{
Log(“播放器开始日期已设置”);
}
字符串playerPrefsSaveDate=PlayerPrefs.GetString(playerPrefKeyName);
DateTime today=DateTime.Now;
DateTime PlayerFirstativeDate=Convert.ToDateTime(PlayerPrefs.GetString(playerPrefKeyName));
DateTime playerLimitDate=playerFirstativeDate.AddDays(numberOfDays);
if(DateTime.Compare(今天,playerLimitDate)>0)//确认
{
Time.timeScale=0;
isShowExpiryMessage=true;
}
if(DateTime.Compare(今天,playerFirstativeDate)<0)//确认用户没有更改系统的日期
{
Time.timeScale=0;
isShowExpiryMessage=true;
}
}
void OnGUI()
{
如果(isShowExpiryMessage)
{
标签(新的Rect((Screen.width/2)-100,Screen.height/2300100),“对不起,exe已经过期了!”;
}
}
}
如果在构建过程中经过了某些天,它确实会停止程序,但问题是,如果用户删除了旧的构建并再次安装了构建,那么它将再次允许三天 1.创建将日期注册到服务器数据库的web API
2.创建另一个API,根据玩家的过期逻辑返回true或false,并在每次游戏开始时启动该API。无法仅从客户端控制该API 顺便说一句,您的检查逻辑中还有一个更简单的缺陷:用户只需更改机器上的日期即可 不要试图通过仅信任来自客户端的信息来强制实施安全功能。特别是那些可以在服务器端简单检查的东西 正如所建议的,您应该实现一些服务器端检查 (如果你想防止黑客攻击此保护,你还应该通过正确的身份验证和消息签名来保护通信。当然,这取决于你愿意保护你的软件免受哪个“技术级别”用户的攻击。)
public class LocalLimitedDaysLicense : MonoBehaviour
{
float numberOfDays = 3;
public string currentDate;
bool isShowExpiryMessage;
void Awake()
{
string playerPrefKeyName = "PlayerStartDateKey";
currentDate = DateTime.Now.ToString();
string playerStartDate = PlayerPrefs.GetString(playerPrefKeyName, "");
if (!PlayerPrefs.HasKey(playerPrefKeyName))
{
Debug.Log("Player Start Date Setting");
PlayerPrefs.SetString(playerPrefKeyName, currentDate);
}
else
{
Debug.Log("Player Start Date already Set");
}
string playerPrefsSaveDate = PlayerPrefs.GetString(playerPrefKeyName);
DateTime today = DateTime.Now;
DateTime playerFirstActiveDate = Convert.ToDateTime(PlayerPrefs.GetString(playerPrefKeyName));
DateTime playerLimitDate = playerFirstActiveDate.AddDays(numberOfDays);
if (DateTime.Compare(today, playerLimitDate) > 0)//confirm that
{
Time.timeScale = 0;
isShowExpiryMessage = true;
}
if (DateTime.Compare(today, playerFirstActiveDate) < 0)//Confirm that user didn't change the date of system
{
Time.timeScale = 0;
isShowExpiryMessage = true;
}
}
void OnGUI()
{
if (isShowExpiryMessage)
{
GUI.Label(new Rect((Screen.width / 2) - 100, Screen.height / 2, 300, 100), "Sorry the exe has expired.!");
}
}
}