我正在开发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.!");
}
}
}如果在构建过程中经过了某些天,它会真正停止程序,但问题是,如果用户删除旧的构建并再次安装该构建,那么它将再次允许三天。
发布于 2018-01-29 17:51:15
1.创建一个web API,将日期注册到服务器数据库。
2.创建另一个接口,根据您的播放器过期逻辑返回true或false,并在每次游戏开始时触发该接口。
发布于 2018-01-29 17:55:44
仅从客户端是不可能控制的。
不要试图通过仅信任来自客户端的信息来强制实施安全功能。特别是那些可以简单地在服务器端检查的东西。
按照Reezoo Bose的建议,您应该实现一些服务器端检查。
(如果您想要防止黑客攻击此保护,您还应该使用正确的身份验证和消息签名来保护通信。当然,这取决于您愿意保护您的软件免受哪些“技术级别”用户的攻击。)
https://stackoverflow.com/questions/48498294
复制相似问题