Unity登錄注冊時(shí)限制發(fā)送驗(yàn)證碼次數(shù)功能的解決方法
更新時(shí)間:2020年01月01日 09:07:50 作者:尋漠瀟雨
這篇文章主要為大家詳細(xì)介紹了Unity登錄注冊時(shí)限制發(fā)送驗(yàn)證碼次數(shù)功能的解決方案,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
當(dāng)我們需要在Unity客戶端做一個(gè)限制功能,比如按鈕 (最好是發(fā)送驗(yàn)證碼按鈕)要求每天只能點(diǎn)擊三次,等到第二天又有三次機(jī)會(huì),這個(gè)過程不涉及到服務(wù)端消息,只涉及到本地存儲(chǔ),以下是我的解決方案:
直接上代碼:
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;
//本地存儲(chǔ)手機(jī)號(hào)
private string set_phonenum;
//同一個(gè)手機(jī)號(hào)碼使用次數(shù)
private int useNum=1;
FileInfo file;
private Button btn_GetMsgCode;
/**倒計(jì)時(shí) */
private Text txt_CountDownTimer;
}
private void Awake()
{
//獲取驗(yàn)證碼按鈕
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();
}
/**
* 獲取驗(yàn)證碼
*/
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 "獲取驗(yàn)證碼";
});
//.AddTo(this);
}
}
private bool Limit()
{
if (PlayerPrefs.HasKey(set_phonenum))
{
mLoginUIPanel.ShowToast("號(hào)碼已經(jīng)被注冊過!");
return true;
}
PlayerPrefs.SetString(set_phonenum, set_phonenum);
//Application.streamingAssetsPath
//獲取當(dāng)前時(shí)間天數(shù)
DateTime now = DateTime.Now;
DateTimeOffset nowtimesss = DateTimeOffset.Now;
string nowtime = now.Day.ToString();
string filenames = Application.dataPath+"/num.txt";
//寫入當(dāng)前次數(shù)
//第一次創(chuàng)建文件
FileInfo file = new FileInfo(filenames);
if (!file.Exists)
{
file.CreateText().Close();
file.CreationTimeUtc = nowtimesss.UtcDateTime;
Debug.Log("第一次創(chuàng)建" + 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"))))
{
//刷新次數(shù)
Debug.Log("刷新");
FileStream stream = File.Open(filenames, FileMode.OpenOrCreate, FileAccess.Write);
stream.Seek(0, SeekOrigin.Begin);
stream.SetLength(0);
stream.Close();
//重置次數(shù)和時(shí)間
PlayerPrefs.SetInt("i", 0);
PlayerPrefs.SetString("FileTime", nowtime);
}
//再判斷次數(shù)
//如果是當(dāng)天
if ((Convert.ToInt32(PlayerPrefs.GetString("FileTime")))== Convert.ToInt32(nowtime))
{
Debug.Log("執(zhí)行");
if (PlayerPrefs.GetInt("i") > 2)
{
Debug.Log("次數(shù)已達(dá)上限");
mLoginUIPanel.ShowToast("次數(shù)已達(dá)上限,請明天再來!");
return true;
}
WriteIntoTxt(useNum, filenames, file);
//讀取本地?cái)?shù)據(jù)
ReadOutTxt(filenames);
//排序
Allmytxt.Sort();
//對(duì)當(dāng)前號(hào)碼取最大值存入
PlayerPrefs.SetInt("i", Allmytxt[Allmytxt.Count - 1]);
useNum++;
int a = 3 - Allmytxt[Allmytxt.Count - 1];
mLoginUIPanel.ShowToast("今天還剩下"+ a+ "次注冊機(jī)會(huì)");
Debug.Log(PlayerPrefs.GetInt("i"));
// Debug.Log("當(dāng)前文件日期" + Convert.ToInt32(PlayerPrefs.GetString("FileTime")));
//先判斷時(shí)間
return false;
}
return false;
}
/**
* reset重置倒計(jì)時(shí)·
*/
public void ResetGetMsgCode()
{
btn_GetMsgCode.interactable = true;
txt_CountDownTimer.text = "獲取驗(yàn)證碼";
}
//把所有的數(shù)據(jù)寫入文本中
public void WriteIntoTxt(int message,string filename,FileInfo file)
{
// FileInfo file = new FileInfo(filename);
//最后一次修改日期并存儲(chǔ)
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]);
}
//讀取次數(shù) 存儲(chǔ)到列表中
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));
}
//利用文本的行數(shù)來判斷次數(shù)
Allmytxt.Add(line);
Debug.Log(line);
reader.Dispose();
reader.Close();
}
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
您可能感興趣的文章:
相關(guān)文章
c#使用S22.Imap收劍靈激活碼郵件代碼示例(imap收郵件)
一個(gè)IMAP收發(fā)郵件的類庫S22.IMAP,方便易用,下面來個(gè)例子可以收劍靈激活碼郵件2013-12-12
C#生成互不相同隨機(jī)數(shù)的實(shí)現(xiàn)方法
這篇文章主要介紹了C#生成互不相同隨機(jī)數(shù)的實(shí)現(xiàn)方法,文中詳細(xì)描述了C#生成互不相同隨機(jī)數(shù)的各個(gè)步驟及所用到的函數(shù),非常具有借鑒價(jià)值,需要的朋友可以參考下2014-09-09
C#條件拼接Expression<Func<T, bool>>的使用
本文主要介紹了C#條件拼接Expression<Func<T, bool>>的使用,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02

