Unity利用SMSSDK实现短信验证码(附代码)

Wesley13
• 阅读 470

       最近一直在研究如何给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 += "\n" + resp.ToString();
            Debug.Log(resp.ToString());
        }
        if (act == ActionType.GetCode) { text.text += "\n 验证成功!!!"; string responseString = (string)resp; Debug.Log("isSmart :" + responseString); } } public void onError(int action, object resp) { Debug.Log("Error :" + resp); text.text += "\n 验证失败!!!"; text.text += "\n 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 += "\n" + resp.ToString(); Debug.Log(resp.ToString()); } if (act == ActionType.GetCode) { text.text += "\n 验证成功!!!"; string responseString = (string)resp; Debug.Log("isSmart :" + responseString); } } public void onError(int action, object resp) { Debug.Log("Error :" + resp); text.text += "\n 验证失败!!!"; text.text += "\n Error : " + resp; print("OnError ******resp" + resp); } }

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

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
liam liam
1年前
如何读取redis的手机号验证码数据,实现自动化登录测试
1、案例描述用户选择短信登录!发送短信后,后端接口逻辑已把验证码缓存在redis,!在apifox上定义对应下发登录短信接口,短信登录接口下载地址:这时候问题就来了,怎么样才能让apifox自动获取下发登录短信接口对应的手机号的验证码,自动填充到短信登录接口的code字段?2、解决思路方案一:后端通过接口返回验证码
不是海碗 不是海碗
1年前
验证码短信API的应用场景有哪些你知道嘛?
短信验证码已经影响到了我们生活方方面面,成为了不可或缺的一部分。同时,短信验证码也是用户体验中的一个重要指标,如果手机经常出现接收验证码很慢甚至是没有接收到验证码的情况,这就会严重影响到网站或者APP的用户体验,从而导致大量用户的流失。短信验证码如此重要,那个短信验证码API也是必不可少的,这篇文章我就来说说短信验证码API的应用场景
宙哈哈 宙哈哈
1年前
PHP短信验证码防刷方案
短信验证码是通过发送验证码到手机的一种有效的验证码系统。利用短信验证码来注册会员,大大降低了非法注册的数据。
不是海碗 不是海碗
1年前
一文带你看透短信验证码
短信验证码应用于我们生活、工作的方方面面,比如注册登录账号、支付订单、修改密码等等。验证码短信主要出于安全的考虑,防止应用/网站被恶意注册,恶意攻击,对于网站、APP而言,大量的无效注册,重复注册,甚至是恶意攻击很令人头痛。
曼成 曼成
1星期前
验证码短信API接入 Demo 示例
验证码短信API是一种广泛应用于各类应用中的安全验证服务,它通过发送短信验证码到用户手机,以确保操作的安全性和真实性。本文将为您提供一个简单的验证码短信API接入的示例,帮助您快速理解和实现该功能。
不是海碗 不是海碗
11个月前
验证码短信 API 接入指南:Java 语言示例代码
短信验证码是一种通过短信发送的验证码,通常用于验证用户的身份、保障账户安全和防止恶意攻击等。短信验证码已经成为现代社会中不可或缺的一部分,广泛应用于各种场景,包括用户注册和登录、找回密码等等。为了满足企业在账户安全验证和业务发展方面的需求,验证码短信API
不是海碗 不是海碗
10个月前
语音验证码短信原理和应用场景分析
引言随着移动互联网的快速发展,短信验证码成为了许多应用和服务中常用的身份验证方式。然而,有时候用户可能由于各种原因无法接收到短信验证码,或者对于文字验证码不够方便或友好。为了解决这些问题,语音验证码短信API应运而生。该API提供了语音验证码服务,通过拨打
不是海碗 不是海碗
9个月前
了解短信的实现原理以及验证码短信API
短信作为一种便捷、快速的通信方式,已经在我们的日常生活中得到广泛应用。无论是个人通信、企业沟通还是身份验证等场景,短信都发挥着重要的作用。而实现短信功能的核心是短信实现原理和验证码短信API。
曼成 曼成
5个月前
如何集成验证码短信API到你的应用程序
验证码短信API可以帮助你轻松实现用户验证、密码重置和账户恢复等功能,提高用户体验并增强应用程序的安全性。本文将介绍如何将验证码短信API集成到你的应用程序中,以确保你的用户数据得到保护。