Запрос графика Facebook iOS swift не работает Я пытаюсь взять пользовательские данные и загрузить их в приложение Cloud Firestore - PullRequest
0 голосов
/ 31 марта 2020
@IBAction func buttTapped(_ sender: Any) {

func facebookLogin(){
        let loginManager = LoginManager()
       loginManager.logIn(permissions: ["publicProfile", "email"], from: self) { loginResult in
                   switch loginResult {
                   case .failed(let error):
                       print(error)
                   case .cancelled:
                       print("User cancelled login.")
                   case .success(let grantedPermissions, let declinedPermissions, let accessToken):
                    print("Logged in!")
                    self.fetchUserProfile()
                 }
           }

   }


}//

это функция fetchuserprofile ниже

func fetchUserProfile() {
      let graphRequest : GraphRequest = GraphRequest(graphPath: "me", parameters:   ["fields":"id, email, name, picture.width(480).height(480)"])

    graphRequest.start(completionHandler: { (connection, result, error) -> Void in
         if ((error) != nil)
        {
             print("Error took place: \(error ?? "" as! Error)")
        }
        else
        {
            let result = result as! Dictionary<String, Any>
            let picture = result["picture"] as! Dictionary<String, Any>
            let dataObj = picture["data"] as! Dictionary<String,Any>

            var emailValue = result["email"] as! String?

            if emailValue == nil {
                emailValue = ""
            }
            let name = result["name"] as? String
            let id = result["id"] as? String
            let imageUrl = result["url"] as? String

            // Update data to firestore

        }
    })
}

я получаю ошибки, такие как Невозможно преобразовать значение типа '(_) -> ()' в ожидаемый тип аргумента 'LoginManagerLoginResultBlock?' (aka 'Необязательно <(Необязательно, Необязательно) -> ()>')

, и если я попытаюсь это исправить, то это говорит о том, что случаи не найдены. Ниже приведены изображения, которые я пытаюсь сделать, это взять пользовательскую информацию и загрузите ее в Cloud Firestore. Любая справочная информация будет полезна

1 Ответ

1 голос
/ 31 марта 2020

Попробуйте это решение, это работает на моей стороне.

@IBAction func btnFBClick(_ sender: UIButton)
{
    let fbLoginManager : LoginManager = LoginManager()
    fbLoginManager.logIn(permissions: ["email"], from: self)
    { (result, error) -> Void in
        if (error == nil){
            let fbloginresult : LoginManagerLoginResult = result!
            // if user cancel the login
            if (result?.isCancelled)!
            {
                return
            }
            if(fbloginresult.grantedPermissions.contains("email"))
            {
                self.getFBUserData()
                // fbLoginManager.logOut()
            }
        }
    }
}

func getFBUserData()
{

   if((AccessToken.current) != nil)
   {
      GraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, picture.type(large), email"]).start(completionHandler:
                { (connection, result, error) -> Void in
                    if (error == nil)
                    {
                        if let data = result as? NSDictionary
                        {
                            let firstName  = data.object(forKey: "first_name") as? String
                            let lastName  = data.object(forKey: "last_name") as? String
                            let name = data.object(forKey: "name") as? String

                           if let email = data.object(forKey: "email") as? String
                           {

                           }
                           else
                           {
                                self.view.makeToast("We are unable to access Facebook account details, please use other sign in methods.")
                           }
                        }
                    }
            })
        }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...