Wednesday, 30 May 2018

FB With Swift


install fb pod

pod 'FacebookCore'

pod 'FacebookLogin'




 @IBAction func btnLoginWithFb(_ sender: UIButton) {
        
        var facebookUserData = [String: String]()
        let loginManager = LoginManager()
        loginManager.logOut()
        loginManager.logIn(readPermissions:[.publicProfile,.email], viewController: self) {
            loginResult in
            switch loginResult {
            case .failed(let error):
                print(error)
                self.showAlert("Error Message", msg: error as? String, dismissBtnTitle: "Ok")
            case .cancelled:
                print("User cancelled login.")
            case .success(_,_,let accessToken):
                print("Logged in!")
                facebookUserData["fb_auth_token"] = String( describing: accessToken.authenticationToken )
                self.getUserInfo(completion: {  userInfo, error in
                    if let error = error {
                        SVProgressHUD.dismiss()
                        print(error.localizedDescription)
                    }
                    // Get User Detail from Facebook
                    if let userInfo = userInfo, let id = userInfo["id"] , let name = userInfo["name"], let email = userInfo["email"]{
                        print("ID: \(id),name: \(name),email: \(email)")
                        facebookUserData["fbId"] = id as? String
                        facebookUserData["name"] = name as? String
                        facebookUserData["email"] = email as? String
                    }
                    
                    if let userInfo = userInfo, let pictureUrl = ((userInfo["picture"] as? [String: Any])?["data"] as? [String: Any])?["url"] as? String {
                        print(pictureUrl)
                        facebookUserData["pictureUrl"] = pictureUrl
                        self.DpImage.sd_setImage(with: URL(string: pictureUrl), placeholderImage: UIImage(named: "idol.png"))
                    }
                    
                    let json : NSDictionary? = ["username":facebookUserData["name"] as Any,"email" :facebookUserData["email"] as Any,"uid":facebookUserData["fbId"] as Any,"device_token":"device_token","photo":facebookUserData["pictureUrl"] as Any,"fb_auth_token":facebookUserData["fb_auth_token"] as Any]
                    
                    let jsonUser : NSDictionary? = ["user":json as Any ]
                    NetworkIO().post(Constants.FACEBOOK_LOGIN, json: jsonUser ){ (data, response, error) in
                        self.runOnUIThread({
                            SVProgressHUD.dismiss()
                            if let _ = error {
                                if error?.code == 404 {
                                    self.showAlert("Error!!", msg: "Server not found, please try again.", dismissBtnTitle: "Ok")
                                }else {
                                    self.handleError(error!)
                                }
                            } else {
                                if let httpResponse = response as? HTTPURLResponse {
                                    
                                    if httpResponse.statusCode == 500 {
                                        self.showAlert("Error!!", msg: "Internal Server Error", dismissBtnTitle: "Ok")
                                    }else if httpResponse.statusCode == 200 {
                                        if (data != nil) {
                                            print("data \(String(describing: data))")
                                            let status  = data?["status"] as! Int64
                                            switch status{
                                            case 0:
                                                // let message = data?["message"] as! String
                                                let result : NSDictionary = data?["data"] as! NSDictionary
                                                let email_verified = result["email_verified"] as! Int
                                                
                                                if email_verified == 1 {
                                                    let id = result["id"] as! Int
                                                    prefrence.set(email_verified, forKey: "email_verified")
                                                    prefrence.set(id, forKey: "id")
                                                    
                                                    let auth_token = result["auth_token"] as! String
                                                    let email = result["email"] as! String
                                                    
                                                    var photo: String?
                                                    
                                                    if result["photo"] != nil  {
                                                        photo = result["photo"] as? String
                                                        prefrence.set(photo, forKey: "photo")
                                                                                                           }
                                                    
                                                    let username = result["username"] as! String
                                                    prefrence.set(email, forKey: "email")
                                                    
                                                    prefrence.set(username, forKey: "username")
                                                    prefrence.set(auth_token, forKey: "auth_token")
                                                    prefrence.set(true, forKey: "login")
                                                    prefrence.set(result["sign_in_count"] as! Int, forKey: "sign_in_count")
                                                    prefrence.synchronize()
                                                    authToken = prefrence.string(forKey: "auth_token")!
                                                    
                                                    //                                                    self.goToHomeScreen()
                                                }
                                                
                                                if data!["message"] != nil {
                                                    //let mess  = data!["message"] as! String
                                                    print("result \(String(describing: result))")
                                                    //self.openOtpAlertView(message: mess,email: email)
                                                }
                                                break
                                            case 1007:
                                              
                                                break
                                            default:
                                                break
                                            }
                                        }
                                    }
                                }
                            }
                        })
                    }
                })
            }
        }
    }
    
    // Get UserDetail from Facebook GraphAPI
    func getUserInfo(completion: @escaping (_ : [String: Any]?, _: Error?) -> Void){
        SVProgressHUD.show()
        let request =   GraphRequest(graphPath: "me",parameters:["fields": "id,name,email,picture.type(large),birthday"])
        request.start { response, result in
            switch result {
            case .failed(let error):
                completion(nil ,error)
            case .success(let graphResponse):
                completion(graphResponse.dictionaryValue, nil)
            }
        }
    }