我正在开发Unity build(exe)并试图实现这样一种算法,该算法在一定时间后(例如,一周或一个月后)使我的播放器到期。这是完整的测试代码,有一个小问题(实际上很大):
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.!");
}
}
}
如果在构建中经过了某些日子,它确实会暂停程序,但问题是,如果用户删除了旧版本并再次安装了构建版本,那么它将再次允许三天。
答案 0 :(得分:1)
1.创建一个将日期注册到服务器数据库的Web API。
2.创建另一个API,根据您的玩家到期逻辑返回true或false,并在每次游戏开始时触发API。
答案 1 :(得分:1)
不可能仅从客户端控制它。
顺便说一下,检查逻辑还有另一个更简单的缺陷:用户可以简单地更改其机器上的日期。
请勿尝试仅通过信任来自客户端的信息来强制执行安全功能。特别是可以在服务器端查看的东西。
正如Reezoo Bose所建议的那样,您应该实现一些服务器端检查。
(如果您想要防止黑客入侵这种保护,您还应该使用正确的身份验证和邮件签名来保护通信。当然,这取决于您愿意保护您的软件的“技术级”用户。 )