2016-09-18 16 views
6

Witam próbuję odzyskać mój e-mail z Facebooka, ponieważ gram na Facebooku ios sdk za pomocą Swift. Platforma IOS to 10, szybka 3 i Xcode 8. Śledziłam samouczki online, ale mając problemy z pobieraniem e-maili.Nie można pobrać wiadomości e-mail z Facebooka za pomocą Swift 3 i ios 10

poniżej jest mój kod:

if FBSDKAccessToken.current() == nil { 
      print("I got token") 
      let fbButton = FBSDKLoginButton() 
      fbButton.readPermissions = ["public_profile", "email", "user_friends"] 
      view.addSubview(fbButton) 
      fbButton.center = view.center 
      fbButton.delegate = self 
      self.fetchprofile() 
     } 

     else { 
      print("Dont have token") 
      let loginView : FBSDKLoginButton = FBSDKLoginButton() 
      self.view.addSubview(loginView) 
      loginView.center = self.view.center 
      loginView.readPermissions = ["public_profile", "email", "user_friends"] 
      loginView.delegate = self 
     } 

func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) { 
     if error != nil { 
      print(error.localizedDescription) 
      return 
     } 
     print("I'm in") 
     fetchprofile() 
    } 

func fetchprofile() { 

     print("Getting profile") 

     let parameters = ["fields": "email"] 

     let graphRequest:FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: parameters, httpMethod: "GET") 

     graphRequest.start(completionHandler: {(connection, result, error) -> Void in 

      if error != nil { 
       print("Error retrieving details: \(error?.localizedDescription)") 
       return 
      } 

      guard let result = result as? [String:[AnyObject]], let email = result["email"] else { 
       return 
      } 
      print("Email: \(email)\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n") 
      self.view.backgroundColor = UIColor.red 

     }) 
    } 

w moim pliku appdelegate.swift:

//have both google and facebook signin. Google works but facebook doesn't 
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool { 
     return GIDSignIn.sharedInstance().handle(url, 
                sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String, 
                annotation: options[UIApplicationOpenURLOptionsKey.annotation]) || 
     FBSDKApplicationDelegate.sharedInstance().application(app, open: url, sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String, annotation: options[UIApplicationOpenURLOptionsKey.annotation]) 
    } 

jestem w stanie zalogować się i wylogować, ale nie jest w stanie odzyskać wiadomości e-mail.

UPDATE Właściwie kiedy faktycznie przechodzą print (e-mail) Widzę to na konsoli jako opcjonalny oświadczeniu. Mam problemy z wyświetleniem bez opcjonalnego statment

+0

Czy użytkownik przyznać uprawnienie do aplikacji e-mail Czy użytkownik ma zweryfikowanego adresu e-mail – WizKid

+0

@WizKid faktycznie widzę id e-mail, ale jego opcjonalne? Myślę, że mój problem pochodzi z drukowania go.Mam problem z oświadczeniem straży – user3497437

+0

Mam ten sam problem – Carlo

Odpowiedz

11

Mam rozwiązać problem w ten sposób:

func fetchProfile(){ 
    FBSDKGraphRequest(graphPath: "/me", parameters: ["fields" : "email, name, id, gender"]) 
     .start(completionHandler: { (connection, result, error) in 
      guard let result = result as? NSDictionary, let email = result["email"] as? String, 
       let user_name = result["name"] as? String, 
       let user_gender = result["gender"] as? String, 
       let user_id_fb = result["id"] as? String else { 
        return 
      }   
     }) 

    } 
+1

przepraszam za późno Odpowiedź i dziękuję.Byłem na kilka dni.Znowu dziękuję za odpowiedź.Jednak bardzo nowy na szybkie i dużo podnieść – user3497437

+0

Nie ma problemu, dzięki – Carlo

+0

To działało idealnie. Straż może być dość mylące, ale sprawia, że ​​se nse, kiedy już to przeczytasz. Pracował dla mnie na Swift 3, Xcode 8. Wielkie dzięki. –

0

Rozwiązanie to działa dobrze dla mnie bez „/” w parametrze graphPath!
FBSDKGraphRequest (graphPath: „ja” .....

Powiązane problemy