Swift免费短信验证码实现及动态倒计时功能

今天给大家带来一个简单的免费短信验证码实现demo,采用mob的短信验证码SDK,到目前为止还是免费的,只需要简单的注册--》添加个人应用--》获取appkey集apSecret 即可实现。

具体怎么申请,添加个人应用这里就不累赘了,相信能搜索到本文的必然有能力完成上面的操作。

1、下载mob的免费短信验证SDK,解压后复制SMS_SDK到你的工程,因为此SDK采用OC编写的,在与Swift结合时,需要添加桥接文件,具体操作如下:

右键你的Swift工程,新建一个OC文件,名字随便起,这时会弹出提示你创建一个桥接文件,点击是就OK了!在你的工程中会多出一个以工程名--Bridging-Header.h的文件,打开写入下面的代码:

#import <SMS_SDK/SMSSDK.h> 

当然,创建桥接文件的方法有很多种,会的就无需关注咯。

2、打开工程中的storyboard,创建一个电话号码文本框、验证码文本框、获取验证码按钮、提交验证按钮。并对相关操作进行ViewController连线,如下图:

3、在AppDelegate.swift文件中的func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool中添加如下代码:

SMSSDK.registerApp(你的appKey withSecret: 你的appSecret) 

4、编写ViewController.swift,具体就看代码吧,很简单的一个小功能,请各位自行扩展吧。

//
// ViewController.swift
// Yundou
//
// Created by Slow on 16/1/2.
// Copyright (c) 2016年 Ivan. All rights reserved.
//
import UIKit
class ViewController: UIViewController {
  @IBOutlet weak var getAuthCodeButton: UIButton!
  //验证码文本框
  @IBOutlet weak var authCodeText: UITextField!
  //手机号码文本框
  @IBOutlet weak var phoneText: UITextField!
  override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
  }
  override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
  }
  //获取验证码
  @IBAction func getAuthCode(sender: UIButton) {
    var phoneNum = phoneText.text
    SMSSDK.getVerificationCodeByMethod(SMSGetCodeMethodSMS, phoneNumber:phoneNum, zone: "86",customIdentifier: nil,result: {(error: NSError!) ->Void in
      if(error == nil){
        NSLog("发送成功")
        self.countDown(60)
      }else{
        NSLog("发送失败!%@" , error)
      }
    })
  }
  //提交验证码
  @IBAction func submitAuthCode(sender: UIButton) {
    var authCode = authCodeText.text
    var phoneNum = phoneText.text
    var resultMessage = ""
    SMSSDK.commitVerificationCode(authCode, phoneNumber: phoneNum, zone: "86" ,
      result:{ (error: NSError!) -> Void in
        if(error == nil){
          resultMessage = "恭喜您,验证成功!"
          NSLog("验证成功")
        }else{
          resultMessage = "很抱歉,验证失败!"
          NSLog("验证失败!" , error)
        }
        let resultAlertView:UIAlertView = UIAlertView(title: "验证结果", message: resultMessage, delegate: nil, cancelButtonTitle: "确定")
        resultAlertView.show()
    })
  }
  //验证码倒计时
  func countDown(timeOut:Int){
    //倒计时时间
    var timeout = timeOut
    var queue:dispatch_queue_t = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    var _timer:dispatch_source_t = dispatch_source_create(DISPATCH_SOURCE_TYPE_TIMER, 0, 0,queue)
    dispatch_source_set_timer(_timer, dispatch_walltime(nil, 0), 1*NSEC_PER_SEC, 0)
    //每秒执行
    dispatch_source_set_event_handler(_timer, { () -> Void in
      if(timeout<=0){ //倒计时结束,关闭
        dispatch_source_cancel(_timer);
        dispatch_sync(dispatch_get_main_queue(), { () -> Void in
          //设置界面的按钮显示 根据自己需求设置
          self.getAuthCodeButton.setTitle("再次获取", forState: UIControlState.Normal)
        })
      }else{//正在倒计时
        var seconds = timeout % 60
        var strTime = NSString.localizedStringWithFormat("%.2d", seconds)
        dispatch_sync(dispatch_get_main_queue(), { () -> Void in
//          NSLog("----%@", NSString.localizedStringWithFormat("%@S", strTime) as String)
          UIView.beginAnimations(nil, context: nil)
          UIView.setAnimationDuration(1)
          //设置界面的按钮显示 根据自己需求设置
          self.getAuthCodeButton.setTitle(NSString.localizedStringWithFormat("%@S", strTime) as String, forState: UIControlState.Normal)
          UIView.commitAnimations()
          self.getAuthCodeButton.userInteractionEnabled = false
        })
        timeout--;
      }
    })
    dispatch_resume(_timer)
  }
} 

