メールアドレスと名前を取得する Facebook SDK v4.4.0 Swift 質問する

メールアドレスと名前を取得する Facebook SDK v4.4.0 Swift 質問する

TL;TR: Facebook SDK 4.4 を使用してアプリにログインしているユーザーのメール アドレスと名前を取得する方法

これまでのところ、ログインが機能するようになりました。これで、アプリ内のどこからでも現在のアクセス トークンを取得できます。

ログイン ビュー コントローラーと Facebook ログイン ボタンを構成する方法:

class LoginViewController: UIViewController, FBSDKLoginButtonDelegate {

    @IBOutlet weak var loginButton: FBSDKLoginButton!

    override func viewDidLoad() {
        super.viewDidLoad()
        if(FBSDKAccessToken.currentAccessToken() == nil)
        {
            print("not logged in")
        }
        else{
            print("logged in already")
        }

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

    }

    //MARK -FB login
    func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!) {
        //logged in
        if(error == nil)
        {
            print("login complete")
            print(result.grantedPermissions)
        }
        else{
            print(error.localizedDescription)
        }

    }

    func loginButtonDidLogOut(loginButton: FBSDKLoginButton!) {
        //logout
        print("logout")
    }

メイン ビューで次のようにアクセス トークンを取得できるようになりました。

   let accessToken = FBSDKAccessToken.currentAccessToken()
    if(accessToken != nil) //should be != nil
    {
        print(accessToken.tokenString)
    }

ログインしているユーザーから名前とメールを取得するにはどうすればいいでしょうか。古い SDK または Objective-C を使用した質問と回答が多数あります。

ベストアンサー1

Android で使用したことがあるfieldsので、iOS でも試してみようと思い、動作しました。

let req = FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"email,name"], tokenString: accessToken.tokenString, version: nil, HTTPMethod: "GET")
   req.startWithCompletionHandler({ (connection, result, error : NSError!) -> Void in
       if(error == nil) {
            print("result \(result)")
       } else {
            print("error \(error)")
       }
   }
)

結果は次のように出力されます:

result {
   email = "[email protected]";
   id = 123456789;
   name = "Your Name";
}

Userこれらのフィールドはエンドポイントと等しいことがわかりました。このリンク取得できるすべてのフィールドを確認できます。

Swift 4 以降へのアップデート

let r = FBSDKGraphRequest(graphPath: "me",
                          parameters: ["fields": "email,name"],
                          tokenString: FBSDKAccessToken.current()?.tokenString,
                          version: nil,
                          httpMethod: "GET")

r?.start(completionHandler: { test, result, error in
    if error == nil {
        print(result)
    }
})

FBSDKLoginKit 6.5.0 による Swift 5 へのアップデート

guard let accessToken = FBSDKLoginKit.AccessToken.current else { return }
let graphRequest = FBSDKLoginKit.GraphRequest(graphPath: "me",
                                              parameters: ["fields": "email, name"],
                                              tokenString: accessToken.tokenString,
                                              version: nil,
                                              httpMethod: .get)
graphRequest.start { (connection, result, error) -> Void in
    if error == nil {
        print("result \(result)")
    }
    else {
        print("error \(error)")
    }
}

おすすめ記事