2017-02-13 27 views
3

Я - самообучающееся свежее развивающееся приложение для iPhone, использующее быстрый интерфейс. Я создаю страницу входа для аутентификации Facebook с использованием FBSDK. Я успешно внедрил кнопку входа в систему, которая входит в систему и выходит из системы. Он возвращает имя пользователя и идентификатор, но он не может отображать идентификатор электронной почты пользователя и показывает ошибку кода 2500. Также я не могу войти в систему с новым пользователем. Он автоматически регистрируется с одним и тем же пользователем.Как получить адрес электронной почты пользователя с помощью FBSDK в быстрой iOS для iPhone?

Здесь ошибка:

UserInfo={com.facebook.sdk:FBSDKGraphRequestErrorCategoryKey=0, com.facebook.sdk:FBSDKGraphRequestErrorHTTPStatusCodeKey=400, com.facebook.sdk:FBSDKErrorDeveloperMessageKey=An active access token must be used to query information about the current user., com.facebook.sdk:FBSDKGraphRequestErrorGraphErrorCode=2500, com.facebook.sdk:FBSDKGraphRequestErrorParsedJSONResponseKey={ 
    body =  { 
     error =   { 
      code = 2500; 
      "fbtrace_id" = BimF4Nuqx0v; 
      message = "An active access token must be used to query information about the current user."; 
      type = OAuthException; 
     }; 
    }; 
    code = 400; 
}}) 
Successfully logged in with Facebook... 
123 
result Optional({ 
    id = 120008981838163; 
    name = "Nisha Ios"; 
}) 
Did Logout of Facebook 

Вот мой код в AppDelegate.swift:

import UIKit 
import CoreData 
import FBSDKCoreKit 


@UIApplicationMain 
class AppDelegate: UIResponder, UIApplicationDelegate, { 

    var window: UIWindow? 

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 
     // Override point for customization after application launch. 

     FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions) 

     return true 
    } 


    func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any]) -> Bool { 

     var handled=FBSDKApplicationDelegate.sharedInstance().application(app, open: url, 
                      sourceApplication: options[UIApplicationOpenURLOptionsKey.sourceApplication] as! String!, annotation: options[UIApplicationOpenURLOptionsKey.annotation]) 

return handled 
} 

    func applicationWillResignActive(_ application: UIApplication) { 
     // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state. 
     // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game. 
     FBSDKAppEvents.activateApp() 
    } 

Вот мой код в ViewController.swift:

import UIKit 
import FBSDKLoginKit 
import FBSDKCoreKit 


class ViewController: UIViewController, UITextFieldDelegate, FBSDKLoginButtonDelegate, { 


    @IBOutlet var emailField: UITextField! 

    @IBOutlet var passField: UITextField! 

    @IBOutlet var customButton: FBSDKLoginButton! 


    @IBOutlet var myView: UIView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.emailField.delegate = self; 
     self.passField.delegate = self; 

     customButton.readPermissions=["email","public_profile"] 
     customButton.delegate=self 

     customButton.addTarget(self, action: #selector(handleCustomFBLogin), for: UIControlEvents.touchUpInside) 

func handleCustomFBLogin(){ 

    // FBSDKLoginManager().logIn(withReadPermissions: ["email","public_profile"], from: self) 
    // { (result, error) -> Void in 
    // if error != nil { 
     // print("custom FB Login Failed",error) 
     //  } 
    //} 
       self.showEmail() 
       print(123) 
     } 


    func showEmail() 
    { 
     FBSDKGraphRequest(graphPath: "/me", parameters: ["fields": "email, id, name"]).start { 
      (connection, result, err) in 
      if(err == nil) 
      { 
       print("result \(result)") 
      } 
      else 
      { 
       print("error \(err)") 
      } 
     } 

    } 

    public func loginButton(_ loginButton: FBSDKLoginButton!, didCompleteWith result: FBSDKLoginManagerLoginResult!, error: Error!) { 

     if error != nil 
     { 
      print(error) 
      return 

     } 
     else{ 
      print("Successfully logged in with Facebook... ") 

     } 
     //showEmail() 
    } 

    func loginButtonDidLogOut(_ loginButton: FBSDKLoginButton!){ 

     print("Did Logout of Facebook") 

    } 

Здесь в func handleCustomFBLogin(), я прокомментировал некоторый код. Если я раскомментирую их, я не могу получить имя пользователя или идентификатор и получить только ошибку кода 2500.

Может кто-нибудь сказать мне, что я делаю неправильно? Также помогите мне войти в систему с новым пользователем, а не автоматически войти в систему с тем же пользователем? Большое спасибо заранее :-)

+1

http://stackoverflow.com/questions/9347104/register-with-facebook-sometimes-doesnt-provide-email/18377407#18377407 –

ответ

3

Я использую это и его работу для меня. Пожалуйста, убедитесь, что учетная запись, которую вы используете для входа, имеет электронную почту и другую детальную информацию. Вы можете получить публичную информацию о пользователе Facebook. Во-вторых, ваш токен должен быть действительным.

func getFBUserData() 
    { 

      showIndicator() 

      if((FBSDKAccessToken.currentAccessToken()) != nil 

      { 

       FBSDKGraphRequest(graphPath: "me", 

            parameters: ["fields": "id, name, first_name, last_name, picture.type(large), email , gender"]).startWithCompletionHandler(

            { (connection, result, error) -> Void in 

             self.hideIndicator() 

        if (error == nil) 

        { 

         self.objSocialInfo = SignupUserStructure() 

         self.objSocialInfo.Name = String(result.objectForKey("first_name")!) + " " + String(result.objectForKey("last_name")!) 

         self.objSocialInfo.Email = String(result.objectForKey("email")!) 

         self.objSocialInfo.ProfilePicUrl = (result.objectForKey("picture")?.objectForKey("data")?.objectForKey("url") as? String)! 

         self.objSocialInfo.SocialId = String(result.objectForKey("id")!) 

         self.objSocialInfo.Gender = String(result.objectForKey("gender")!) 

        }}) 
      } 
    } 
+0

Спасибо так много. Моя электронная почта не была проверена. Вот почему он не будет возвращать электронную почту пользователя. Ошибка была удалена, когда я добавил условие FBSDKAccessToken. Еще раз спасибо. – Nisha

+0

Добро пожаловать @Nisha Счастливая помощь. Вы можете принять мой ответ. – ChanWarde

+0

:-) Я сделал. благодаря – Nisha