首页 > 其他分享 >【Unity】 HTFramework框架(三十二)授权验证

【Unity】 HTFramework框架(三十二)授权验证

时间:2022-12-13 14:32:18浏览次数:81  
标签:三十二 return 验证 Unity override 授权 Main public HTFramework


更新日期:2020年3月2日。
Github源码:​​​[点我获取源码]​​​ Gitee源码:​​[点我获取源码]​

索引

  • ​​授权验证简介​​
  • ​​使用授权验证​​
  • ​​取消永久授权​​
  • ​​建立授权者​​
  • ​​通过本地时间授权​​
  • ​​通过远程时间授权​​
  • ​​通过本地授权码授权​​
  • ​​通过远程授权码授权​​
  • ​​使用授权者​​

授权验证简介

授权验证功能支持在你的游戏启动时,执行指定的授权检查,可以是本地授权检查,也可以是远程授权检查,只有授权检查通过才能正常进入游戏,如果授权检查失败,框架将会瘫痪整个程序,无论用户做出任何补救措施都将是徒劳(介于没有登录服务器的情况下)。

使用授权验证

取消永久授权

要使用授权验证功能,必须取消框架默认的永久授权条件。

Main模块的属性面板,打开License选项卡,取消勾选Permanent License(勾选此选项为永久授权)。

【Unity】 HTFramework框架(三十二)授权验证_框架

建立授权者

我们新建一个授权者MyLicenser(授权者类必须继承至LicenserBase):

public class MyLicenser : LicenserBase
{
public override string LicenseFailurePrompt
{
get
{
return "授权验证失败,请退出游戏,进入官网重新下载游戏!";
}
}

public override IEnumerator Checking()
{
throw new System.NotImplementedException();
}
}

通过本地时间授权

如果想做的简单一点,直接通过本地时间授权,比如让用户每次下载游戏只能玩两个月,两个月之后必须进入官网重新下载(当然是针对单机游戏),我们如下修改:

public class MyLicenser : LicenserBase
{
//用户下载游戏(也即是第一次进入游戏)的时间
private DateTime _loadTime;

public override string LicenseFailurePrompt
{
get
{
return "授权验证失败,请退出游戏,进入官网重新下载游戏!";
}
}

/// <summary>
/// 授权验证
/// </summary>
public override IEnumerator Checking()
{
//获取下载时间
_loadTime = Main.m_CustomModule["Loader"].GetLoadTime();

yield return null;

int days = new TimeSpan(DateTime.Now.Ticks - _loadTime.Ticks).Days;

//使用天数小于等于60天,才授权通过
IsLicensePass = days <= 60;
}
}

通过远程时间授权

本地时间授权有一个致命的BUG,用户可以随意修改自己的系统时间,导致授权失误!所以在拥有服务器的情况下,我们可以进一步建立远程时间授权机制,我们如下修改:

public class MyLicenser : LicenserBase
{
public override string LicenseFailurePrompt
{
get
{
return "授权验证失败,请退出游戏,进入官网重新下载游戏!";
}
}

/// <summary>
/// 授权验证
/// </summary>
public override IEnumerator Checking()
{
//获取下载时间
DateTime loadTime = Main.m_CustomModule["Loader"].GetLoadTime();

//向服务器发起授权验证请求(传入下载时间,不传当前时间,当前时间由服务器获取)
yield return Main.m_CustomModule["Licenser"].BeginLicense(loadTime);

//等待获取验证状态
IsLicensePass = Main.m_CustomModule["Licenser"].IsLicensePass;
}
}

通过本地授权码授权

我们也可以通过让用户输入授权码的形式来授权,我们如下修改:

public class MyLicenser : LicenserBase
{
public override string LicenseFailurePrompt
{
get
{
return "授权验证失败,授权码错误,请重新进入游戏!";
}
}

/// <summary>
/// 授权验证
/// </summary>
public override IEnumerator Checking()
{
//打开授权码输入界面
yield return Main.m_UI.OpenTemporaryUI<LicenserPanel>();

LicenserPanel licenserPanel = Main.m_UI.GetOpenedUI<LicenserPanel>();

//等待用户输入授权码完成
yield return licenserPanel.WaitInputDone();

//授权码仓库中存在当前输入的授权码,则授权通过
if (Main.m_CustomModule["LicenseCodeHouse"].IsExist(licenserPanel.LicenseCode))
{
IsLicensePass = true;
}
else
{
IsLicensePass = false;
}
}
}

