簡體   English   中英

如何從 swift 中的 KeychainWrapper 保存和檢索值

[英]How to save and retrieve values from KeychainWrapper in swift

我已經在 otpButn 中保存了 uid .. 我正在 registerButn 中檢索 uid .. 但我得到了 nil 因為我在 otpButn 之前錄制了 registerBtn .. 所以我怎樣才能全局保存 uid 我的意思是如何將所有注冊人員的 uid 存儲在 keychainWrapper 中並檢索它在regterBtn ..請在下面的代碼中幫助我。

我的 uid 為零。請幫助我如何在 keychainwrapper 中存儲和檢索 uid,以檢查用戶在注冊時是否存在。

這是我的代碼:

import UIKit
class RegistrationViewController: UIViewController, UITextFieldDelegate {

//MARK:- Outlets
@IBOutlet weak var nameTextField: UITextField!
@IBOutlet weak var phoneNumTextField: 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?
var Uid: Int?
override func viewDidLoad() {
    super.viewDidLoad()
    self.phoneNumTextField.keyboardType = .phonePad
    otpTextField.isHidden = true
}

func textFieldShouldReturn(_ textField: UITextField) -> Bool {
    textField.resignFirstResponder()
    return true
}
//MARK:- ButtonActions
@IBAction func registerButton(_ sender: Any) {

    if (nameTextField.text ==  "" || phoneNumTextField.text == "" || passwordTextField.text ==  "" || conformPasswordTextField.text == "")
    {
        registerButton.isHidden = false
        sendOtpButton.isHidden = true
        AlertFun.ShowAlert(title: "Title", message: "RequiredAllFields", in: self)
    }
    else{
        registerButton.isHidden = true
        sendOtpButton.isHidden = false
        otpTextField.isHidden = false
        DispatchQueue.main.async {
            self.otpTextField.text = self.otpField as? String
        }
        registerService()
        }
}
@IBAction func sendOTPButton(_ sender: Any) {
    otpService()
}

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

    print("register tapped")

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

    let url = URL(string: "https://dev.anyemi.com/webservices/anyemi/register")
    var req =  URLRequest(url: url!)
    req.httpMethod = "POST"
    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 userId: Int? = KeychainWrapper.standard.integer(forKey: "Uid")

                print("the keychain uid \(userId)")
                if userId != nil{
                    AlertFun.ShowAlert(title: "Title", message: "already exists", in: self)
                }
                else{
                let json = try JSONSerialization.jsonObject(with: data, options: .mutableContainers) as! [String: Any]
                print("the json regggggggggggis \(json)")
                self.otpField = json["otp"] as? Int
                }
            }catch{
                print("error")
            }
        }
    }).resume()
}
@objc func otpService(){

    let parameters = ["mobile_number": phoneNumTextField.text as Any,
                      "otp": otpTextField.text as Any]
    let url = URL(string: "https://dev.anyemi.com/webservices/anyemi/otpverify")
    var req =  URLRequest(url: url!)
    req.httpMethod = "POST"
    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]
                print("the json of otppppppppp \(json)")
                DispatchQueue.main.async {
                    if (self.otpTextField.text == String(self.otpField ?? 1)){
                        print("registration successfullllll...")
                        let mobileNum = json["mobile_number"] as! [String : Any]
                         self.Uid = mobileNum["id"] as? Int
                        print("otp Uid \(String(describing: self.Uid))")
                        DispatchQueue.main.async {
                            KeychainWrapper.standard.set(self.Uid!, forKey: "Uid")
                        }
                        let loginVC = self.storyboard?.instantiateViewController(withIdentifier: "ViewController") as! ViewController
                        self.present(loginVC, animated: true)
                    }
                    else {
                        print("register fail")
                    }
                }
            }catch{
                print("error")
            }
        }
    }).resume()
}
}

您可以參考以下鏈接以從 KeyChainWrapper 中保存和檢索值

https://github.com/jrendel/SwiftKeychainWrapper

在 Integrate 之后,您只需要創建一個帶有完成處理程序的 function :

 func isUserExist(handleComplete:@escaping ((Bool)->())) {

        let userId: String? = KeychainWrapper.standard.string(forKey: "Uid")
        DispatchQueue.main.async {
            if userId != nil{
                AlertFun.ShowAlert(title: "Title", message: "This user is Already exist", in: self)
                handleComplete(false)
            }else{
                handleComplete(true)
            }
        }

    }

並調用此 function 來檢查 Uid 的驗證,如下所示:

      self.isUserExist { isExxist in
                if isExxist {
                    self.registerService()
                    self.otpTimer = Timer.scheduledTimer(timeInterval: 1, target: self, selector: #selector(self.update), userInfo: nil, repeats: true)
                }else{
                  //here you can do whatever you want
                }

            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM