Học lập trình ứng dụng iphone: Tạo ứng dụng đăng nhập trên ios bằng swift 1 tháng 2 ngày trước #4078

  • huonggiang123
  • huonggiang123's Avatar
  • Offline
  • New Member
  • Tổng số bài viết: 16
  • Điểm khen ngợi: 0
- Tạo một project mới chú ý chọn ngôn ngữ swift

- Bước 1:
Tạo một file php đặt trên server để tiếp nhận thông tin đăng nhập cũng như trả về thông số của người dùng
@session_start();
include 'db.php';


		$dienthoai 		= lamsach(urldecode( (isset($_POST['dienthoai'])?$_POST['dienthoai']:0 ) ),$con); 
	
		$matkhau	  		= urldecode( (isset($_POST['matkhau'])?$_POST['matkhau']:"" ) ); 
	//$dienthoai ="0911155078";
	//$matkhau="1234";
		
		if($matkhau != "")
			$matkhau = md5($matkhau);
		
		
		$kichhoat = 0;
		//$idnguoidung = 0;
		
		if( $dienthoai != "" && $matkhau != "")
		{
				$query = "select * from oc_nguoidung where dienthoai = '$dienthoai' and matkhau ='$matkhau'";
			//	echo $query;
				$result = mysqli_query($con,$query) or die(mysqli_error($con));
				$i = 0;
				while ($row = mysqli_fetch_array($result)) 
				{
						$idnguoidung = $row['idnguoidung'];
						$kichhoat= $row['kichhoat'];
						$loai= $row['loai'];
						$ten =  $row['ten'];
						$dienthoai =  $row['dienthoai'];
						$fbid = $row['fbid'];
						$ngaynhap = $row['ngaydangky'];
						$email = $row['email'];
						$i ++;
						
				}
				
				if( $i == 0)
				{
					
					echo json_encode(0);
				}
				else
				{
					$_SESSION["dangnhap"] = "1";
					$nguoidung = new Nguoidung($idnguoidung,$ten, $email, $dienthoai, $fbid,$kichhoat,$ngaynhap,$loai);
					echo json_encode ($nguoidung);
				}
				
				
					
				
			
		}
		else
			echo 0;
	
	
	class Nguoidung
	{
		var $idnguoidung;
		var $ten;
		var $email;
		var $dienthoai;
		var $fbid;
		var $kichhoat;
		var $ngaydangky;
		var $loai;
		
		function Nguoidung($idnguoidung,$ten, $email, $dienthoai, $fbid,$kichhoat,$ngaydangky,$loai)
		{
			$this->idnguoidung = $idnguoidung;
			$this->ten = $ten;
			$this->email = $email;
			$this->dienthoai = $dienthoai;
			$this->fbid = $fbid;
			$this->kichhoat = $kichhoat;
			$this->ngaydangky = $ngaydangky;
			$this->loai = $loai;
		}
		
	}

Bước 2:
- Tạo giao diện trên swift. Kéo thả Navigate Controller để liên kết các màn hình. Đầu tiên vào view, library, show library để mở giao diện library. Chọn Navigate Controller và kéo thả vào bên trên trái màn hình.

- Tạo các text và input , button để thực hiện nhập thông tin đăng nhập. Sau đó chúng ta canh chỉnh các control để tạo giao diện đẹp và tự động canh chỉnh theo kích thước màn hình.

- Sau đó tiếp tục tạo giao diện cho màn hình sao khi đăng nhập

- Tiếp tục kết nối các control vào code để xử lý thông tin sau khi đăng nhập. Giao đoạn này nhất thiết phải thực hiện trên giao diện không copy code nhé


Bước 3:
- Thêm bộ thư viện firebase để thực hiện gửi các request lên server dạng post
- Vào trang firebase và đăng kí một tài khoản mới, tạo một project và chọn ios, sau đó tải file json về và chèn vào ứng dụng như trong hướng dẫn của firebase



- Mở terminal và dùng lệnh cd để đi đến thư mục cài đặt của project
-gõ lệnh để bắt đầu tải thư viện
pod init
- sau đó mở file: podfile và chỉnh nội dung:
target 'UserRegistrationExample' do
 use_frameworks!
 pod 'Alamofire', '~> 4.3'
end
-tiếp tục gõ lệnh:
pod install

Sau khi cài đặt xong ta tạo môt controller cho màn hình wellcome. Vào menu File chọn new File, chọn Swift, chèn tên file là ProfileViewController. Bước này chính là tạo một class cho controller này. Nội dung code như sau:
import UIKit

class ProfileViewController: UIViewController {
    
    @IBOutlet weak var lbten: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()
        //hiding back button
        let backButton = UIBarButtonItem(title: "", style: UIBarButtonItem.Style.plain, target: navigationController, action: nil)
        navigationItem.leftBarButtonItem = backButton
        
