json - 如何快速将 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到注册的手机号码。请在这里帮助我。
解决方案
您应该注意一件事:
- 你重复了你的代码:调用网络服务。你应该有一个负责这个的类,你只需传递方法(post,get ...)和参数。
关于将 OTP 发送到注册的电话号码,这应该是您的后端的责任。
而且,这不是 otpTextField 的值,就像这段代码
let parameters = ["mobile_number": phoneNumTextField.text as Any,
"otp": otpTextField.text as Any]
有一些第三方可以帮助进行电话验证(当然包括发送 otp),例如 Facebook 的 AccountKit(但不幸的是,它自 2019 年 9 月起停止)或 Twilio(目前似乎是最佳选择)。
您可以按照此将 Twilio 电话验证集成到您的应用程序中: https ://www.twilio.com/blog/phone-verification-in-ios-with-twilio-verify-and-swift-html
推荐阅读
- gstreamer - 无法在“GtkWidget”中转换“WXWidget”*
- python - 以特殊方式复制 DataFrame 行
- r - 更新重复行的值,R
- javascript - 如何同时检查 Object 和其他字段中的数组是否为空?
- javascript - 如何在 React Native 中创建此模式
- gradle - 在 settings.gradle 文件中如何动态包含所有子项目?
- flutter - 从列表中获取时,颤振类型'String'不是'index'类型'int'的子类型
- calendar - 无法弄清楚为什么 Google 日历无法在 IOS 或移动设备上正确加载
- iis - 我正在尝试使用 servermanager 将 django 应用程序部署到 IIS,我想知道免费域是否可用于本地计算机
- java - Android 11 和 ICC 的问题