以上所述是小编给大家介绍的Swift免费短信验证码实现及动态倒计时功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Swift实现iOS应用中短信验证码倒计时功能的实例分享

    在开始之前,我们先来了解一个概念 属性观测器(Property Observers): 属性观察器监控和响应属性值的变化,每次属性被设置值的时候都会调用属性观察器,甚至新的值和现在的值相同的时候也不例外. 可以为属性添加如下的一个或全部观察器: willSet在新的值被设置之前调用 didSet在新的值被设置之后立即调用 接下来开始我们的教程,先展示一下最终效果: 首先声明一个发送按钮: 复制代码 代码如下: var sendButton: UIButton! 在viewDidLoad方法中给发

  • swift 3.0 实现短信验证码倒计时功能

    下面一段代码给大家分享swift 3.0 实现短信验证码倒计时功能,具体实例代码如下所示: class TCCountDown { private var countdownTimer: Timer? var codeBtn = UIButton() private var remainingSeconds: Int = 0 { willSet { codeBtn.setTitle("重新获取\(newValue)秒", for: .normal) if newValue <=

  • Swift免费短信验证码实现及动态倒计时功能

    今天给大家带来一个简单的免费短信验证码实现demo,采用mob的短信验证码SDK,到目前为止还是免费的,只需要简单的注册-->添加个人应用-->获取appkey集apSecret 即可实现. 具体怎么申请,添加个人应用这里就不累赘了,相信能搜索到本文的必然有能力完成上面的操作. 1.下载mob的免费短信验证SDK,解压后复制SMS_SDK到你的工程,因为此SDK采用OC编写的,在与Swift结合时,需要添加桥接文件,具体操作如下: 右键你的Swift工程,新建一个OC文件,名字随便起,这时会弹

  • jQuery实现发送验证码并60秒倒计时功能

    本文给大家分享一段js代码关于实现验证码功能并在60秒后倒计时功能.废话不多说了,具体代码如下所示: <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <meta content="width=device-width,initial-scale=1.0,ma

  • JS实现动态倒计时功能(天数、时、分、秒)

    写在前面: 实现倒计时功能首先是得到目标时间,然后用当前时间减去目标时间,最后将时间差传化为天数.时.分.秒.由于得到的时间不能直接运算,可以采用object.getTime()方法转化成相同类型进行运算. 相关说明: 如果想要显示界面好看些,可以添加一下样式. <script> function show(){ //获取目的日期 var myyear=document.getElementById("year").value; var mymonth=document.g

  • JS实现用户注册时获取短信验证码和倒计时功能

    在用户注册时,通常需要短信验证码,而且为了交互效果,也需要增加倒计时. 效果如下: <div class="user-form"> <form action="{{ path('zm_member_register') }}" method="post"> <div class="form-list"> <label class="register-label"&g

  • 微信小程序项目实践之验证码倒计时功能

    效果如下:点击发送验证码按钮,按钮背景变色,不可点击,显示倒计时文字 首先js文件的data里面 声明一个变量用于表示当前是否可以点击,codeIsCanClick = true,  默认是可以点击的 写下界面代码: wxml文件中 <view class='centerRow'> <view class='inputLabel'>动态码:</view> <input class='inputStyle' style="flex:1 " bin

  • Ionic + Angular.js实现验证码倒计时功能的方法

    前言 之前跟大家分享了关于 Android 原生实现验证码倒计时,地址是这里,现在公司使用 Ionic 开发的 App 也要实现类似的功能,现在也记录下来,供大家参考: 效果图: 正文 首先介绍下与本文相关的概念 $interval $interval 是 window.setInterval 的 Angular 包装形式,函数如果在没有被取消的时候会无限执行.(取消使用 cancel(promise) ) 用法: $interval(fn,delay,[count],[invokeApply]

  • AngularJS 验证码60秒倒计时功能的实现

    最近在做AngularJS 项目,这是写的一个60秒倒计时,  angularjs 与jq不同, 不是使用dom节点操作,而是数据操作,写倒计时,最好是使用$timeout与$interval ,不要使用settimeout与setinterval .$timeout与$interval 可使绑定数据直接更新. html <a href="javascript:" rel="external nofollow" ng-click="sendphone

  • IOS实现验证码倒计时功能(一)

    验证码倒计时按钮的应用是非常普遍的,该Blog就和你一起来写一个IDCountDownButton来实现验证码倒计时的效果.你可以想使用普通的UIButton类型按钮一样,只需要设置其倒计时时长(若未设置,默认为60秒),就可以轻松的实现点击countDownButton开始倒计时,倒计时结束方可重新点击. 一.实现效果 如图 二.实现思路 1.自定义一个IDCountDownButton,重写 beginTrackingWithTouch:withEvent: 拦截button的点击事件,根据

  • iOS 验证码按钮倒计时功能

    在app 注册或者登录 需要验证码的地方.为了避免短时间内刷验证码.往往会加上一层验证. 倒计时结束后.可以重新获取! 代码实现如下: // _CountdownTime 倒计时总时间: //_timer 定时器 - (void)startTime:(UIButton *)VerificationCodeButton { __block NSInteger timeout = [_CountdownTime integerValue]; dispatch_queue_t queue = disp

随机推荐