Unity如何实现登录注册时限制发送验证码次数功能

发布时间:2021-09-26 10:58:59 作者:小新
来源:亿速云 阅读:228

小编给大家分享一下Unity如何实现登录注册时限制发送验证码次数功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

当我们需要在Unity客户端做一个限制功能,比如按钮 (最好是发送验证码按钮)要求每天只能点击三次,等到第二天又有三次机会,这个过程不涉及到服务端消息,只涉及到本地存储,以下是我的解决方案:

直接上代码:

using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEngine.UI;using UniRx;using System;using System.IO;using System.Text;using System.Globalization;public class RegisterPanel : MonoBehaviour  {    private LoginUIPanel mLoginUIPanel;    StreamWriter writer;    StreamReader reader; //本地存储手机号    private string set_phonenum; //同一个手机号码使用次数    private int useNum=1;    FileInfo file;    private Button btn_GetMsgCode;/**倒计时 */    private Text txt_CountDownTimer;  } private void Awake()  {   //获取验证码按钮      btn_GetMsgCode = input_MsgCode.transform.Find("Btn_GetVerficationCode").GetComponent<Button>();btn_GetMsgCode.onClick.AddListener(OnGetMsgCodeClick); txt_CountDownTimer = btn_GetMsgCode.transform.Find("Text").GetComponent<Text>(); } private void OnEnable()    {  ResetGetMsgCode();}/**     * 获取验证码      */    private void OnGetMsgCodeClick()    {           if (!mLoginUIPanel.CheckGetMsgCode(input_Account.text))      {        Debug.Log("没有输入");        return;      }           set_phonenum = input_Account.text.ToString();       if (Limit())      {        Debug.Log("返回true");        return;      }      else      {        int timer = 60;        intervalStream = Observable.Interval(TimeSpan.FromSeconds(1))          .Where(value => { return timer > 1; })          .SubscribeToText(txt_CountDownTimer, value =>          {             btn_GetMsgCode.interactable = false;                        return (timer--).ToString() + "秒";          });        //.AddTo(this);  //绑定生命周期         timeStream = Observable.Timer(TimeSpan.FromSeconds(60))           .SubscribeToText(txt_CountDownTimer, _ =>           {             btn_GetMsgCode.interactable = true;             return "获取验证码";           });        //.AddTo(this);      }          } private bool Limit()    {      if (PlayerPrefs.HasKey(set_phonenum))      {        mLoginUIPanel.ShowToast("号码已经被注册过!");        return true;      }      PlayerPrefs.SetString(set_phonenum, set_phonenum);      //Application.streamingAssetsPath       //获取当前时间天数      DateTime now = DateTime.Now;      DateTimeOffset nowtimesss = DateTimeOffset.Now;      string nowtime = now.Day.ToString();      string filenames = Application.dataPath+"/num.txt";           //写入当前次数      //第一次创建文件      FileInfo file = new FileInfo(filenames);      if (!file.Exists)      {              file.CreateText().Close();        file.CreationTimeUtc = nowtimesss.UtcDateTime;        Debug.Log("第一次创建" + file.CreationTimeUtc);        string bb = file.CreationTime.ToString();        char[] ss = new char[] {'/'};        string[] nnn = bb.Split(ss);        Debug.Log(nnn[1]);        PlayerPrefs.SetString("FileTime", nnn[1]);        PlayerPrefs.SetInt("i", 0);      }           if (Convert.ToInt32(nowtime)!=(Convert.ToInt32(PlayerPrefs.GetString("FileTime"))))      {        //刷新次数        Debug.Log("刷新");        FileStream stream = File.Open(filenames, FileMode.OpenOrCreate, FileAccess.Write);        stream.Seek(0, SeekOrigin.Begin);        stream.SetLength(0);        stream.Close();        //重置次数和时间        PlayerPrefs.SetInt("i", 0);        PlayerPrefs.SetString("FileTime", nowtime);      }      //再判断次数      //如果是当天      if ((Convert.ToInt32(PlayerPrefs.GetString("FileTime")))== Convert.ToInt32(nowtime))      {        Debug.Log("执行");                 if (PlayerPrefs.GetInt("i") > 2)        {          Debug.Log("次数已达上限");          mLoginUIPanel.ShowToast("次数已达上限,请明天再来!");           return true;        }        WriteIntoTxt(useNum, filenames, file);        //读取本地数据        ReadOutTxt(filenames);        //排序        Allmytxt.Sort();        //对当前号码取最大值存入        PlayerPrefs.SetInt("i", Allmytxt[Allmytxt.Count - 1]);        useNum++;        int a = 3 - Allmytxt[Allmytxt.Count - 1];        mLoginUIPanel.ShowToast("今天还剩下"+ a+ "次注册机会");        Debug.Log(PlayerPrefs.GetInt("i"));        // Debug.Log("当前文件日期" + Convert.ToInt32(PlayerPrefs.GetString("FileTime")));        //先判断时间        return false;      }            return false;    } /**     * reset重置倒计时·     */    public void ResetGetMsgCode()    {      btn_GetMsgCode.interactable = true;      txt_CountDownTimer.text = "获取验证码";    } //把所有的数据写入文本中    public void WriteIntoTxt(int message,string filename,FileInfo file)    {       // FileInfo file = new FileInfo(filename);       //最后一次修改日期并存储                   if (!file.Exists)      {        writer = file.CreateText();      }      else      {        writer = file.AppendText();      }      writer.WriteLine(message);      writer.Flush();      writer.Dispose();      writer.Close();       string bb = file.LastAccessTime.ToString();      char[] ss = new char[] { '/' };      string[] nnn = bb.Split(ss);       Debug.Log(nnn[1]);               PlayerPrefs.SetString("FileTime", nnn[1]);     }    //读取次数 存储到列表中    public void ReadOutTxt(string filename)    {      Allmytxt.Clear();      reader = new StreamReader(filename, Encoding.UTF8);      string text;      int line = 0;      while ((text = reader.ReadLine()) != null)      {        ++line;               // Allmytxt.Add(int.Parse(text));      }      //利用文本的行数来判断次数      Allmytxt.Add(line);      Debug.Log(line);      reader.Dispose();      reader.Close();}

以上是“Unity如何实现登录注册时限制发送验证码次数功能”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

推荐阅读:
  1. 图解NodeJS实现登录注册功能
  2. Python登录注册验证功能实现

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

unity

上一篇:windows系统中实现磁盘满额自动邮件报警的具体思路及操作步骤是怎样的

下一篇:如何关闭xp的自动更新以及多种方法关闭xp中的自动更新功能

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》