如何快速将OTP发送到已注册的手机号码? [英] How to send OTP to registered mobile number in swift?

查看:327
本文介绍了如何快速将OTP发送到已注册的手机号码?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的应用程序中,注册时我需要发送otp到注册号,但是我无法发送otp到注册号.对于注册,我有两个api,一个是注册和otpverify ...当我单击registerButton时,我需要将otp发送到注册的手机号码...这里如何将otp转换为注册的手机号码?

这是我的总代码:

import UIKit
class RegistrationViewController: UIViewController, UITextFieldDelegate{

//MARK:- Outlets
@IBOutlet weak var nameTextField: UITextField!
@IBOutlet weak var phoneNumTextField: UITextField!
@IBOutlet weak var emailTextField: UITextField!
@IBOutlet weak var passwordTextField: UITextField!
@IBOutlet weak var conformPasswordTextField: UITextField!
@IBOutlet weak var otpTextField: UITextField!
@IBOutlet weak var registerButton: UIButton!
@IBOutlet weak var sendOtpButton: UIButton!

var otpField: Int?

//MARK:- lifecycle methods

override func viewDidLoad() {
    super.viewDidLoad()
    self.phoneNumTextField.keyboardType = .phonePad

    otpTextField.isHidden = true
}
//MARK:- ButtonActions

@IBAction func registerButton(_ sender: Any) {
            registerService()
}

@IBAction func sendOTPButton(_ sender: Any) {

    otpService()
}

//MARK:- Service part
func registerService(){

    print("register tapped")

    let parameters = ["mobile_number": Int(phoneNumTextField.text ?? "") as Any,
                      "email":emailTextField.text as Any,
                      "password":passwordTextField.text as Any,
                      "name": nameTextField.text as Any]

    let url = URL(string: "https://webservices/register")
    var req =  URLRequest(url: url!)
    req.httpMethod = "POST"
    req.addValue("application/json", forHTTPHeaderField: "Contet-Type")
    req.addValue("application/json", forHTTPHeaderField: "Accept")

    guard let httpBody = try? JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted) else {return}
    req.httpBody = httpBody
    let session = URLSession.shared
    session.dataTask(with: req, completionHandler: {(data, response, error) in
        if response != nil {
            // print(response)
        }
        if let data = data {

            do{
                let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as! [String: Any]
                let phNum = json["mobile_number"] as? Int
                self.otpField = json["otp"] as? Int
                DispatchQueue.main.async {
                    self.otpTextField.text = self.otpField as? String
                }
            }catch{
                print("error")
            }
        }
    }).resume()
}

func otpService(){

    let parameters = ["mobile_number": phoneNumTextField.text as Any,
                      "otp": otpTextField.text as Any]

    let url = URL(string: "https://webservices//otpverify")
    var req =  URLRequest(url: url!)
    req.httpMethod = "POST"
    req.addValue("application/json", forHTTPHeaderField: "Contet-Type")
    req.addValue("application/json", forHTTPHeaderField: "Accept")

    guard let httpBody = try? JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted) else {return}
    req.httpBody = httpBody
    let session = URLSession.shared
    session.dataTask(with: req, completionHandler: {(data, response, error) in
        if response != nil {
            // print(response)
        }
        if let data = data {

            do{
                let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as! [String: Any]
                let mobileNum = json["mobile_number"] as! [String : Any]

                let Uid = mobileNum["id"] as? String
                let name = mobileNum["name"] as? String
                let phNum = mobileNum["username"] as? String

                DispatchQueue.main.async {
                    if (self.otpTextField.text == String(self.otpField!)){
                        print("registration successfullllll...")

                        let loginVC = self.storyboard?.instantiateViewController(withIdentifier: "LoginViewController") as! LoginViewController
                        self.present(loginVC, animated: true)
                    }
                    else{
                        print("register fail")
                    }
                }
            }catch{
                print("error")
            }
        }
    }).resume()
}
}

此处介绍如何将otp发送到注册的手机号码.请在这里帮助我.

解决方案

您应该注意一件事:

  • 您重复了代码:调用Web服务.您应该有一个负责这个的类,您只需传递方法(post,get ...)和参数即可.

关于将OTP发送到注册的电话号码,这应该由您的后端负责.

而且,它不是像这样的代码的otpTextField的值

let parameters = ["mobile_number": phoneNumTextField.text as Any, "otp": otpTextField.text as Any]

有些第三方可以帮助进行电话验证(当然包括发送otp),例如Facebook的AccountKit(但不幸的是,它自2019年9月起停止运行)或Twilio(似乎是目前的最佳选择). /p>

您可以按照以下步骤将Twilio电话验证集成到您的应用程序中:

Here how to send otp to registerd mobile number. please help me here.

There's one thing you should notice:

  • You repeated your code: Calling web service. You should have a class in charge of this, you just pass the method (post, get ...) and the parameters.

Regarding to sending OTP to registered phone number, it should be the responsibility of your backend.

And also, it's not the value of otpTextField like this code

let parameters = ["mobile_number": phoneNumTextField.text as Any, "otp": otpTextField.text as Any]

There're some third parties who can help on phone verification (include sending otp of course) like AccountKit of Facebook (but unfortunately, it stopped since Sep 2019) or Twilio (seems like the best choice at this time).

You can follow this to integrate Twilio phone verification into your application: https://www.twilio.com/blog/phone-verification-in-ios-with-twilio-verify-and-swift-html

这篇关于如何快速将OTP发送到已注册的手机号码?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