zoukankan      html  css  js  c++  java
  • Unity利用SMSSDK实现短信验证码(附代码)

           最近一直在研究如何给app更多实用性的功能,在app进行登录或者注册时,为了方便用户更加快捷的完成登录功能,所以就决定采用短信验证码的方式进行验证登录。在学习的过程中,先使用了Mob的短信服务进行短信验证,因为他是免费的,而且不需要提交什么材料(单纯为了测试),后期加入到项目中的话,还是需要去创建自己的签名和短信模板,先拿Mob练练手,后期在项目中还是会使用阿里云的短信服务,到时候实现了之后也会分享出来。

          因为我这里只是做了一个简单的Demo,所以就没有必要去申请这些权限,其实申请的话很容易过的,只要上传一下公司的营业执照就好。好了,废话不多说了,实现功能吧!

          需要先在Mob上有一个自己的账号,用自己的常用邮箱注册就好,然后进入到后台,创建一个自己的应用,随便取个名字就可以创建成功,创建成功后就可以拿到Appkey及Appsecret,这两个数据后面是需要用到的,有了这个就可以非常方便的看到后台的统计信息,然后再Mob官网上下载SMSSDK,因为都是开源项目,所以Mob的代码都是托管在git上的,然后将里面的Unity包导入到项目中。我新建了一个工程来实现该功能,利用UGUI搭建了一个简易的收发验证码的界面。接下来就是开始码代码了,新建一个测试脚本,并且继承且实现SMSSDKHandler接口,为了方便接收验证码发送的回调结果。先申明SMSSDK变量,然后在Start中初始化,将先前创建的Appkey及App secret填入,第三个参数为是否warn,根据官网建议设置为false。

    ssdk.init("292449f735890", "f1bee8045aac2e6cbb7c535a5277aa1c", false);
    ssdk.setHandler(this);

          接下来是实现短信验证码功能,特别需要注意的是第四个参数,它表示的短信模板,因为我们一开始是没有申请到短信模板的,因为Mob需要我们的应用中先利用他们sdk实现了短信验证码功能,提交的app才能通过审核。所以此时我们是没有短信模板的,所以这里在测试的时候传null就好了。

    ssdk.getCode(CodeType.TextCode, phone, "86", null);

          然后点击发送按钮后,就可以接收到短信了,接下来就是验证验证码是否正确了。phoneNumber表示的是手机号,codeNumer表示的是输入的验证码,点击验证后,就会自动验证了。

    ssdk.commitCode("phoneNumber", "86", "codeNumber");

           前面因为我们实现了SMSSDKHandler接口,所以在onComplete方法中返回验证成功,在onError方法中返回验证失败。

    public void onComplete(int action, object resp)
        {
            ActionType act = (ActionType)action;
            if (resp != null)
            {
                //result = resp.ToString();
                text.text += "
    " + resp.ToString();
                Debug.Log(resp.ToString());
            }
            if (act == ActionType.GetCode)
            {
                text.text += "
     验证成功!!!";
                string responseString = (string)resp;
                Debug.Log("isSmart :" + responseString);
            }
        }
    
        public void onError(int action, object resp)
        {
            Debug.Log("Error :" + resp);
            text.text += "
     验证失败!!!";
            text.text += "
     Error : " + resp;
            print("OnError ******resp" + resp);
        }

           以下是我的完整代码。

    public class Test : MonoBehaviour, SMSSDKHandler
    {
    
        public SMSSDK ssdk;
        private InputField code;
        private InputField phoneNum;
        private Button enter;
        private Button send;
        private string codeNum;
        private string phone;
        private Text timer;
        private bool isSend;
        private int time;
        private float t;
        public Text text;
        private void Start()
        {
            ssdk.init("292449f735890", "f1bee8045aac2e6cbb7c535a5277aa1c", false);
            ssdk.setHandler(this);
            timer = transform.Find("Timer").GetComponent<Text>();
            code = transform.Find("code").GetComponent<InputField>();
            phoneNum = transform.Find("num").GetComponent<InputField>();
            enter = transform.Find("enter").GetComponent<Button>();
            send = transform.Find("send").GetComponent<Button>();
    
            timer.gameObject.SetActive(false);
            enter.onClick.AddListener(EnterCodeHandler);
            send.onClick.AddListener(SendCodeHandler);
        }
        private void Update()
        {
            if (isSend)
            {
                //倒计时
                timer.text = time.ToString();
                t += Time.deltaTime;
                if (t >= 1)
                {
                    time--;
                    t = 0;
                }
                if (time < 0)
                {
                    isSend = false;
                    send.gameObject.SetActive(true);
    
                    timer.gameObject.SetActive(false);
                }
            }
        }
        /// <summary>
        /// 发送验证码
        /// </summary>
        private void SendCodeHandler()
        {
            phone = phoneNum.text;
            isSend = true;
            time = 60;
            send.gameObject.SetActive(false);
            timer.gameObject.SetActive(true);
            ssdk.getCode(CodeType.TextCode, phone, "86", null);
        }
        /// <summary>
        /// 点击确定,对比验证码
        /// </summary>
        private void EnterCodeHandler()
        {
            ssdk.commitCode(phone, "86", code.text);
        }
    
        public void onComplete(int action, object resp)
        {
            ActionType act = (ActionType)action;
            if (resp != null)
            {
                //result = resp.ToString();
                text.text += "
    " + resp.ToString();
                Debug.Log(resp.ToString());
            }
            if (act == ActionType.GetCode)
            {
                text.text += "
     验证成功!!!";
                string responseString = (string)resp;
                Debug.Log("isSmart :" + responseString);
            }
        }
    
        public void onError(int action, object resp)
        {
            Debug.Log("Error :" + resp);
            text.text += "
     验证失败!!!";
            text.text += "
     Error : " + resp;
            print("OnError ******resp" + resp);
        }
    }

           通过上面的实现,我们现在就基本实现了短信验证功能,但是因为Mob是免费的,所以对每个手机号都有限制,好像是对每一个手机号都只能验证一次,所以很不方便。接下来我打算利用阿里云的短信服务实现一个,到时候也会分享出来,这个项目的源码及我发布的一个测试版本都放在了我的https://github.com/Iamdevelope/SMSSDemo上了,有兴趣的可以下载下来看看。

  • 相关阅读:
    Network Embedding 论文小览
    DLRS(深度学习应用于推荐系统论文汇总--2017年8月整理)
    深度语义匹配模型-DSSM 及其变种
    python 按值排序
    python 日期排序
    推荐领域数据集
    EPS 转 pdf 在线
    梯度下降法的三种形式BGD、SGD以及MBGD
    Daily paper -Science 2006: Experimental Study of Inequality and Unpredictability in an Artificial Cultural Market (探究群体行为对商品销量的影响)
    2017年Nature文章“Millions of online book co-purchases reveal partisan differences in the consumption of science”阅读笔记
  • 原文地址:https://www.cnblogs.com/mufei/p/10232747.html
Copyright © 2011-2022 走看看