Unity设备唯一性验证(二维码扫描)
来源:互联网 发布:淘宝达人贴怎么写 编辑:程序博客网 时间:2024/06/11 08:11
是不是被标题骗进来了,客官,来了就别走了。
对!又是这种Low的不要不要的验证方式,不知道有没有哪个大神想出来比较好的设备唯一性的验证方式,没有办法,客户是爸爸!!!!
- 需求篇:
先说一下客户的需求吧,原话是:“我类个乖乖,我这东西要卖的好了,别人仿造我的产品那咱不就亏大了。你们也给我neng一个二维码验证,就是不让别人用”。
就是这个要求,我们的程序变成了拥有自己服务器的一个软件了。可以Low就是Low,不是你加上WWW就变成一个精灵宝可梦了~就更不别说GO了。。
聊技术!
咱们是技术!
Unity网络访问Http的接口,WWW是一个不能不了解的类。
Unity中,WWW是一个简单的访问网页的类,可以通过WWW(URL)去访问网站接口并返回一个WWW的对象。后续操作就根据WWW给出方法,类,做相对应的操作、
如果你之前了解过HTTP的数据提交方式(其实常见有8种之多)GET[^footnote]./POST[^footnote].)两种最经常使用的方式,而WWW访问中,默认的形式就是GET方式,对应的如果你提供一个postData可以使用POST方式提交数据。
然后说一下比较常用的类型:
isDone:判断下载是否已经完成(只读)
Progress:下载进度,一般就是咱们在UI进度条中使用的值
url: 就是WWW这次访问URL
这里先给一个官方的例子,你们感受一下
using UnityEngine;using System.Collections;public class ExampleClass : MonoBehaviour { public string url = "http://images.earthcam.com/ec_metros/ourcams/fridays.jpg"; IEnumerator Start() { WWW www = new WWW(url); yield return www; renderer.material.mainTexture = www.texture; }}
这个就是获取到的一个图片。
这次只是说WWW在网络上的应用,本地的就不说了,也很简单。
-二维码
-设备唯一性
关于设备唯一性,因为IOS和Android的机制不一样(也可能是我这段时间没有去了解过的原因)。
Android的设备机器码在Unity3D中获取是这样的
SystemInfo.deviceUniqueIdentifier (string)
这个参数是string形式的,咱们要把这个提交的服务器做唯一的验证
IOS就比较麻烦了,因为这个函数在IOS中是会改变的,我就另辟蹊径找到了一个IOS设备的唯一码的方法,就是UUID。
我的方法就是,在IOS端写了一个原生获取UUID的方法,然后在Unity中引用,在项目初始化的时候,对全局一个值赋值、
[DllImport("__Internal")] private static extern void GetClientUUID();
如果有需要我可以把.a ,.h文件发给你。
就这样,两种设备的唯一性就可以保证了。
数据验证
首先博主是用了GET的方式,POST不方便我直接测试。
之后就是数据上的验证了,这边服务端的代码就不讲了。稍微说一下规则好了:
1、一个二维码只能激活不同的机器六个。
2、二维码的生成是按照本地的算法加密生成的。
3、二维码的解密是在本地(这里是因为服务端比较懒,这个最好放在服务端来。)
下边上代码:
public static IEnumerator Check1(string url, string productId, GameObject go) { string key = url.Replace("http://www.baidu.com(你们的验证网址)/", ""); int num = (getTen(key) - 123567) / 5000; string id = TempData.sInstantiate.divicesId; WWWForm form = new WWWForm(); form.AddField("cdkey_id", num); form.AddField("product_id", productId); form.AddField("sequence", id); using (WWW www = new WWW("http://www.baidu.com/", form)) { yield return www; if (www.error == null) { Debug.Log(www.text); //用了MiniJson解析返回值 Hashtable htb = MiniJSON.jsonDecode(www.text) as Hashtable; if (htb != null && htb.ContainsKey("success")) { Debug.Log("成功了!"); } else { Debug.Log("NONONONO!!"); } } } }
还有另外一种方式,就要看你们习惯以用哪一种了,其实都一样:
public static IEnumerator Check2(string productId, GameObject go) { string id = TempData.sInstantiate.divicesId; using (WWW www = new WWW("http://www.baidu.com/?product_id=" + productId + "&sequence=" + id)) { yield return www; if (www.error == null) { Debug.Log(www.text); Hashtable htb = MiniJSON.jsonDecode(www.text) as Hashtable; if (htb != null && htb.ContainsKey("success")) { if (bool.Parse(htb["success"].ToString()) == true) { Debug.Log("成功了!"); } else { Debug.Log("NONONONO"); } }
PS:求大神指导!!!!!!!!!!!!!!!!
脚注
- 明文数据提交。
- 数据打包提交。
- Unity设备唯一性验证(二维码扫描)
- Unity二维码扫描和生成
- [Unity+Android]横版扫描二维码
- honeywell 设备开启二维码扫描功能
- Android设备二维码扫描竖屏显示
- 通过libusb操作usb设备扫描二维码
- 二维码(扫描,生成)
- 二维码扫描(生成)
- Unity获取安卓设备唯一识别码
- 二维码系列(三)扫描二维码
- ZBar 二维码扫描(自定义区域扫描)
- 二维码扫描(待总结)
- validator验证唯一性
- ajax 验证唯一性
- 验证唯一性
- unity多平台二维码扫描(可自定义UI)
- iOS 二维码 (包括扫描二维码,和读取二维码图片)
- 功能类:二维码扫描(相机扫描,相册扫描)
- 值得推荐的C/C++框架和库
- Android:基础认识(一)——平台架构
- SQL --上机四=三表内连接查询信息
- perl切片(数组和哈希)
- Linux dhcp服务器搭建
- Unity设备唯一性验证(二维码扫描)
- iOS内存优化常用方法
- Makefile 速成
- Windows与Linux动态库的两种加载方式
- 解决SpringMVC 静态资源无法访问
- 解决js乘法bug
- linux内核中打印栈回溯信息 - dump_stack()函数分析
- bootstrap combox 搜索建议插件
- CSS篇之5. 样式的层级关系,选择器优先级,样式冲突,以及抽离样式模块怎么写,说出思路,有无实践经验