Как отправить OTP на зарегистрированный номер мобильного телефона в swift? - PullRequest
0 голосов
/ 11 октября 2019

В моем приложении при регистрации мне нужно отправить otp на зарегистрированный номер, но я не могу отправить otp на номер регистрации. для регистрации у меня есть два apis, один из них - register и 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 на зарегистрированный номер мобильного телефона. пожалуйста, помогите мне здесь.

Ответы [ 2 ]

1 голос
/ 12 октября 2019

Есть одна вещь, которую вы должны заметить:

  • Вы повторили свой код: вызов веб-службы. У вас должен быть класс, отвечающий за это, вы просто передаете метод (post, get ...) и параметры.

Что касается отправки OTP на зарегистрированный номер телефона, это должно быть ответственностьювашего бэкэнда.

А также, это не значение otpTextField, как этот код

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

Некоторые сторонние организации могут помочь в проверке телефона (включите отправку otp, конечно), как AccountKit Facebook (но, к сожалению, он остановился с сентября 2019 г.) или Twilio (кажется, лучший выбор в настоящее время).

Вы можете следовать этому, чтобы интегрировать проверку телефона Twilio в вашприменение: https://www.twilio.com/blog/phone-verification-in-ios-with-twilio-verify-and-swift-html

0 голосов
/ 11 октября 2019

Что ж, это чисто бэкэнд-обязанность, но если вы все еще хотите попробовать, вам нужно поискать некоторые сторонние API, такие как twillio sms / otp services, и это тоже, если они предоставляют API-интерфейсы http REST, так что вы можете нажатьAPI от переднего конца напрямую.

...