当前位置:   article > 正文

Unity利用SMSSDK实现短信验证码(附源代码)_unity发送短信验证码验证

unity发送短信验证码验证

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

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

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

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

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

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

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

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

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

  1. public void onComplete(int action, object resp)
  2. {
  3. ActionType act = (ActionType)action;
  4. if (resp != null)
  5. {
  6. //result = resp.ToString();
  7. text.text += "\n" + resp.ToString();
  8. Debug.Log(resp.ToString());
  9. }
  10. if (act == ActionType.GetCode)
  11. {
  12. text.text += "\n 验证成功!!!";
  13. string responseString = (string)resp;
  14. Debug.Log("isSmart :" + responseString);
  15. }
  16. }
  17. public void onError(int action, object resp)
  18. {
  19. Debug.Log("Error :" + resp);
  20. text.text += "\n 验证失败!!!";
  21. text.text += "\n Error : " + resp;
  22. print("OnError ******resp" + resp);
  23. }

       以下是我的完整代码。

  1. public class Test : MonoBehaviour, SMSSDKHandler
  2. {
  3. public SMSSDK ssdk;
  4. private InputField code;
  5. private InputField phoneNum;
  6. private Button enter;
  7. private Button send;
  8. private string codeNum;
  9. private string phone;
  10. private Text timer;
  11. private bool isSend;
  12. private int time;
  13. private float t;
  14. public Text text;
  15. private void Start()
  16. {
  17. ssdk.init("292449f735890", "f1bee8045aac2e6cbb7c535a5277aa1c", false);
  18. ssdk.setHandler(this);
  19. timer = transform.Find("Timer").GetComponent<Text>();
  20. code = transform.Find("code").GetComponent<InputField>();
  21. phoneNum = transform.Find("num").GetComponent<InputField>();
  22. enter = transform.Find("enter").GetComponent<Button>();
  23. send = transform.Find("send").GetComponent<Button>();
  24. timer.gameObject.SetActive(false);
  25. enter.onClick.AddListener(EnterCodeHandler);
  26. send.onClick.AddListener(SendCodeHandler);
  27. }
  28. private void Update()
  29. {
  30. if (isSend)
  31. {
  32. //倒计时
  33. timer.text = time.ToString();
  34. t += Time.deltaTime;
  35. if (t >= 1)
  36. {
  37. time--;
  38. t = 0;
  39. }
  40. if (time < 0)
  41. {
  42. isSend = false;
  43. send.gameObject.SetActive(true);
  44. timer.gameObject.SetActive(false);
  45. }
  46. }
  47. }
  48. /// <summary>
  49. /// 发送验证码
  50. /// </summary>
  51. private void SendCodeHandler()
  52. {
  53. phone = phoneNum.text;
  54. isSend = true;
  55. time = 60;
  56. send.gameObject.SetActive(false);
  57. timer.gameObject.SetActive(true);
  58. ssdk.getCode(CodeType.TextCode, phone, "86", null);
  59. }
  60. /// <summary>
  61. /// 点击确定,对比验证码
  62. /// </summary>
  63. private void EnterCodeHandler()
  64. {
  65. ssdk.commitCode(phone, "86", code.text);
  66. }
  67. public void onComplete(int action, object resp)
  68. {
  69. ActionType act = (ActionType)action;
  70. if (resp != null)
  71. {
  72. //result = resp.ToString();
  73. text.text += "\n" + resp.ToString();
  74. Debug.Log(resp.ToString());
  75. }
  76. if (act == ActionType.GetCode)
  77. {
  78. text.text += "\n 验证成功!!!";
  79. string responseString = (string)resp;
  80. Debug.Log("isSmart :" + responseString);
  81. }
  82. }
  83. public void onError(int action, object resp)
  84. {
  85. Debug.Log("Error :" + resp);
  86. text.text += "\n 验证失败!!!";
  87. text.text += "\n Error : " + resp;
  88. print("OnError ******resp" + resp);
  89. }
  90. }

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/233600
推荐阅读
相关标签
  

闽ICP备14008679号