        //getting user data from defaults
        let defaultValues = UserDefaults.standard
        if let name = defaultValues.string(forKey: "ten"){
            //setting the name to label
            lbten.text = name
        }else{
            //send back to login view controller
        }
        
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    @IBAction func dangxuat(_ sender: UIButton) {
        //removing values from default
        UserDefaults.standard.removePersistentDomain(forName: Bundle.main.bundleIdentifier!)
        UserDefaults.standard.synchronize()
        
        //switching to login screen
        let loginViewController = self.storyboard?.instantiateViewController(withIdentifier: "ViewController") as! ViewController
        self.navigationController?.pushViewController(loginViewController, animated: true)
        self.dismiss(animated: false, completion: nil)
    }
    
}

Trong file ViewController ta viết code như sau:
import UIKit
import Alamofire
class ViewController: UIViewController {
    //The login script url make sure to write the ip instead of localhost
    //you can get the ip using ifconfig command in terminal
    let URL_USER_LOGIN = "https://cuoituan.vn/blog/noptien/nguoidung_dangnhap1.php"
    
    //the defaultvalues to store user data
    let defaultValues = UserDefaults.standard
    
    @IBOutlet weak var lbloi: UILabel!
    @IBOutlet weak var txtmatkhau: UITextField!
    @IBOutlet weak var txtdienthoai: UITextField!
    
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.hideKeyboardWhenTappedAround()
        self.title = "Nộp tiền online"
        // Do any additional setup after loading the view, typically from a nib.
        let backButton = UIBarButtonItem(title: "", style: UIBarButtonItem.Style.plain, target: navigationController, action: nil)
        navigationItem.leftBarButtonItem = backButton
        
        // Do any additional setup after loading the view, typically from a nib.
        
        //if user is already logged in switching to profile screen
        if defaultValues.string(forKey: "dienthoai") != nil{
            let profileViewController = self.storyboard?.instantiateViewController(withIdentifier: "ProfileViewController") as! ProfileViewController
            self.navigationController?.pushViewController(profileViewController, animated: true)
            
        }
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    @IBAction func dangnhap(_ sender: UIButton) {
        
        //getting the username and password
        //getting the username and password
        let parameters: Parameters=[
            "dienthoai":txtdienthoai.text!,
            "matkhau":txtmatkhau.text!
        ]
        
        //making a post request
        Alamofire.request(URL_USER_LOGIN, method: .post, parameters: parameters).responseJSON
            {
                response in
                //printing response
                print(response)
             
                //getting the json value from the server
                if let result = response.result.value {
                    if (String(describing:type(of: result)) == "__NSCFNumber")
                    {
                      self.lbloi.text = "sai tên và mật khẩu"
                    }
                    else
                    {
                    
                         let jsonData = result as! NSDictionary
                        
                        //if there is no error
                        if((jsonData.value(forKey: "idnguoidung") != nil)){
                            
                            //getting the user from response
                       //     guard let meal1 = Meal(name: "Caprese Salad", photo: photo1, rating: 4) else {
                       //         fatalError("Unable to instantiate meal1")
                      //      }
                         //   let user = jsonData.value(forKey: "Nguoidung") as! Nguoidung
                            print ( "ab")
                       //     print(jsonData.value(forKey: "idnguoidung"))
                            //getting user values
                            let idnguoidung = (jsonData.value(forKey: "idnguoidung") as! NSString).intValue
                            let ten = jsonData.value(forKey: "ten") as! String
                            
                            let email = jsonData.value(forKey: "email") as! String
                            let dienthoai = jsonData.value(forKey: "dienthoai") as! String
                            let loai = (jsonData.value(forKey: "loai") as! NSString).intValue
                            //saving user values to defaults
                            self.defaultValues.set(idnguoidung, forKey: "idnguoidung")
                            self.defaultValues.set(ten, forKey: "ten")
                            self.defaultValues.set(email, forKey: "email")
                            self.defaultValues.set(loai, forKey: "loai")
                            self.defaultValues.set(dienthoai, forKey: "dienthoai")
                            //switching the screen
                            let profileViewController = self.storyboard?.instantiateViewController(withIdentifier: "ProfileViewController") as! ProfileViewController
                            self.navigationController?.pushViewController(profileViewController, animated: true)
                            
                            self.dismiss(animated: false, completion: nil)
                        }else{
                            //error message in case of invalid credential
                            self.lbloi.text = "sai tên và mật khẩu"
                        }
                    }
                }
                
                    
                 
        }
        
    }
    

}

// Put this piece of code anywhere you like
extension UIViewController {
    func hideKeyboardWhenTappedAround() {
        let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(UIViewController.dismissKeyboard))
        tap.cancelsTouchesInView = false
        view.addGestureRecognizer(tap)
    }
    
    @objc func dismissKeyboard() {
        view.endEditing(true)
    }
}


Khi biên dịch chạy thử nếu bị lỗi không nhận thư viện, hãy đóng project, mở lại với file .xcworkspace và build, lỗi sẽ biến mất.

Nếu bạn muốn test trên iphone hãy kết nối điện thoại, chắc chắn rằng phiên bản iphone cùng với phiên bản mà project xuất bản. Nếu hiện thống báo key access thì hãy nhập mã đăng nhập của macbook rồi bấm allow all, có thể phải bấm nhiều lần.
Chúc các bạn thành công!
Lần sửa cuối: 1 tháng 2 ngày trước bởi huonggiang123.
Không cho phép Khách viếng thăm viết bài.

quang cao daklak

Bài đăng mới nhất