通过远程授权码授权

同样的问题,本地授权码形式也可以进阶为远程授权,这样可以让我们的游戏安全系数更高,即使用户输入的授权码正确,你也可以通过同一个IP只能绑定同一个授权码的喷血设定防止用户到处传播一个授权码,我们如下修改:

public class MyLicenser : LicenserBase
{
public override string LicenseFailurePrompt
{
get
{
return "授权验证失败,授权码错误,请重新进入游戏!";
}
}

/// <summary>
/// 授权验证
/// </summary>
public override IEnumerator Checking()
{
//打开授权码输入界面
yield return Main.m_UI.OpenTemporaryUI<LicenserPanel>();

LicenserPanel licenserPanel = Main.m_UI.GetOpenedUI<LicenserPanel>();

//等待用户输入授权码完成
yield return licenserPanel.WaitInputDone();

//向服务器发起授权验证请求
yield return Main.m_CustomModule["Licenser"].BeginLicense(licenserPanel.LicenseCode);

//等待获取验证状态
IsLicensePass = Main.m_CustomModule["Licenser"].IsLicensePass;
}
}

使用授权者

如上所述的只是几种授权方式的例子,你可以自定义任何授权方式,不过必须得在Main模块属性面板的License选项卡下启用该授权者,指定的授权者才能正式启用。

【Unity】 HTFramework框架(三十二)授权验证_服务器_02


标签:三十二,return,验证,Unity,override,授权,Main,public,HTFramework
From: https://blog.51cto.com/u_15911199/5934059

相关文章

  • Unity插件 - MeshEditor(八)模型镜像特效
    将静态模型(带MeshFilter)按指定轴向、指定距离克隆一个镜像物体出来,思路很简单,将模型的顶点坐标按指定轴取反,并累加上设定的距离值,然后就完毕了!不过,因为镜像体的顶点镜像于之......
  • 【Unity】 HTFramework框架(三十一)全局设置
    更新日期:2020年3月2日。Github源码:​​​[点我获取源码]​​​Gitee源码:​​[点我获取源码]​​索引​​全局设置简介​​​​使用全局设置​​​​打开全局设置面板​​......
  • unity使用ugui自制调色面板
    突然想实现一个调色面板,然后开工...首先找找有没有什么接口可调,木有找到,找到一些调用win32实现的本地颜色面板的调用,感觉不科学,反正多平台肯定是搞不定的。既然没找到,还是老......
  • Unity 自定义创建脚本模板
    Unity自定义创建脚本模板原理:以模板代码为底板,通过关键字替换来实现代码创建两种实现方案方案11.先准备好对应的代码模板,放到Assets\ScriptTemplates目录下usingSys......
  • Unity中实现A*寻路
    前言:最近没事儿没工作,计划每天写一篇博客,防止对Unity生疏,也可以记录学习的点点滴滴。A*寻路在很多面试里都会问到,但实际工作中根本用不着自己写,网上有成熟的插件,不容易错......
  • Unity 脚本基础
    Unity官方手册是最好的教程书,只是偶尔限于冗长ScriptingconceptsAlthoughUnityusesanimplementationofthestandardMonoruntimeforscripting,itstillh......
  • [SIGMOD 2022]DMCS Density Modularity based Community Search
    [SIGMOD2022]DMCS:DensityModularitybasedCommunitySearch介绍目标是找到含有查询点的社区。文章的切入点是高质量的社区一定也是高模块化的,及社区内密度高,且社......
  • unity 实现物体空间距离音量远小近大的效果
    需要两个组件一 AudioListener需要添加到摄像机,一般默认都有 二 AudioSource需要添加到需要发出声音的物体对象上将AudioSource中空间混合SpatialBlend设置为1......
  • 在Unity3D软件中将图片转换为UI图片
    在Unity3D软件中将图片转换为UI图片,先将图片拖进Unity3D中,然后在右侧栏Inspector->TextureType下选择Sprite(2DandUI),点击apply,图片变为UI图片(显示播放键)。 ......
  • 菜鸡学Unity 之 坑神之路 (记录坑点,不断更新中~)
    LZ-Says:万事儿开头难,枪在手,不得不发~前言最近在了解Unity这块的内容,不得不说,新的领域,陌生的代码世界,初入茅庐,太多的陌生与不适,唯有咬紧牙关,坚持下去,到最后,会发现,一切不过......